Bài 4. Biến

Hiện mục lục Hiện mục lục

1. Khai báo biến

Trong bài 3 ta đã nhắc đến dòng int a; để khai báo một vị trí lưu dữ liệu. Thuật ngữ chính để gọi các vị trí lưu dữ liệu này là "biến", có lẽ là nói tắt từ nghĩa của thuật ngữ tiếng Anh "variable" là "biến đổi được".

Mỗi biến có một tên gọi, thuật ngữ gọi là định danh (identifier) và được chỉ định một kiểu (type), là loại giá trị có thể được chứa vào biến đó. Trong ví dụ int a;, a là định danh của biến và int là kiểu của biến.

Có một số quy định liên quan đến định danh của biến, hiện tại để cho đơn giản mà vẫn tránh được các vấn đề, bạn nên đặt tên biến với chỉ các chữ cái tiếng Anh, chữ số và dấu gạch dưới, và kí tự đầu tiên luôn là một chữ cái tiếng Anh.

Dù vậy, có một số từ được sử dụng bởi ngôn ngữ C++ với các ý nghĩa đặc biệt, chúng được gọi là từ khóa và không thể được sử dụng làm định danh cho biến. Các phần mềm viết mã C++ thường sẽ tô màu nổi bật các từ khóa, nên nếu bạn thấy tên biến mình đặt đổi màu như vậy, bạn sẽ cần phải chọn một định danh khác. Bạn có thể xem danh sách các từ khóa trên CPPReference (https://en.cppreference.com/w/cpp/keyword).

C++ cung cấp nhiều kiểu dữ liệu khác nhau, ở đây để bắt đầu ta sẽ chỉ sử dụng kiểu int, những kiểu dữ liệu khác sẽ dần được giới thiệu trong các bài tiếp theo. Tên kiểu int là một từ khóa do đây là một kiểu rất cơ bản.

Tên kiểu, tên biến và phần lớn các thành phần khác trong mã nguồn C++ phân biệt chữ hoa và chữ thường, vì vậy khi sử dụng chúng bạn cần chú ý gõ cho chính xác.

2. Khởi tạo biến

Một biến phải chứa một giá trị nào đó trước khi nó được truy cập, nếu không, chương trình là không hợp lệ và sẽ có hành vi không xác định. Ta có thể cho biến một giá trị ngay khi khai báo, hành động này được gọi là khởi tạo biến.

C++ có nhiều cú pháp khác nhau để khởi tạo biến. Để làm ví dụ ta sẽ khởi tạo một biến a kiểu int với giá trị 5.

Khởi tạo danh sách có một tính năng an toàn là không cho phép chuyển đổi giá trị từ một kiểu dữ liệu sang một kiểu khác "hẹp" hơn. Ta hãy xét ví dụ int i{5.9};. 5.9 là một giá trị số thực chứa phần thập phân, mà kiểu dữ liệu số nguyên thì không thể chứa phần thập phân, nên nếu ta đưa giá trị này vào biến sẽ xảy ra mất mát dữ liệu. Vì thế đây là một thao tác chuyển đổi thu hẹp, cú pháp khởi tạo danh sách sẽ ngăn chặn và bộ dịch sẽ báo lỗi. (Các kiểu dữ liệu có thể chứa số thực sẽ được giới thiệu sau.) Khởi tạo danh sách là kiểu khởi tạo hiện đại của C++ và bạn nên chủ yếu sử dụng cú pháp này.

Một tính năng nhỏ của C++ khi viết các giá trị số nguyên là bạn có thể chèn các dấu nháy đơn ' vào giữa các chữ số để làm dấu phân cách cho dễ đọc hơn, chẳng hạn 5'000'000 thể hiện con số năm triệu.

Thực ra, khi bạn không thực hiện khởi tạo biến, C++ thực hiện khởi tạo mặc định, tuy nhiên kiểu khởi tạo này đối với các biến kiểu số không thực hiện cho biến một giá trị ban đầu. Bạn nên thực hiện khởi tạo cho tất cả các biến ngay khi khai báo để tránh việc quên đưa một giá trị vào biến trước khi truy cập và làm cho chương trình trở nên không hợp lệ.

C++ có nhiều cú pháp khởi tạo khác nhau như trên để phục vụ cho những trường hợp sử dụng khác nhau, công dụng cụ thể của các cú pháp sẽ được trình bày trong các bài sau.

3. Khai báo và khởi tạo nhiều biến

Ta có thể khai báo và khởi tạo nhiều biến cùng kiểu trong một câu lệnh khai báo. Đầu tiên ta viết kiểu của các biến, sau đó ta viết tên và cú pháp khởi tạo của các biến, phân cách bằng dấu phẩy ,, ví dụ:

int startX{10}, startY{20};

Tuy nhiên cú pháp này thường gây khó đọc hơn, vì thế tốt nhất bạn nên khai báo mỗi biến trong một câu lệnh riêng:

int startX{10};
int startY{20};

4. Gán biến

Ta có thể đưa một giá trị mới vào biến sau khi khai báo, đây chính là "vary" trong "variable", "biến đổi" trong "biến đổi được". Câu lệnh gán gồm định danh biến cần gán ở bên trái, dấu bằng = và giá trị mới để gán ở bên phải. Giá trị mới sẽ được sao chép vào biến. Chẳng hạn muốn đổi giá trị của biến a kiểu int thành 42 ta viết a = 42;.

5. Biến hằng

Nhiều khi trong khi viết chương trình ta sẽ có những biến mà chỉ được cho một giá trị khi khởi tạo và không được gán giá trị khác sau đó. Để thể hiện ý muốn này, ta viết thêm từ const vào đầu câu lệnh khai báo, chẳng hạn const int size{100};. const là viết tắt của "constant", nghĩa là hằng số. C++ sẽ không cho phép thực hiện gán giá trị mới cho biến và bộ dịch sẽ báo lỗi nếu ai đó vô tình làm vậy. Khi bạn thực sự muốn thay đổi giá trị biến đó, việc bộ dịch báo lỗi như vậy có thể làm cho bạn để ý tới những ảnh hưởng có thể xảy ra khi thực hiện thay đổi biến. Vì vậy, bạn nên viết thêm const vào mọi khai báo biến mà bạn chưa có ý định thay đổi giá trị sau khi khai báo.

Mục lục Đóng mục lục