Trong lập trình, biến (variable) là một tên gọi mà bạn đặt cho một vùng (hay vị trí) trong bộ nhớ của máy tính. Vùng nhớ này được dùng để lưu trữ một loại dữ liệu hoặc giá trị nhất định, phục vụ cho quá trình chương trình hoạt động.
Bạn có thể tưởng tượng biến như một chiếc hộp rỗng có dán nhãn tên bên ngoài. Chiếc hộp này có thể chứa đựng một món đồ hoặc một thứ gì đó ở bên trong nó.
Món đồ hoặc thứ được đặt bên trong chiếc hộp đó chính là giá trị của biến. Tên được dán trên nhãn bên ngoài hộp là tên biến, giúp bạn dễ dàng gọi tên và truy cập đến giá trị mà nó đang giữ.
Ví dụ, bạn có thể có một chiếc hộp dán nhãn "tuoi". Bên trong hộp đó có thể chứa số 25. Lúc này, "tuoi" là tên biến, và giá trị của biến "tuoi" là 25.
Một đặc điểm cốt lõi của biến là giá trị mà nó lưu trữ có thể thay đổi trong suốt quá trình chương trình máy tính thực thi. Bạn có thể mở hộp ra và thay thế món đồ bên trong bằng một món đồ khác.
Khả năng thay đổi giá trị này là điều làm cho biến trở nên cực kỳ mạnh mẽ và linh hoạt trong lập trình. Nó cho phép chúng ta làm việc với dữ liệu động, không cố định.
Mọi biến đều phải gắn liền với một kiểu dữ liệu nhất định. Kiểu dữ liệu này giống như việc quy định chiếc hộp của bạn chỉ có thể chứa đồ rắn (số) hoặc đồ lỏng (chuỗi ký tự), chứ không thể chứa cả hai cùng lúc một cách lộn xộn.
Việc hiểu rõ khái niệm biến và cách thức hoạt động của nó là viên gạch đầu tiên và quan trọng bậc nhất khi bạn dấn thân vào con đường lập trình.
DỊCH VỤ CÓ THỂ BẠN QUAN TÂM
Khi sản phẩm lập trình của bạn cần một môi trường hoạt động ổn định, tốc độ cao và cấu hình mạnh mẽ để vận hành, dịch vụ thuê VPS giá rẻ - uy tín - tốc độ cao tại InterData là lựa chọn đáng tin cậy. Với nền tảng phần cứng thế hệ mới, bộ xử lý AMD EPYC Gen 3th, ổ cứng SSD NVMe U.2 tốc độ cao cùng công nghệ ảo hóa tiên tiến, dịch vụ mang lại chất lượng ổn định, uy tín, với mức giá phải chăng chỉ từ 3K/Ngày.
Biến đóng vai trò trung tâm trong hầu hết các chương trình máy tính. Lý do chính chúng ta sử dụng biến là để lưu trữ và quản lý dữ liệu một cách hiệu quả và linh hoạt trong suốt quá trình chương trình chạy.
Hãy thử tưởng tượng bạn cần viết một chương trình nhỏ để tính diện tích của nhiều hình chữ nhật khác nhau. Công thức tính diện tích là chiều dài * chiều rộng.
Nếu không có biến, bạn sẽ phải viết lại phép tính này với các con số cụ thể cho từng hình chữ nhật. Ví dụ: dien_tich1 = 10 * 5, dien_tich2 = 12 * 6, dien_tich3 = 8 * 4.5, v.v.
Cách làm này rất lặp lại, khó đọc, và đặc biệt khó sửa đổi nếu sau này bạn muốn thay đổi giá trị chiều dài hoặc chiều rộng của một hình chữ nhật nào đó.
Khi sử dụng biến, code của bạn sẽ trở nên gọn gàng và dễ quản lý hơn rất nhiều. Bạn chỉ cần định nghĩa các biến như chieu_dai và chieu_rong.
Sau đó, công thức tính diện tích sẽ luôn là dien_tich = chieu_dai * chieu_rong. Lúc này, dien_tich cũng là một biến dùng để lưu kết quả.
Để tính diện tích cho một hình chữ nhật mới, bạn chỉ cần thay đổi giá trị của hai biến chieu_dai và chieu_rong rồi chạy lại công thức tính diện tích đó. Code không cần viết lại.
Điều này thể hiện tính tái sử dụng cao của code khi dùng biến. Logic tính toán được viết một lần, còn dữ liệu có thể thay đổi linh hoạt.
Một ví dụ khác là lưu trữ thông tin người dùng. Thay vì viết tên người dùng trực tiếp vào mọi vị trí cần hiển thị, bạn lưu tên vào một biến ten_nguoi_dung.
Khi cần hiển thị tên, bạn chỉ cần gọi biến ten_nguoi_dung. Nếu người dùng cập nhật tên, bạn chỉ cần thay đổi giá trị của biến đó tại một chỗ duy nhất.
Sử dụng biến giúp code dễ đọc hơn (tên biến thường gợi nhớ ý nghĩa của dữ liệu), dễ bảo trì hơn (sửa dữ liệu ở một chỗ), và cho phép chương trình phản ứng với dữ liệu đầu vào khác nhau.
Nguồn: Biến là gì? - InterData.vn
Để hiểu rõ hơn về biến, chúng ta cần xem xét các yếu tố chính tạo nên nó. Một biến trong lập trình thường bao gồm các thành phần cơ bản sau: Tên biến, Giá trị, Kiểu dữ liệu và Vị trí trong bộ nhớ.
Chúng ta đã sơ lược qua các thành phần này khi định nghĩa biến, giờ hãy đi sâu vào từng phần.
Tên biến (Variable Name) là cái nhãn mà bạn dán lên chiếc hộp (vùng nhớ). Đây là cách duy nhất để bạn nhận biết và truy cập vào giá trị mà biến đó đang lưu trữ trong chương trình.
Việc đặt tên biến không chỉ là việc chọn một từ tùy ý. Hầu hết các ngôn ngữ lập trình đều có những quy tắc nghiêm ngặt về cách đặt tên biến hợp lệ.
Các quy tắc phổ biến bao gồm: tên biến chỉ được chứa chữ cái (a-z, A-Z), chữ số (0-9) và một số ký tự đặc biệt (thường là dấu gạch dưới _).
Tên biến không được phép bắt đầu bằng một chữ số. Ví dụ, 1bien là tên không hợp lệ, nhưng bien1 thì hợp lệ.
Trong nhiều ngôn ngữ lập trình, tên biến không được chứa khoảng trắng. Ví dụ, ten nguoi dung là sai, bạn cần dùng ten_nguoi_dung hoặc tenNguoiDung (quy tắc camelCase).
Hơn nữa, tên biến không được trùng với các từ khóa (keywords) mà ngôn ngữ lập trình dành riêng cho các mục đích đặc biệt (ví dụ: if, else, for, while, class, int, float...).
Lý do cho những quy tắc này là để trình biên dịch (compiler) hoặc trình thông dịch (interpreter) của ngôn ngữ lập trình có thể hiểu chính xác đâu là tên biến mà bạn đang muốn nhắc đến, tránh nhầm lẫn với các cú pháp khác.
Bên cạnh quy tắc cú pháp bắt buộc, còn có quy tắc ngầm (convention) về cách đặt tên biến sao cho dễ đọc và dễ hiểu. Tên biến nên gợi nhớ được ý nghĩa của dữ liệu mà nó lưu trữ.
Ví dụ, thay vì đặt tên biến là x, bạn nên đặt là so_luong_san_pham hoặc gia_tien. Điều này giúp người đọc code (bao gồm cả bạn sau này) nhanh chóng hiểu được mục đích của biến đó.
Việc đặt tên biến rõ ràng là một kỹ năng quan trọng, giúp code của bạn "sạch" hơn, dễ bảo trì và hợp tác làm việc theo nhóm hiệu quả hơn.
Giá trị (Value) chính là nội dung thực tế mà biến đang lưu trữ tại một thời điểm nhất định. Đây có thể là một con số, một đoạn văn bản, một giá trị đúng/sai, hoặc nhiều loại dữ liệu phức tạp hơn.
Mỗi biến trong lập trình luôn gắn liền với một kiểu dữ liệu (Data Type). Kiểu dữ liệu này định nghĩa loại giá trị mà biến có thể chứa và các thao tác mà bạn có thể thực hiện trên giá trị đó.
Việc khai báo kiểu dữ liệu cho biến (hoặc việc ngôn ngữ lập trình tự suy luận kiểu dữ liệu) là cần thiết để máy tính biết cách cấp phát bộ nhớ phù hợp và xử lý dữ liệu trong biến một cách chính xác.
Ví dụ, nếu một biến có kiểu dữ liệu là "số nguyên" (Integer - int), máy tính biết rằng biến này chỉ có thể lưu trữ các số không có phần thập phân (như 1, 10, -5).
Nếu biến có kiểu dữ liệu là "chuỗi ký tự" (String - str), nó có thể lưu trữ các đoạn văn bản (như "Xin chào", "Lập trình").
Các kiểu dữ liệu cơ bản phổ biến trong hầu hết các ngôn ngữ lập trình bao gồm:
Số nguyên (Integer): Các số nguyên dương, âm và 0 (ví dụ: 10, -5, 0).
Số thực (Floating-point): Các số có phần thập phân (ví dụ: 3.14, -0.01, 2.0).
Chuỗi ký tự (String): Các đoạn văn bản được đặt trong dấu nháy đơn hoặc nháy kép (ví dụ: "Hello", 'Viet Nam').
Boolean: Chỉ có hai giá trị: Đúng (True) hoặc Sai (False). Thường dùng để biểu diễn trạng thái logic.
Kiểu dữ liệu của biến quy định những phép toán nào có thể áp dụng được. Ví dụ, bạn có thể cộng hai biến kiểu số, nhưng không thể cộng một biến kiểu số với một biến kiểu chuỗi một cách trực tiếp theo nghĩa toán học thông thường.
Hiểu rõ kiểu dữ liệu giúp bạn tránh được các lỗi phổ biến khi lập trình và đảm bảo dữ liệu được xử lý đúng cách.
Sau khi đã hiểu biến là gì và cấu tạo của nó, bước tiếp theo là học cách tạo ra (khai báo) và làm việc với biến trong code thực tế.
Khai báo biến (Variable Declaration) là quá trình nói cho máy tính biết rằng bạn muốn sử dụng một biến với một tên cụ thể và đôi khi là kiểu dữ liệu cụ thể. Điều này yêu cầu hệ thống cấp phát một vùng nhớ cho biến đó.
Cách khai báo biến có thể khác nhau tùy thuộc vào ngôn ngữ lập trình bạn đang sử dụng.
Trong một số ngôn ngữ như C++, Java, C#, bạn cần phải chỉ định rõ ràng kiểu dữ liệu khi khai báo biến. Ví dụ:
C++
int tuoi; // Khai báo biến 'tuoi' kiểu số nguyên trong C++
string ten; // Khai báo biến 'ten' kiểu chuỗi ký tự
Cú pháp int tuoi; có nghĩa là "tôi muốn một vùng nhớ có tên là 'tuoi' và nó sẽ chỉ chứa các số nguyên".
Tuy nhiên, trong các ngôn ngữ lập trình khác như Python hoặc JavaScript, bạn không cần khai báo kiểu dữ liệu một cách tường minh. Ngôn ngữ sẽ tự động suy luận kiểu dữ liệu dựa trên giá trị bạn gán cho biến lần đầu tiên.
Ví dụ trong Python:
Python
tuoi = 25 # Khai báo biến 'tuoi' và gán giá trị 25 (Python tự hiểu đây là kiểu int)
ten = "Anh" # Khai báo biến 'ten' và gán giá trị "Anh" (Python tự hiểu đây là kiểu str)
Ví dụ trong JavaScript (sử dụng từ khóa let hoặc var hoặc const):
JavaScript
let tuoi = 25; // Khai báo biến 'tuoi' và gán giá trị 25
let ten = "Anh"; // Khai báo biến 'ten' và gán giá trị "Anh"
Việc khai báo biến giống như việc bạn "đăng ký" một chiếc hộp với hệ thống, báo cho nó biết bạn cần một chỗ để chứa đồ và loại đồ sẽ chứa là gì.
Gán giá trị (Assignment) là hành động đặt một giá trị cụ thể vào biến. Chúng ta sử dụng toán tử gán (thường là dấu bằng =) để thực hiện việc này.
Quá trình gán giá trị có thể diễn ra ngay khi bạn khai báo biến (như các ví dụ Python/JavaScript ở trên), hoặc sau khi biến đã được khai báo.
Ví dụ trong C++:
C++
int diem_so; // Khai báo biến 'diem_so'
diem_so = 90; // Gán giá trị 90 cho biến 'diem_so'
Điều quan trọng cần nhớ là dấu = trong lập trình không có nghĩa là "bằng" theo nghĩa toán học, mà nó có nghĩa là "gán giá trị bên phải vào biến bên trái".
Bạn có thể thay đổi giá trị của biến bất cứ lúc nào sau khi nó đã được gán giá trị ban đầu. Đây chính là lý do nó được gọi là "biến" (có thể biến đổi).
Ví dụ cập nhật giá trị trong Python:
Python
so_luong = 10 # so_luong có giá trị là 10
so_luong = so_luong + 5 # Lấy giá trị hiện tại của so_luong (10), cộng thêm 5, rồi gán kết quả (15) trở lại cho so_luong
# Lúc này so_luong có giá trị là 15
Toán tử gán là một trong những toán tử được sử dụng thường xuyên nhất trong lập trình, cho phép bạn cập nhật trạng thái và dữ liệu trong chương trình khi nó thực thi.
Khi mới học, nhiều người thường nhầm lẫn giữa biến và hằng số (constant). Cả hai đều là những tên gọi dùng để lưu trữ giá trị trong bộ nhớ, nhưng có một điểm khác biệt then chốt.
Hằng số cũng là một tên gọi cho một vùng nhớ lưu trữ giá trị, giống như biến. Tuy nhiên, giá trị của hằng số không thể thay đổi được sau khi nó được gán lần đầu tiên.
Hãy coi hằng số như một chiếc hộp mà sau khi bạn đặt đồ vào và dán nhãn, bạn sẽ đóng và niêm phong vĩnh viễn chiếc hộp đó lại. Bạn chỉ có thể xem món đồ bên trong, chứ không thể lấy nó ra và thay thế bằng thứ khác.
Ví dụ về hằng số trong JavaScript (sử dụng từ khóa const):
JavaScript
const PI = 3.14; // Khai báo hằng số PI và gán giá trị 3.14
// PI = 3.15; // Lệnh này sẽ gây ra lỗi, vì giá trị của hằng số không thể thay đổi
Trong Python, không có cú pháp hằng số rõ ràng như const, nhưng theo quy ước, các lập trình viên dùng TÊN VIẾT HOA để chỉ hằng số, ví dụ MAX_SIZE = 100, và mọi người ngầm hiểu không thay đổi giá trị này.
Chúng ta sử dụng hằng số cho những giá trị cố định, không bao giờ thay đổi trong suốt quá trình chạy chương trình.
Ví dụ điển hình về hằng số là: số Pi (π≈3.14159), tốc độ ánh sáng, các mã lỗi cố định, hoặc các giá trị cấu hình mà bạn không muốn bị thay đổi ngẫu nhiên.
Việc sử dụng hằng số giúp code an toàn hơn (ngăn chặn việc vô tình thay đổi những giá trị quan trọng) và dễ đọc hơn (tên hằng số viết hoa giúp phân biệt với biến).
Tóm lại, điểm khác biệt cốt lõi nhất giữa biến và hằng số nằm ở khả năng thay đổi giá trị sau khi gán lần đầu: Biến thì có thể thay đổi, còn Hằng số thì không.
Một khái niệm khác liên quan đến biến mà bạn sẽ gặp là phạm vi của biến (Variable Scope). Đây là một khái niệm quan trọng nhưng ban đầu có thể hơi trừu tượng.
Hiểu một cách đơn giản, phạm vi của biến là khu vực trong chương trình máy tính mà biến đó có thể được truy cập và sử dụng. Biến chỉ "sống" và có ý nghĩa trong phạm vi của nó.
Hãy tưởng tượng ngôi nhà của bạn là toàn bộ chương trình. Một biến khai báo bên trong một căn phòng cụ thể (ví dụ: nhà bếp) chỉ có thể được nhìn thấy và sử dụng bên trong căn phòng đó. Đây gọi là biến cục bộ (Local Variable).
Một biến khác có thể được khai báo ở khu vực chung của ngôi nhà (ví dụ: phòng khách) và nó có thể được nhìn thấy và sử dụng từ bất kỳ căn phòng nào trong nhà. Đây gọi là biến toàn cục (Global Variable).
Phạm vi biến giúp kiểm soát khả năng truy cập và thời gian tồn tại của biến, tránh xung đột tên biến giữa các phần khác nhau của chương trình lớn.
Khi một biến được khai báo bên trong một hàm (function) hoặc một khối lệnh (block of code) cụ thể, nó thường có phạm vi cục bộ và chỉ tồn tại khi hàm hoặc khối lệnh đó đang thực thi.
Ví dụ đơn giản trong Python:
Python
bien_toan_cuc = "Tôi là biến toàn cục" # Biến toàn cục
def mot_ham():
bien_cuc_bo = "Tôi là biến cục bộ" # Biến cục bộ
print(bien_toan_cuc) # Có thể truy cập biến toàn cục
print(bien_cuc_bo) # Có thể truy cập biến cục bộ
mot_ham()
print(bien_toan_cuc) # Có thể truy cập biến toàn cục ở ngoài hàm
# print(bien_cuc_bo) # Lệnh này sẽ gây lỗi, vì bien_cuc_bo chỉ tồn tại bên trong hàm mot_ham()
Khái niệm phạm vi biến sẽ trở nên rõ ràng hơn khi bạn bắt đầu học về hàm và cấu trúc chương trình lớn hơn. Đối với người mới, điều quan trọng cần nắm là không phải biến nào bạn khai báo ở đâu cũng có thể dùng được ở mọi nơi.
Đây chỉ là giới thiệu cơ bản về phạm vi. Bạn sẽ tìm hiểu sâu hơn về các loại phạm vi khác nhau và cách chúng hoạt động khi tiếp tục học lập trình.
Chúng ta đã cùng nhau khám phá những kiến thức nền tảng về biến trong lập trình. Biến là nơi lưu trữ dữ liệu tạm thời trong bộ nhớ máy tính, cho phép chương trình của bạn làm việc với dữ liệu một cách linh hoạt.
Mỗi biến có một tên duy nhất, lưu trữ một giá trị có thể thay đổi và được gán một kiểu dữ liệu cụ thể. Việc khai báo và gán giá trị là các thao tác cơ bản để làm việc với biến.
Biến khác với hằng số ở chỗ giá trị của nó có thể thay đổi sau khi được gán lần đầu. Chúng ta sử dụng biến cho dữ liệu động và hằng số cho dữ liệu cố định.
Khái niệm phạm vi biến giúp xác định "khu vực sống" của biến trong chương trình.
Nắm vững kiến thức về biến là cực kỳ quan trọng, nó là nền tảng để bạn tiếp tục học hỏi và xây dựng các chương trình phức tạp hơn.
Để củng cố hiểu biết và tiến bộ trên con đường lập trình, sau khi đã nắm chắc khái niệm biến, bạn nên tìm hiểu sâu hơn về:
Các Kiểu Dữ liệu nâng cao: Ngoài số và chuỗi, còn nhiều kiểu dữ liệu phức tạp hơn như danh sách (list), mảng (array), từ điển (dictionary)...
Toán tử (Operators): Học về các phép toán số học, so sánh, logic có thể áp dụng lên biến.
Cấu trúc Điều khiển (Control Structures): Tìm hiểu về câu lệnh điều kiện (if/else), vòng lặp (for/while) để điều khiển luồng chạy của chương trình dựa trên giá trị của biến.
Hàm (Functions): Học cách nhóm các đoạn code thực hiện một nhiệm vụ cụ thể, thường sử dụng các biến cục bộ bên trong hàm.
Hãy tiếp tục thực hành viết code với biến trong ngôn ngữ lập trình bạn đang học. Tạo các biến với tên khác nhau, gán các loại giá trị khác nhau, và thử thay đổi giá trị của chúng. Thực hành là cách tốt nhất để biến kiến thức lý thuyết thành kỹ năng thực tế.