1. Phác thảo chương trình đơn giản được
viết bằng C#
Trong
bài số 1 tôi đã giới thiệu cho các bạn biết cách tạo một chương trình dạng
Console (Chương trình sử dụng cửa sổ lệnh để hiển thị dữ liệu và nhập dữ liệu),
tuy nhiên tôi cũng xin điểm qua một vài vấn đề cơ bản về ngôn ngữ C#.
Ngôn
ngữ C# tương tự như ngôn ngữ lập trình C++, Java, đó là ngôn ngữ phân biệt chữ
cái hoa và chữ cái thường khi lập trình ví dụ các bạn đặt tên một biến hoặc một
hằng là “SoMot” thì nó sẽ khác một biến được đặt là “soMot”.
Ngôn
ngữ lập trình C# không hỗ trợ khai báo phương thức và biến toàn cục (Có nghĩa
là lập trình viên khai báo 1 phương thức hoặc biến ở có phạm vi áp dụng trên
toàn bộ ứng dụng).
Cũng
giống như ngôn ngữ C và C++ thì một chương trình Console được khởi đầu chạy bằng
hàm Main, một chương trình chỉ có duy nhất một phương thức Main.
+ Các phương thức Main
khác nhau : Mặc định khi tạo ứng ụng Console Visual
Studio sẽ tạo ra class có phương thức Main trả về void và có một mảng có kiểu
string danh sách các tham số chuyền vào cho hàm Main. Tuy nhiên các bạn có thể
tạo hàm Main theo các nguyên mẫu khác nhau như sau :
2. Biến và các kiểu dữ liệu
Tất cả chương trình ứng dụng đều phải thao tác với dữ liệu theo nhiều cách khác nhau. Lập trình viên C# cần phải hiểu được cách thức lưu trữ và xử lý dữ liệu trong chương trình mà lập trình viên đó muốn xây dựng và phát triển.
Khi chương trình cần lưu trư dữ liệu tạm thời để phục vụ cho quá trình xử lý tính toán thì chúng ta nghĩ ngay tới việc lưu trữ dữ liệu đó vào trong một biến. Trước khi sử dụng biến thì phải định nghĩa nó. Khi định nghĩa biến thì chúng ta phải định nghĩa tên biến và kiểu dữ liệu của biến.
2.1 Định nghĩa
Một biến là một thực thể chứa giá trị, giá trị này có thể được thay đổi trong chương trình hoặc trong một khối lệnh chứa nó. Ví dụ dùng biến để lưu trữ thông tin của tuổi của một sinh viên, hay mức lương của một nhân viên trong công ty.
Tương tự như các ngôn ngữ lập trình khác như C, C++, Java … Thông tin của biến sẽ được lưu trữ trong bộ nhớ máy tính và được định danh thông qua tên biến, tên biến được xác định là duy nhất trong phạm vi khai báo biến. Giá trị của biến sẽ được xác định thông qua tên biến, kích cỡ của bộ nhớ cấp phát cho biến đó là phụ thuộc vào kiểu dữ liệu của biến.
2.2 Sử dụng biến
Trong C#, bộ nhớ được khởi tạo và cấp phát cho biến tại thời điểm biến đó được tạo. Lập trình viên có thể khởi tạo giá trị của biến tại thời điểm tạo biến hoặc muộn hơn.
Ví dụ : int empNumber = 100; Khai báo một biến có tên là empNumber, giá trị của biến này được thiết lập tại lúc khởi tạo biến.
Hình ảnh mô tả biến :
Hình số 1 : Mô tả biến
Cú pháp khai báo biến trong C# như sau :
Cú pháp:
<Kiểu dữ liệu> <Tên biến >;
Mô tả :
<Kiểu dữ liệu> : Là kiểu dữ liệu của biến, kiểu dữ liệu này được C# hỗ trợ.
<Tên biến> : Tên của biến; Chú ý tên của biến cần phải tuân thủ theo quy tắc đặt tên biến của C#.
Quy tắc gán giá trị : Giá trị của biến có thể được gán tại lúc khởi tạo biến hoặc sau đó đều được. Cũng như các ngôn nhữ khác để gán giá trị của biến ta sử dụng dấu “=”;
2.3 Kiểu dữ liệu
CLR (Common Language Runtime) bao gồm CTS (Common Type System), CTS bao gồm tập hợp các kiểu dữ liệu được xây dựng mà lập trình viên có thể được sử dụng trong quá trình khai báo và sử dụng biến.
CTS hỗ trợ cả 2 kiểu giá trị (
Value-type) và kiểu tham chiếu (
Reference-types)
.
Kiểu giá trị (Value types) : Biến có kiểu giá trị sẽ chứa giá trị trực tiếp của dữ liệu mà nó chứa. Mỗi biến kiểu giá trị tự nó tạo ra bản sao chứa dữ liệu do vậy các thao tác dữ liệu trên biến này sẽ không làm ảnh hưởng tới các giá trị của biến khác.
Kiểu tham chiếu (Reference types): Chứa tham chiếu tới dữ liệu điều này có nghĩa là biến có kiểu tham chiếu sẽ trỏ tới địa chỉ chứa dữ liệu mà dữ liệu của biến đó chứa. Vì vậy có khả năng với một địa chỉ có thể có 2 biến tham chiếu cùng trỏ tới. Vì vậy khi thao tác trên một biến có thể sẽ ảnh hưởng tới biến kia.
Ví dụ :
Hình số 2 : Mô tả hình ảnh kiểu giá trị và kiểu tham chiếu
So sánh kiểu giá trị và kiểu tham chiếu
Bảng dưới đây so sánh biến có kiểu dữ liệu giá trị và biến có kiểu dữ liệu tham chiếu :
1.3.1 Các kiểu dữ liệu được xác định trước (Pre-defined data types)
Trong C# các kiểu dữ liệu được xác định trước là các kiểu dữ liệu cơ bản, các kiểu dữ liệu này được xác định trước về phạm vi và kích cỡ. Kích cỡ của dữ liệu giúp trình biên dịch cấp phát kích cỡ của bộ nhớ đối với biến và phạm vi dữ liệu giúp trình biên dịch chắc chắn rằng giá trị được gán nằm trong phạm vi kích cỡ của kiểu dữ liệu mà biến được khai báo.
Bảng sau đây mô tả kích cỡ và phạm vi dữ liệu của kiểu dữ liệu được xác định trước :
Hình số 3 : Mô tả
kiểu dữ liệu trong C#
2.3.2 Phân loại kiểu dữ liệu tham chiếu
C# phân loại kiểu dữ liệu tham chiếu thành các loại như sau :
- Object : Là kiểu tham chiếu được hệ thống hỗ trợ sẵn, nó là lớp cơ sở cho tất cả các kiểu dữ liệu mà người sử dụng được phép định nghĩa.
- String : Kiểu dữ liệu được hệ thống hỗ trợ sẵn, lớp String cho phép người sử dụng có thể thao tác và lưu trữ dữ liệu kiểu chuỗi Unicode.
- Class : Dữ liệu kiểu class sẽ được người sử dụng định nghĩa, đây là kiểu dữ liệu chính trong lập trình hướng đối tượng, nó có chứa các thuộc tính và phương thức.
- Delegate : Dữ liệu do người dùng định nghĩa, nó chứa tham chiếu tới một hoặc nhiều phương thức thực thi.
- Interface : Giao diện thực thi, được người sử dụng định nghĩa, thông thường Interface chứa các nguyên mẫu của các phương thức.
- Array : Dữ liệu mảng có cấu trúc do người sử dụng định nghĩa, trong C# khái niệm Array được mở rộng hơn rất nhiều, một mảng có thể chứa một tập hợp các phần từ, các phần tử này có thể cùng kiểu hoặc không cùng kiểu…
2.4 Quy tắc khai báo biến trong C#
- Tên của biến chỉ sử dụng các kỹ tự trong bảng chữ cái (a..z A..Z), các ký tự số (0..9) và các dấu gạch dưới, không sử dụng ký tự đặc biệt
- Ký tự đầu tiên của tên biến chỉ được phép sử dụng ký tự hoặc dấu gạch dưới.
- Không được phép sử dụng các từ khóa trong ngôn ngữ lập trình C# để đặt tên cho biến.
- C# phân biệt chữ hoa và chữ thường vì vậy khi đặt tên biến cần lưu ý điều này.
Ví dụ
3. Chú thích trong C#
Trong quá trình lập trình, các lập trình viên cần phải chú thích các đoạn mã do mình phát triển, chú thích này giúp cho các thành viên trong nhóm hiểu rõ hơn ý nghĩa của các đoạn mã do lập trình viên tạo ra. Chú thích rất có ý nghĩa khi chương trình ở các giai đoạn phát triển, nâng cấp và cập nhật các chức năng cho chương trình.
Ngoài ra khi thực hiện Unit Test thì cần hiểu chính xác ý nghĩa của các phương thức và các lớp được tạo ra của từng module của chương trình.
C# hỗ trợ 3 kiểu chú thích chính :
- Chú thích từng dòng đơn.( / / )
- Chú thích nhiều dòng.(/* */)
- Chú thích sử dụng XML.( / / /)
Ví dụ : Ví dụ sau mô tả cách thức chú thích trong C#
Hình số 4 : Sử dụng chú thích trong C#
Lợi ích sử dụng chú thích XML : Với các file chứa đoạn mã C# nếu sử dụng chú thích XML, khi lập trình viên muốn tạo các tài liệu kỹ thuật nhằm mô tả chi tiết các class, phương thức thực hiện thì lập trình viên chỉ cần sử dụng câu lệnh csc để tạo tài liệu XML thông qua cú pháp sau :
csc /doc:<Tên tập tin .Xml sẽ tạo thành> <Đường dẫn file nguồn chứa .cs>
Ví dụ :
csc /doc:”E:\Projects\Add.xml” “E:\Products\Example\AddNumber.cs”
Ngoài ra có thể sử dụng chức năng chức năng hỗ trợ sẵn trên bộ Visual Studio 2015 :
Để thực hiện thao tác này, các bạn chọn
Property của
Project, sau đó chọn Build và làm theo hình dưới đây :
Hình số 5: Cấu hình xuất ra file XML
4. Hằng
Hằng cũng là một biến nhưng giá trị của hằng không thay đổi. Biến là công cụ rất mạnh, tuy nhiên khi làm việc với một giá trị được định nghĩa là không thay đổi, lập trình viên phải đảm bảo giá trị của nó không được thay đổi trong suốt chương trình.
4.1 Các kiểu hằng
- Hằng nguyên : Là hằng được khai báo kiểu nguyên có thể hỗ trợ các kiểu như int, uint, long, or ulong
- Hằng bool : Lưu trữ kiểu dữ liệu true, false;
- Hằng số thực : Mô tả kiểu dấu phảy động dưới dạng thập phân hoặc khoa học.
- Hằng ký tự : Là một ký hiệu trong bảng mã Unicode được đặt trong hai dấu nháy đơn. Ví dụ Hằng ‘A’ có giá trị là 65.
- Hằng Null : Lưu trữ dữ liệu kiểu null (Kiểu dữ liệu đặc biệt).
- Một số hằng đặc biệt : Hằng đặc biệt được mô tả trong bảng sau
4.2 Khai báo hằng
Trong C# lập trình viên có thể khai báo hằng cho tất cả các kiểu dữ liệu. Khi khai báo hằng bắt buộc phải thiết lập giá trị của hằng trước khi sử dụng. Sử dụng từ khóa
const để khai báo hằng, sau đây mô tả cú pháp khai báo hằng
Cú pháp :
const<data type><identifier name> = <value>;
Mô tả :
- const: Từ khóa bắt buộc khi khai báo hằng
- data type: Kiểu dữ liệu của hằng.
- identifier name: Tên hằng, chú ý nguyên tắc đặt tên hằng như đặt tên biến .
- value: Giá trị cố định của hằng.
Ví dụ :
Hình số 6 : Khai báo hằng
5. Phương thức xuất nhập cơ bản
Với các lập trình viên mới học lập trình C# , luôn phải sử dụng cửa sổ dòng lệnh để thực hiện xuất nhập dữ liệu của chương trình. Để thực hiện điều này thì lập trình viên bắt buộc phải nắm được các phương thức nhập xuất cơ bản của C#.
Trong ứng dụng Console có 3 luồng cơ bản dùng để xử lý vào/ra:
- Nhập dữ liệu chuẩn (Standard in) : Dùng để nhận các tham số đầu vào cho chương trình xử lý.
- Xuất dữ liệu chuẩn (Standard out): Dùng hiển thị kết quả đầu ra.
- Thông báo lỗi (Standard err): Dùng hiển thị các thông báo lỗi.
5.1 Phương thức xuất dữ liệu
Trong C#, lớp Console trong namespace System dùng để thực hiện các hoạt động trên console.Để hiển thị ra màn hình ta sử dụng 2 phương thức đầu ra :
- Console.Write() : Hiển thị kết quả ra màn hình.
- Console.WriteLine(): Hiển thị kết quả ra màn hình và xuống dòng.
Ví dụ : Hình số 3 Sử dụng phương thức Console.WriteLine() để hiển thị thông tin tính tổng 2 số nguyên.
Chú ý khi sử dụng hàm
Console.WriteLine() nếu ta muốn hiển thị thông tin của nhiều biến đầu ra thì ta sử dụng
Placeholder để chứa các thông tin về vị trí xuất dữ liệu cũng như là format xuất dữ liệu.
Ví dụ : Hình số 5 Sử dụng phương thức
Console.WriteLine(“Diện tích đường tròn có bán kính {0} là {1}”,radius,area);
{0} : Vị trí xuất dữ liệu tương ứng với bán kính (radius).
{1} : Vị trí dữ liệu tương ứng với diện tích.
Chú ý : Khi sử dụng phương thức xuất dữ liệu cần phải chú ý các định dạng dữ liệu khi xuất đó chính là các định dạng kiểu số thực, kiểu Datetime.
Ví dụ : Mô tả sử dụng phương thức Console.WriteLine() có sử dụng format kiểu số và format kiểu Datetime
Hình số 7 : Sử dụng format dữ liệu với hàm Console.WriteLine()
5.2 Phương thức đọc dữ liệu
Trong C#, để đọc dữ liệu từ bàn phím ta sử dụng nhập chuẩn Standard in và thông qua 2 phương thức của lớp Console.
- Console.Read() : Đọc một ký tự từ bàn phím.
- Console.ReadLine() : Đọc một chuỗi ký tự từ bàn phím.
Ví dụ : Hình số 3 mô tả sử dụng Phương thức Console.ReadLine() để đọc giá trị nhập vào của Number1 và Number2.
Chú ý: Khi sử dụng hàm đọc dữ liệu Console.ReadLine() thì cần phải sử dụng các phương thức chuyển kiểu để thực hiện chuyển kiểu dữ liệu về giá trị mong muốn.