Biến và hằng số, định danh trong ngôn ngữ C
Với kiến thức ở bài mã giả và lược đồ giải thuật, chúng ta thấy để máy tính giải được một bài toán, máy tính sẽ cần một tài nguyên để lưu trữ giá trị sau khi được tính toán hoặc giá trị người dùng nhập vào, giống như việc con người ghi nhớ một công thức tính toán, trước khi tính toán một phép cộng 2 số với nhau, chúng ta cần ghi nhớ 2 số sử dụng để cộng, và sau khi nhẩm xong phép cộng, chúng ta cần ghi nhớ kết quả lại, máy tính cũng tương tự vậy, và người ta sử dụng khái niệm biến, hằng số để biểu diễn các tài nguyên được lưu trữ bên trong bộ nhớ máy tính.
Mục lục
Khái niệm biến (variable) trong ngôn ngữ lập trình C
Trong lập trình thì biến dùng để lưu trữ dữ liệu, nó có thể lưu một ký tự, chuỗi kí tự, một số, một mảng (danh sách), đối tượng …
Bản chất biến không lưu trữ nội dung của dữ liệu mà nó lưu trữ địa chỉ ô nhớ mà dữ liệu đang được lưu trữ và tên biến mô tả cho việc chúng ta đặt tên cho ô nhớ đó. Vì lí do đó, khi bạn truy xuất nội biến thì máy tính sẽ dựa vào địa chỉ để lấy đúng dữ liệu. Tất nhiên , về sau khi lập trình thành thạo, chúng ta có thể hiểu vắn tắt là biến lưu trữ một giá trị dữ liệu nào đó. Để giải thích về vấn đề này, mình sẽ nói qua một chút về kích thước đo lường dữ liệu trong lập trình.
Trong lập trình, đơn vị nhỏ nhất để đo lường dung lượng bộ nhớ máy tính là bit, 1 byte = 8 bit, 1 kilobyte = 1024 bytes , 1 megabyte = 1024 kilobytes, 1 gigabyte = 1024 megabytes …. ,
Với bộ nhớ máy tính có dung lượng càng lớn, máy tính có thể ghi nhớ được càng nhiều dữ liệu, trong khái niệm về bộ nhớ, chúng ta quan tâm tới 4 khái niệm nên nắm bắt để có thể lập trình C hiệu quả:
Vị trí vùng nhớ (memory address)
Giải thích ngắn gọn đây là khái niệm sử dụng để xác định vị trí từng vùng nhớ bên trong máy tính và được biểu diễn bằng số học, và vị trí vùng nhớ luôn luôn là duy nhất ( chúng ta có thể liên tưởng tới 1 thành phố có nhiều ngôi nhà khác nhau, người ta sử dụng địa chỉ để xác định được vị trí từng nhà riêng biệt)
Kích thước vùng nhớ được cấp phát (memory size)
Với mỗi một loại dữ liệu khác nhau (kiểu dữ liệu), máy tính sẽ cần một dung lượng bộ nhớ xác định để có thể biểu diễn chúng, lấy một ví dụ đơn giản chúng ta lưu trữ một ký tự, sẽ tốn ít dung lượng vùng nhớ hơn so với việc lưu trữ một chuỗi ( tập hợp các ký tự hay gọi là mảng ký tự ), quay lại liên tưởng, chúng ta hãy hình dung 1 ngôi nhà cấp 1 sẽ tốn ít tài nguyên xây dựng hơn so với 1 ngôi nhà 4 tầng, và ngôi nhà 4 tầng sẽ tốn ít tài nguyên hơn so với một căn tập thể hoặc chung cư.
Giá trị được lưu trữ bên trong vùng nhớ (value)
Trong khi lập trình, để nói với máy tính chúng ta cần một tài nguyên (biến, hằng số) để lưu trữ, máy tính sẽ cấp phát cho chúng ta một kích thước vùng nhớ vừa khớp, và sẽ tự động tìm kiếm và xác định một vị trí vùng nhớ còn trống và phù hợp để lưu trữ giá trị, và khái niệm này có liên quan tới kiểu dữ liệu, sẽ được nhắc thêm phía dưới và được nói chi tiết ở bài tiếp theo. Nhưng để dễ hình dung, bạn hãy liên tưởng trong ngôi nhà trên, ví dụ với với nhà cấp 4 chúng ta ở được 1 người, với nhà 4 tầng, ở 4 người là phù hợp, còn với chung cư thì sẽ ở được nhiều người hơn thế.
Tên biến, hằng số (variable, constant):
Đặt tên cho vị trí vùng nhớ máy tính vừa cấp phát. Ví dụ nhà mình ở số 6/203 Trường chinh, thay bằng việc gọi tới địa chỉ, người trong xóm sẽ gọi tắt là nhà ông Toàn. Vậy là từ sau, chỉ cần gọi nhà ông Toàn là sẽ có thể thay cho việc gọi tới địa chỉ 6/203 Trường Chinh.
Và mặc định, khi biến lưu trữ một giá trị có nghĩa là bộ nhớ đã cấp phát một kích thước vùng nhớ với một kích thước nào đó một vị trí nhất định trong bộ nhớ (trong ngữ cảnh này là bộ nhớ RAM), tham khảo hình dưới
Khai báo biến trong C
Cú pháp khai báo biến
variable_type variable_name;
// kieudulieu ten_bien;
Trong đó:
variable_type là kiểu dữ liệu
variable_name là tên của biến
Kiểu dữ liệu sẽ được đặt ngay đằng trước tên biến
Lưu ý khi khai báo biến: biến chỉ được phép khai báo duy nhất 1 lần trong chương trình, không thể khai báo lại, ở các quy trình sử dụng biến tiếp theo, chúng ta nói rằng đang sử dụng biến đã khai báo để thực thi.
Xem ví dụ về khai báo biến, và in dữ liệu biến ra màn hình:
#include<stdio.h>
#include<stdio.h>
int main() {
// khai bao bien so nguyen
int songuyen;
// gan gia tri cho so nguyen bang 5
songuyen = 5;
// khai bao va gan luon gia tri cho so nguyen
int songuyencach2 = 6;
// khai bao bien kytu la ki tu va gan bang ky tu 'A';
char kytu = 'A';
// khai bao bien so thuc va gan gia tri bang 5.1
float sothuc = 5.1;
printf("%d,%d,%c,%f",songuyen,songuyencach2,kytu,sothuc);
}
Quy tắc khai báo biến trong C
Trong ngôn ngữ C hay nhiều ngôn ngữ lập trình khác, quy tắc đặt tên biến luôn được nhắc tới để nhắc nhở lập trình viên cần nắm rõ các quy ước khi khai báo biến. Cụ thể như sau
- Tên biến chỉ có thể có các chữ cái (cả chữ hoa và chữ thường), chữ số và dấu gạch dưới và viết liền nhau.
- Chữ cái đầu tiên của một biến phải là một chữ cái hoặc một dấu gạch dưới. ( một số compiler không báo lỗi, nhưng luôn nhớ quy chuẩn là không được sử dụng số làm chữ cái đầu tiên khi khai báo biến )
- Không có quy tắc nào nói về độ dài của tên biến. Tuy nhiên, bạn có thể gặp sự cố trong một số trình biên dịch nếu tên biến dài hơn 31 ký tự, hãy cố gắng khai báo tên biến ngắn gọn, ngữ nghĩa dễ hiểu là ổn
- Ngôn ngữ C phân biệt chữ hoa và thường, nên khi khai báo biến và sử dụng cần viết chính xác, tránh sai chính tả trong việc khai báo biến, chỉ cần sai 1 ký tự, compiler sẽ không hiểu và thông báo lỗi. Thông thường, phong cách khai báo biến nên tuân theo quy ước: firstVariable hoặc my_Variable hay _myVariable ( từ đầu tiên viết thường, các chữ cái của từ tiếp theo trong biến nên viết hoa)
Ví dụ Một số cách khai báo tên biến đúng và sai
int !tenbien; // sai, tên biến không được phép chứa ký tự đặc biệt
int 1tenbien; // sai, chữ cái đầu tien tên biến không được sử dụng số
int ten bien; // sai, có khoảng cách giữa tên biến
int -tenbien; // sai, không sử dụng dấu - cho tên biến
int _tenbien; // đúng
int tenbien; // đúng
int tenbien1; // đúng
Một số lời khuyên khi đặt tên biến:
Nên đặt tên biến có ý nghĩa, không quá rút gọn để code sạch và dễ đọc lại, bảo trì. Ví dụ đặt firstName sẽ sạch hơn đặt là fn.
Không nên sử dụng chữ cái khi đặt tên biến, trừ một số tình huống dễ hiểu và cấu trúc ngắn gọn ( trong trường hợp sử dụng biến đếm trong vòng lặp).
Sau khi đặt tên biến, chúng ta tiếp tục sử dụng chúng bằng cách gọi trực tiếp tên biến ra, ví dụ:
int a; // khai báo biến
a = 5; // sử dụng biến trong phép gán
Ngoài ra, chúng ta cần tuân thủ quy tắc gán dữ liệu cho biến, khai báo biến kiểu dữ liệu gì, chúng ta sẽ phải gán tương ứng cho biến giá trị thuộc dữ liệu kiểu đó, ví dụ, nếu biến là số, không thể gán giá trị một ký tự vào biến, hoặc nếu biến là số nguyên, không thể gán một số thực vào trong biến. Ví dụ;
int number = 10; // khai báo biến có kiểu dữ liệu số nguyên
number = 10.5; // lỗi - gán một số thực vào biến số nguyên
double number; // lỗi - cố tình khai báo lại và đổi kiểu dữ liệu của biến
Khái niệm hằng số (constant) trong C
Hằng số (constant) thực chất vẫn là một biến, tuy nhiên hằng số không thay đổi được giá trị. Giá trị của hằng số thường sẽ được sử dụng để gán cho biến. Hoàn toàn có thể coi số 6 , ký tự ‘A’ , chuỗi ký tự “abcde” là một hằng số.
Và c cũng cung cấp cú pháp để chúng ta tự tạo một hằng số tự định nghĩa và bối cảnh sử dụng thường để lưu trữ những loại dữ liệu có tính cố định. Ví dụ PI có giá trị là 3.14 là có định rồi nên ta sẽ sử dụng cú pháp khai báo một biến hằng số để biểu diễn nó:
Cú pháp khai báo hằng số:
const double PI = 3.14;
Lưu ý, một biến hằng số một khi đã khai báo, không thể thay đổi giá trị của nó như biến thông thường.
const double PI = 3.14;
PI = 2.9; //lỗi
Lời khuyên khi đặt tên biến hằng số: sử dụng quy ước chữ hoa toàn bộ khi đặt tên hằng số, các bạn sẽ bắt gặp ở hầu hết các ngôn ngữ lập trình khác, quy ước là vậy, chúng ta cứ tuân thủ để đảm bảo code sạch, dễ đọc.
Định danh trong C
Đây là khái niệm chung khi đặt tên cho các biến, hằng số, hàm (functions) , và những thứ này do người dùng định nghĩa, gọi chung là định danh (đặt tên – identifier). Những định danh này có thể bao gồm 1 hoặc nhiều ký tự, quy ước ký tự đầu tiên của định danh luôn luôn là chữ cái hoặc dấu “_”, với các ký tự tiếp theo, có thể là chữ hoặc số, miễn không bị trùng với các ký tự đặc biệt.
1 Comments