Nội dung chính
1. Expressions(Biểu thức)
Hãy xem xét một loạt các đoạn code sau:
int x{ 2 }; // initialize variable x with value 2
int y{ 2 + 3 }; // initialize variable y with value 5
int z{ (2 * 3) + 4 }; // initialize variable z with value 10
int w{ y }; // initialize variable w with value 5 (the current value of variable y)
Mỗi câu lệnh này định nghĩa một biến mới và khởi tạo cho nó bằng một giá trị. Lưu ý rằng các trình khởi tạo ở trên được sử dụng nhiều cấu trúc khác nhau gồm có chữ biến và toán tử. Bằng cách nào đó, C ++ đang chuyển đổi từng chữ, biến và toán tử này thành một giá trị duy nhất có thể được sử dụng làm giá trị khởi tạo cho biến.
Tất cả những thứ này điều có điểm chung, đó là họ sử dụng một biểu thức.
Biểu thức(Expressions) là sự kết hợp của chữ, biến, toán tử và lệnh gọi hàm rõ ràng để tạo ra một giá trị đầu ra duy nhất. Khi một biểu thức được thực thi, mỗi thuật ngữ trong biểu thức sẽ được ước tính để cho ra một giá trị đơn duy nhất còn lại (quá trình này được gọi là evaluation). Giá trị đơn đó là kết quả của biểu thức.
Dưới đây là một số ví dụ về một loại biểu thức khác nhau, với các comments cho biết ý nghĩa của từng dòng:
2 // 2 is a literal that evaluates to value 2
"Hello world!" // "Hello world!" is a literal that evaluates to text "Hello world!"
x // x is a variable that evaluates to the value of x
2 + 3 // 2 + 3 uses operator + to evaluate to value 5
x = 2 + 3 // 2 + 3 evaluates to value 5, which is then assigned to variable x
std::cout << x // x evaluates to the value of x, which is then printed to the console
Như bạn có thể thấy, ý nghĩa riêng của từng dòng code trên. Các biến sẽ được quy ra giá trị thực nhận của biến. Chúng ta đã không gọi bất kỳ hàm nào ở đây, nhưng trong ngữ cảnh của một biểu thức, khi dùng nó sẽ tự động quy ra bất kỳ giá trị nào mà biểu thức đó trả về. Và các toán tử cho phép chúng ta kết hợp nhiều giá trị với nhau để tạo ra một giá trị mới.
Lưu ý rằng các biểu thức không kết thúc bằng dấu chấm phẩy và không thể tự biên dịch. Ví dụ: nếu bạn cố gắng biên dịch biểu thức x = 5, trình biên dịch của bạn sẽ phàn nàn (có thể là về dấu chấm phẩy bị thiếu). Hơn nữa, các biểu thức luôn luôn là một phần của câu lệnh.
Ví dụ: lấy đoạn code này:
int x{ 2 + 3 }; // 2 + 3 is an expression that has no semicolon -- the semicolon is at the end of the statement containing the expression
Nếu bạn chia câu lệnh này thành cú pháp của nó, nó sẽ giống như thế này:
type identifier { expression };
Kiểu dữ liệu có thể là bất kỳ kiểu hợp lệ (chúng ta đã chọn là int). Tên định danh(tên biến) có thể là bất kỳ tên hợp lệ nào (chúng ta đã chọn là x). Và biểu thức có thể là bất kỳ biểu thức hợp lệ nào (chúng ta đã chọn là 2 + 3, sử dụng 2 chữ và toán tử +).
Bất cứ nơi nào bạn muốn sử dụng một giá trị nào đó trong C ++, bạn có thể sử dụng một biểu thức để tạo ra giá trị bạn cần và trình biên dịch sẽ giải quyết biểu thức đó thành một giá trị duy nhất, đó là giá trị bạn cần.
2. Câu lệnh biểu thức
Một số biểu thức nhất định (như x = 5) thường được dùng phổ biến. Tuy nhiên, chúng ta đã đề cập ở trên rằng các biểu thức phải là một phần của câu lệnh, vậy làm thế nào chúng ta có thể tự sử dụng các biểu thức này?
May mắn là, chúng ta có thể chuyển đổi bất kỳ biểu thức nào thành một câu lệnh tương đương (được gọi là câu lệnh biểu thức). Một câu lệnh biểu thức là một câu lệnh bao gồm một biểu thức theo sau là dấu chấm phẩy. Khi câu lệnh được thực thi, biểu thức sẽ được ước tính cho ra một giá trị (và kết quả của biểu thức sẽ bị huỷ sau đó).
Do đó, chúng ta có thể lấy bất kỳ biểu thức nào (chẳng hạn như x = 5) và biến nó thành một câu lệnh biểu thức (chẳng hạn như x = 5;) sẽ được biên dịch.
Lưu ý rằng chúng ta có thể tạo các câu lệnh biểu thức để biên dịch nhưng nó khá vô nghĩa / vô dụng (ví dụ: 2 * 3;). Biểu thức này ước tính thành 6, và sau đó giá trị 6 bị huỷ ngay sau khi trình biên dịch chạy qua dòng đó.
Nên nhớ, các giá trị được tính toán trong một biểu thức sẽ được huỷ ở cuối biểu thức.