Menu
CoddyTech

Biến là gì?

Trong lập trình, biến (variable) là một vị trí có tên trong bộ nhớ, lưu một giá trị mà chương trình có thể đọc và thay đổi trong lúc chạy. Cái tên, như score hay user_name, cho phép code nhắc đến giá trị mà không cần biết nó được lưu ở đâu.

Tác giả Kevin Spektor, Co-founder & CTO

Cập nhật 24 tháng 9, 2026

Một trò chơi tính điểm cần nhớ một con số, cộng thêm vào nó và hiện ra ở cuối. Con số đó không thể viết sẵn trong code, vì mỗi lần chơi nó lại khác nhau. Vì vậy chương trình dành ra một chỗ trong bộ nhớ, đặt cho nó một cái tên như score, và dùng tên đó mỗi khi cần giá trị hiện tại.

Biến hoạt động thế nào

Có ba việc xảy ra với một biến trong chương trình:

  1. Tạo biến. Chương trình dành bộ nhớ cho một giá trị và gắn một cái tên vào đó. Trong Python, việc này xảy ra ở lần đầu tiên bạn gán giá trị cho tên. Trong Java và C, bạn khai báo biến trước, kèm kiểu, như int score;.
  2. Gán giá trị. Một giá trị được lưu dưới cái tên bằng =. Gán lần nữa sẽ thay thế giá trị cũ.
  3. Sử dụng. Ở bất cứ đâu cái tên xuất hiện trong một biểu thức, chương trình đọc giá trị mà nó đang giữ tại thời điểm đó.
Start: 0
After one point: 10
Doubled: 20

Ở mỗi dòng gán, vế phải được tính trước, dùng giá trị mà score đang có tại thời điểm đó. Sau đó kết quả được lưu ngược lại dưới cùng cái tên. Cái tên giữ nguyên trong khi giá trị nó chứa thay đổi.

Dấu bằng nghĩa là "lưu vào"

Trong toán học, x = x + 1 vô nghiệm. Trong chương trình, đó là một lệnh bình thường: lấy giá trị hiện tại của x, cộng thêm 1 và lưu kết quả vào x. Dấu = là toán tử gán, và nó luôn chuyển một giá trị từ vế phải vào cái tên ở vế trái.

Để hỏi hai giá trị có bằng nhau không, các ngôn ngữ lập trình dùng một toán tử khác, ==. Biểu thức x == 5 không thay đổi gì cả; nó cho ra True hoặc False, một giá trị boolean.

Nghĩa trong toán học có liên quan nhưng không giống hệt. Trong đại số, x trong 2x + 3 = 7 đại diện cho một số chưa biết mà bạn cần giải ra. Trong chương trình, biến chứa một giá trị đã biết và có thể thay đổi khi chương trình chạy.

Biến và kiểu dữ liệu

Mọi giá trị đều có kiểu: số nguyên, số thập phân, một đoạn văn bản, boolean, danh sách. Các ngôn ngữ khác nhau ở chỗ bản thân biến có kiểu hay không.

Trong Python và JavaScript, giá trị mang theo kiểu, và một biến có thể lần lượt chứa các giá trị thuộc kiểu khác nhau. Cách này gọi là kiểu động (dynamic typing):

42 <class 'int'>
forty-two <class 'str'>

Trong Java, C và C++, biến có một kiểu cố định được chọn khi bạn khai báo. Đây là kiểu tĩnh (static typing): trình biên dịch từ chối code cố lưu văn bản vào một biến int, ngay trước khi chương trình chạy.

int age = 30;          // Java: type, name, value
String name = "Rosa";
let age = 30;          // JavaScript: can be reassigned
const PI = 3.14159;    // cannot be reassigned

Trong C, kiểu còn quyết định biến chiếm bao nhiêu bộ nhớ. Một int chiếm 4 byte trên gần như mọi hệ thống hiện nay, double chiếm 8, còn char đúng 1. Để giữ nhiều giá trị dưới một cái tên, như tất cả điểm số trong một trò chơi, bạn dùng mảng hoặc list và truy cập từng giá trị theo vị trí của nó, như scores[0].

Hộp và nhãn

Một hình ảnh quen thuộc về biến là chiếc hộp chứa một giá trị. Hình ảnh đó rất hợp với C: int x; thực sự là một vùng nhớ cố định, và y = x; sao chép giá trị sang vùng nhớ thứ hai.

Python hoạt động giống nhãn dán hơn. Mọi giá trị đều là một đối tượng, và biến là một cái tên được gắn vào đối tượng đó. Sự khác biệt lộ ra khi hai cái tên trỏ đến cùng một list:

5 6
[1, 2, 3, 4]

Với số, y = y + 1 tạo ra một số mới và chuyển nhãn y sang đó, nên x vẫn trỏ đến 5. Với list, b = a không sao chép gì cả: cả hai tên trỏ đến cùng một list, nên thay đổi thực hiện qua b cũng hiện ra qua a. Hãy viết b = a.copy() khi bạn muốn một list riêng. Đối tượng và mảng trong Java và JavaScript cũng hoạt động như vậy.

Phạm vi: nơi biến tồn tại

Một biến chỉ được nhìn thấy trong một phần của chương trình, gọi là phạm vi (scope) của nó. Biến được tạo bên trong một hàm là biến cục bộ: nó tồn tại khi hàm đang chạy và biến mất khi hàm trả về. Biến được tạo ở cấp cao nhất của tệp là biến toàn cục và có thể được đọc ở bất cứ đâu trong tệp đó.

Biến cục bộ dễ suy luận hơn, vì mọi dòng có thể thay đổi chúng đều nằm trong một hàm. Chương trình dựa vào nhiều biến toàn cục thì khó gỡ lỗi hơn vì lý do ngược lại.

Đặt tên biến

Tên tốt nói lên ý nghĩa của giá trị: total_price, is_logged_in, retries_left. Phần lớn ngôn ngữ có chung các quy tắc:

  • tên gồm chữ cái, chữ số và dấu gạch dưới, và không được bắt đầu bằng chữ số;
  • tên không được trùng với từ khóa của ngôn ngữ, như if, for hay class;
  • tên phân biệt chữ hoa chữ thường, nên total và Total là hai biến khác nhau.

Phong cách đặt tên khác nhau theo ngôn ngữ. Python dùng snake_case (user_name), còn Java và JavaScript dùng camelCase (userName). Các giá trị không bao giờ nên thay đổi thường được đặt tên bằng chữ in hoa, như MAX_SIZE.

Những lỗi thường gặp

Dùng biến trước khi nó có giá trị. Python dừng lại với NameError:

NameError: name 'total' is not defined

Lỗi tương tự xuất hiện khi gõ sai tên, vì với máy tính totla và total là hai tên khác nhau.

Viết = khi muốn viết ==. Trong Python, if x = 5: là lỗi cú pháp, nên bạn phát hiện ngay. Trong C và JavaScript, if (x = 5) là code hợp lệ: nó lưu 5 vào x, và điều kiện luôn đúng. Chương trình vẫn chạy và cho kết quả sai, một lỗi logic có thể mất rất lâu mới tìm ra.

Giao cho một biến hai nhiệm vụ. Một biến chứa giá tiền ở đầu hàm và chứa số lượng ở cuối hàm vẫn chạy được, nhưng người đọc phải luôn theo dõi nghĩa nào đang được dùng. Hãy đặt cho mỗi ý nghĩa một cái tên riêng.

Đọc tiếp

Biến chứa giá trị, và bước tiếp theo là biết có những loại giá trị nào: đọc boolean là gì để hiểu về đúng và sai, và mảng là gì để lưu nhiều giá trị dưới một tên. Hướng dẫn về biến trong Python trình bày chi tiết hơn về phép gán, quy tắc đặt tên và gán nhiều biến cùng lúc, còn khóa học Python cho bạn viết và thay đổi biến ngay từ bài học đầu tiên.

Câu hỏi thường gặp

Biến trong Python là gì?
Biến trong Python là một cái tên trỏ đến một giá trị. Bạn tạo biến bằng cách gán giá trị cho nó, như age = 30, không cần khai báo kiểu, và sau đó cùng cái tên có thể trỏ đến giá trị thuộc kiểu khác. Theo quy ước, tên biến trong Python được viết theo kiểu snake_case.
Định nghĩa đơn giản của biến là gì?

Biến là tên gọi cho một giá trị mà chương trình lưu lại và có thể thay đổi. Cái tên giữ nguyên còn giá trị bên dưới có thể được thay thế, giống như bảng tỷ số luôn giữ nhãn "Đội nhà" trong khi con số bên dưới tăng dần.

Giải thích biến cho trẻ em thế nào?
Hãy so sánh nó với một chiếc hộp có dán nhãn. Nhãn là tên, như score, và mỗi lần hộp chỉ chứa một thứ. Bạn có thể nhìn vào trong để xem có gì, hoặc lấy ra và bỏ thứ mới vào, còn nhãn thì vẫn giữ nguyên.
Biến và hằng số khác nhau thế nào?
Giá trị của biến có thể thay đổi sau khi đã gán, còn giá trị của hằng số cố định ngay khi được gán. Java đánh dấu hằng số bằng final, còn JavaScript và C dùng const. Python không có hằng số bắt buộc, nên lập trình viên viết tên bằng chữ in hoa, như MAX_USERS, để báo rằng không nên thay đổi nó.
Có những loại biến nào trong lập trình?

Biến thường được phân loại theo nơi chúng có thể được nhìn thấy: biến cục bộ tồn tại bên trong một hàm, biến toàn cục được nhìn thấy trong cả một tệp hay chương trình, còn biến instance thuộc về một đối tượng của một lớp. Biến cũng được mô tả theo kiểu giá trị mà nó chứa, như số nguyên, số thực, chuỗi hay boolean.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu