C# cơ bản .NET Core

Biến và kiểu dữ liệu cơ bản C#

Tạo dự án mẫu CS02VariablesConstantsIO để thực hành

Trước tiên để thực hành gõ các lệnh tạo dự án mới đặt tên tên là CS002_VariablesConstantsIO rồi sau đó mở nó ra bằng VSC

mkdir CS002_VariablesConstantsIO
cd CS002_VariablesConstantsIO/
dotnet new console
code .

Khi mở thư mục dự án bằng Visual Studio Code (VSC) ( có thể dùng lệnh code lệnh này có là do thiết lập VSC), trong VSC chọn menu View > Command Pallet ... gõ vào .NET - từ menu đổ xuống chọn mục: NET: Generate Assets for Build and Debug - để VSC thêm vào dự án file cấu hình build và chạy ứng dụng (trong thư mục .vscode).

CSharp VS

Như phần Giới thiệu C#, bạn mở file Program.cs và bắt đầu viết code từ hàm Main trong file này.

Lưu ý

Để khi nhấn CTRL + F5 hay F5 chạy chương trình nó nhận tương tác tốt từ terminal thay có thể thay đổi cấu hình khởi chạy dự án của VSC. Hãy mở file ./vscode/launch.json, tìm đến dòng "console": "internalTerminal" hãy thay bằng "console": "integratedTerminal" hoặc "console": "externalTerminal" (mở của sổ Terminal mới khi chay)

Biến trong C#

Biến dùng để lưu các giá trị dữ liệu vào bộ nhớ, giá trị lưu trữ vào đó có thể đọc và thay đổi bởi chương trình C# khi nó chạy. Để dùng biến, trước tiên phải đặt một cái tên cho biến và chỉ ra biến đó sẽ lưu loại dữ liệu nào (số nguyên - int, số thực double, chuỗi - string ...), việc này gọi là khai báo biến

Khi đặt tên biến C# cần lưu ý: tên biến có thể chứa chữ, số và ký tự _ nhưng ký tự đầu tiên của tên biến không được dùng số, tên biến trong C# có phân biệt chữ hoa chữ thường. Hãy đặt tên biến sao cho nó ngắn gọn nhưng gọi nhớ đến thông tin dữ liệu biến đó lưu trữ. Ví dụ như studentName, studentAge ... sẽ hay hơn abc, xyz ... Ngoài ra cũng không đặt tên biến trùng với những từ khóa dành riêng cho câu lệnh C#

Các từ khóa trong C#

abstract    as	        base	    bool        break	byte	    case
catch	    char        checked	    class       const	continue    decimal
default	    delegate	do          double      else	enum	    event
explicit    extern      false	    finally     fixed	float	    for
foreach	    goto        if          implicit    in      int
interface   internal	is          lock        long	namespace   new
null	    object      operator    out	        out     override    params
private	    protected	public	    readonly	ref     return	    sbyte
sealed	    short       sizeof	    stackalloc	static	string	    struct
switch	    this        throw	    true        try     typeof	    uint
ulong	    unchecked	unsafe	    ushort      using	virtual	    void
volatile    while

add         alias	ascending   descending	dynamic	from	    get
global      group	into	    join	let	orderby
partial     remove	select	    set

Khai báo biến để khai báo biến bạn cần chỉ ra kiểu dữ liệu của biến (như int, float, string ... sẽ tìm hiểu ngay sau đây) và tên biến, ví dụ:

//Khai báo biến có tên studentName, lưu loại dữ liệu chuỗi (string)
string studentName;

Ở trên bạn đã khai báo một biến có tên là studentName với kiểu dữ liệu là string, dòng khai báo đó kết thúc bởi ký hiệu ; là ký hiệu kết thúc câu lệnh C#

Câu lệnh C# là một tác vụ nào đó được chương trình C#, mặc định mỗi câu lệnh C# kết thúc bởi ký hiệu ;

Gán giá trị cho biến: ở trên, biến studentName đã được khai báo, nhưng nó chưa gán giá trị nào cả (nó chứa giá trị mặc định - tùy kiểu dữ liệu, như string là null, int là 0 ...), trước khi sử dụng biến - bạn cần gán giá trị cho biến, bạn có thể gán giá trị ngay tại dòng khai báo biến hoặc sử dụng toán tử gán = trước khi biến được sử dụng.

// Khai báo biến và gán ngay giá trị lưu vào biến
string address = "Hà Nội, Việt Nam";

// Khai báo biến, sau đó trước khi sử dụng gán giá trị cho biến
int studentAge;
studentAge = 22;

Kiểu dữ liệu C# định nghĩa sẵn

Kiểu dữ liệu C# cơ bản, định nghĩa sẵn (buil-in) trong C# cơ bản có:

  • int kiểu số nguyên (có dấu, dùng 32 bit biểu diễn, từ -2,147,483,648 đến 2,147,483,647)
  • sbyte kiểu số nguyên (có dấu, dùng 8 bit biểu diễn, từ -128 đến 127)
  • byte kiểu số nguyên (không dấu, dùng 8 bit biểu diễn, từ 0 đến 255)
  • short kiểu số nguyên (có dấu, dùng 16 bit biểu diễn, từ -32,768 đến 32,767)
  • ushort kiểu số nguyên (không dấu, dùng 16 bit biểu diễn, từ 0 đến 65,535)
  • long kiểu số nguyên (có dấu, dùng 64 bit biểu diễn, từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807)
  • ulong kiểu số nguyên (không dấu, dùng 64 bit biểu diễn, từ 0 đến 18,446,744,073,709,551,615)
  • float số thực chấm động (dùng 32 bit biểu diễn phù hợp số có bảy chữ số, độ chính xác số dấu chấm động 1.5 × 10−45 đến 3.4 × 1038)
  • double số thực chấm động (dùng 64 bit biểu diễn)
  • decimal số thực chấm động (dùng 128 bit biểu diễn)
  • char một ký tự (dùng 16 bit biểu diễn ký tự Unicode)
  • bool kiểu logic (chỉ nhận giá trị false hoặc true)
  • string chuỗi (xâu) ký tự (tập hợp các ký tự theo thứ tự - một văn bản text)
  • object đối tượng, biểu diễn các đối tượng C#, nó là kiểu cơ sở - mọi đối tượng C# đều kế thừa từ kiểu này.

Ví dụ khai báo biến sử dụng vào kiểu dữ liệu trên.

int seconds = 60;                    //khai báo biến số nguyên
double so_pi = 3.14;                 //khai báo biến số thực
bool deltaIsSezo = true;             //Khai báo biến logic
char chooseAction = 'S' ;            //Khai báo biến kiểu ký tự
string msgResult = "Kết quả giải:" ; // khai báo biến chuỗi

Để biểu diễn giá trị của một chuỗi sử dụng ký hiệu "" như "nội - dung - chuỗi", nhưng biểu diễn một ký tự dùng ký hiệu '' như 'A'

Xuất dữ liệu ra màn hình Console

Thư viện lớp C# cung cấp sẵn một lớp tên là Console (System.Console) trong đó có chữa một số phương thức tĩnh để nhập / xuất dữ liệu với màn hình dòng lệnh terminal. Một số phương thức bạn có thể sử dụng ngay trong việc in dữ liệu đó là:

  • Console.Write(value) - in value ra màn hình, nhưng không xuống dòng mới - value có thể là một số, chữ, chuỗi ...
  • Console.WriteLine(value) - in value ra màn hình, sau đó xuống dòng
  • Console.ForegroundColor - thuộc tính để gán màu chữ xuất ra, nó có thể gán các màu như ConsoleColor.Red, ConsoleColor.Green, ConsoleColor.White ...
  • Console.ResetColor() - đưa Console về màu mặc định

Ví dụ:

Console.WriteLine();                                                //Xuống dòng
Console.WriteLine();                                                //Xuống dòng

Console.ForegroundColor = ConsoleColor.DarkMagenta;                 //Đặt màu chữ
Console.WriteLine("XIN CHÀO - CHƯƠNG TRÌNH NHẬP XUẤT DỮ LIỆU");     //In dòng chữ
Console.ResetColor();                                               //Reset màu

Console.Write("Giá trị biến so_pi là : ");                          //In dòng chữ
Console.WriteLine(so_pi);                                           //In giá trị biến
Console.WriteLine();                                                //Xuống dòng

Chạy thử (CTRL + F5)

CSharp VS

Bạn có thể dùng format string để tạo ra chuỗi in ra nhằm giảm thiểu dòng code.

int a = 123;
double b = 567.123;

Console.WriteLine("Biến a = {0}, biến b = {1}", a, b);

//Xuất ra: Biến a = 123, biến b = 567.123

Trong chuỗi định dạng trên chỗ nào có ký hiệu {0} thì sẽ được thay thế bởi tham số thứ nhất a, và ký hiệu {1} thì thay bởi tham số thứ 2.

Ngoài ra cũng định dạng để chèn cả một biểu thức vào vị trí ấn định trong chuỗi, nếu trước ký hiệu chuối điền ký tự $, thì trong chuỗi chỗ nào muốn thay bằng biểu thức thì viết biểu thực tại đó và bọc trong cặp {}

int a = 123;
double b = 567.123;

Console.WriteLine($"Biến a = {a}, biến b = {b} - tích là {a * b}");

//Xuất ra: Biến a = 123, biến b = 567.123 - tích là 69756.129

Nhập dữ liệu trong C#

Có hàm Console.ReadLine() cho phép nhập dữ liệu cho đến khi nhấn Enter, hàm này trả về chuỗi mà người dùng nhập vào. Tương tự hàm Console.ReadKey() trả về ngay thông tin phím bấm khi người dùng bấm, ở trường hợp này để lấy chữ mã người dùng bấm thì viết Console.ReadKey().KeyChar

string userLogin;
Console.Write("Nhập username : ");
userLogin = Console.ReadLine();
Console.WriteLine($"Tên nhập vào là: {userLogin}");

Chuyển kiểu dữ liệu

Mặc định hàm Console.ReadLine() trả về string nếu muốn chuỗi đó nhập xong chuyển thành các kiểu dữ liệu khác như int, float ... thì cần các hàm chuyển kiểu, một số hàm đó là:

  • Convert.ToInt32(value) chuyển value thành kiểu int
  • Convert.ToDouble(value) chuyển value thành kiểu double
  • Convert.ToBoolean(value) chuyển value thành kiểu bool
Console.Write("Nhập một số thức : ");
// Nhập chuỗi - chuyển ngay chuỗi đó thành số thực
double dinput = Convert.ToDouble(Console.ReadLine());
Console.WriteLine($"Số đã nhập là: {dinput}");
CSharp VS

Khai báo biến kiểu ngầm định với var

Mặc định C# khi khai báo biến cần phải chỉ rõ một cách tường minh kiểu dữ liệu (int, float ...) của biến, ở ở các ví dụ trên. Để linh hoạt, C# còn có một cơ chế khai báo biến với từ khóa var, mà không cần chỉ rõ ngay kiểu dữ liệu của biến mà kiểu của biến được xác định theo kiểu biểu thức gán vào biến ngay sau đó. (cũng có nghĩa là phải khởi tạo ngay). Ví dụ:

var bien1 = 3.14;                                           // biến sẽ có kiểu double
var bien2 = 3;                                              // biến sẽ có kiểu int
var bien3 = "Biến khai báo với var phải khởi tạo ngay";     // string
var bien4 = (5 < 4);                                        // bool

Hãy thử tạo breakpoint tại biến 1, tiến hành nhấn F5 để Debug, sau đó Step Into F11 qua từng dòng để thấy thông tin thực sự các biến trên, bạn sẽ thấy kiểu dữ liệu của biến nó được xác định giống như biểu thức gán vào biến

CSharp VS

Nếu dùng var khai báo mà không khởi tạo sẽ lỗi; ví dụ var a; sẽ lỗi nhưng var a = 123; thì đúng chuẩn.

Sử dụng var có ích giúp code ngắn gọn ở rất nhiều trường hợp với các kiểu dữ liệu phức tạp sau này.

Hằng số trong C#

Hằng số lưu trữ các giá trị mà không thay đổi được nữa, dùng từ khóa const để khai báo hằng số (như khai báo, khởi tạo biến nhưng phía trước có từ khóa const)

const string MON = "THỨ HAI";
Console.WriteLine(MON);

Source code: CS002_VariablesConstantsIO (Git), hoặc tải ex002


Đăng ký nhận bài viết mới