Bài học lập trình từ tệp trống: Hiểu biến và kiểu dữ liệu
Mở một tệp trống là cách tốt nhất để hiểu lập trình. Không có mã ẩn, cũng không có logic dựng sẵn. Bạn bắt đầu với bộ nhớ trống và tự quyết định điều gì cần lưu, đặt tên là gì, và sử dụng sau này như thế nào. Hai khái niệm đầu tiên bạn cần là biến và kiểu dữ liệu — những viên gạch xây nên một tệp trống thành một chương trình đang chạy.
Biến là gì? Một chiếc hộp có nhãn trong bộ nhớ
Hãy tưởng tượng biến là một chiếc hộp có nhãn, bên trong chứa một giá trị duy nhất. Nhãn là tên biến, còn nội dung là giá trị. Khi bạn tạo một biến, bạn yêu cầu máy tính dành ra một khoảng nhỏ trong bộ nhớ, gắn một tên vào đó, và giữ giá trị ở đó cho đến khi bạn thay đổi hoặc xóa nó.
Hãy hình dung một kệ để những chiếc hộp trống. Mỗi hộp có một tờ giấy ghi chú. Một chiếc ghi score, chiếc khác ghi username, chiếc nữa ghi isReady. Bên trong mỗi hộp là dữ liệu thực tế. Bạn có thể thay đổi nội dung bất cứ lúc nào, nhưng nhãn vẫn giữ nguyên. Đó là lý do nó được gọi là biến: giá trị có thể thay đổi trong khi tên vẫn không đổi.
- score = 0 tạo một hộp có nhãn score và lưu số 0 bên trong.
- username = “Alex” tạo một hộp có nhãn username và lưu văn bản Alex.
- isReady = true tạo một hộp có nhãn isReady và lưu giá trị true hoặc false.
Tên biến và gán giá trị
Việc tạo một biến thường bao gồm khai báo và gán. Khai báo giới thiệu tên biến, còn gán đặt một giá trị vào bên trong bằng dấu bằng. Ví dụ, let age = 25 có thể được đọc là age nhận giá trị 25. Sau đó, bạn có thể dùng tên đó ở mọi nơi thay vì lặp lại giá trị.
Tên tốt nên mô tả rõ ý nghĩa và nhất quán. Hãy dùng totalPrice thay vì x hoặc tp. Hầu hết ngôn ngữ không cho phép khoảng trắng trong tên và phân biệt chữ hoa chữ thường, nên totalPrice và totalprice là hai hộp khác nhau.
Hiểu về kiểu dữ liệu: Cái gì vừa hộp này
Không phải hộp nào cũng chứa cùng một loại thứ. Kiểu dữ liệu cho máy tính biết biến chứa giá trị loại gì, cần bao nhiêu bộ nhớ, và những phép toán nào được phép. Việc chọn đúng kiểu giúp ngăn lỗi và làm rõ ý định của bạn.
- Integer (số nguyên): Một số nguyên như 42, -7 hoặc 0. Dùng để đếm và tính điểm.
- Float (số thực): Một số có phần thập phân như 19.99 hoặc 3.14. Dùng cho giá tiền và các phép đo.
- String (chuỗi): Văn bản được đặt trong dấu ngoặc kép như “hello” hoặc “[email protected]”.
- Boolean (đúng/sai): Một giá trị logic, hoặc true hoặc false, dùng cho các điều kiện.
- Array hoặc List (mảng hoặc danh sách): Một tập hợp có thứ tự như [“red”, “green”, “blue”].
- Object (đối tượng): Một tập hợp các cặp có tên như {name: “Alex”, age: 25}.
Vì sao kiểu dữ liệu quan trọng
Kiểu dữ liệu quyết định cách các giá trị hoạt động. Bạn có thể cộng hai số nguyên, nhưng cộng một số nguyên với một boolean thì vô nghĩa. Một điều thường gây bất ngờ là sự khác biệt giữa các con số và chuỗi trông giống số. Ví dụ, 25 + 25 cho 50, trong khi “25” + “25” cho “2525” trong nhiều ngôn ngữ vì toán tử cộng nối các chuỗi lại với nhau. Hiểu biết về kiểu giúp bạn dự đoán kết quả.
Bộ nhớ lưu biến như thế nào: Một mô hình hình dung đơn giản
Hãy hình dung bộ nhớ như một tủ có nhiều ngăn kéo nhỏ. Mỗi ngăn kéo có một địa chỉ duy nhất, giống như số nhà. Khi bạn tạo một biến, máy tính tìm một ngăn kéo trống, đặt giá trị của bạn vào bên trong, và ghi vào một bảng ẩn rằng nhãn của bạn trỏ đến địa chỉ đó. Bạn chỉ cần nhớ nhãn, không cần nhớ con số.
Ví dụ, let temperature = 21.5 có thể lưu 21.5 vào ngăn kéo 1042 và ghi nhớ rằng temperature trỏ đến 1042. Khi sau đó bạn viết temperature = 22.0, máy tính thay thế nội dung của cùng ngăn kéo đó. Không có ngăn kéo mới nào được tạo, nhãn chỉ trỏ đến giá trị đã cập nhật.
- Khai báo (Declaration) dành một ngăn kéo và tạo nhãn.
- Gán (Assignment) đặt một giá trị vào ngăn kéo.
- Gán lại (Reassignment) thay giá trị trong cùng ngăn kéo.
- Đọc (Reading) biến trả về một bản sao của nội dung bên trong.
Giá trị nguyên thủy so với tham chiếu
Một số kiểu lưu giá trị trực tiếp trong ngăn kéo. Những kiểu này thường được gọi là kiểu nguyên thủy, như số nguyên, số thực, boolean và chuỗi. Các kiểu khác, như mảng và đối tượng, lớn hơn. Với chúng, ngăn kéo chứa một tham chiếu — một mảnh giấy ghi hướng đến nơi tập hợp thực sự nằm ở nơi khác trong bộ nhớ. Điều này giải thích tại sao hai biến trỏ đến cùng một đối tượng có thể ảnh hưởng lẫn nhau khi một biến thay đổi dữ liệu được chia sẻ.
Biến và kiểu dữ liệu giải thích qua ví dụ đơn giản
Việc xem mã trong ngữ cảnh giúp các ý tưởng trở nên cụ thể. Dưới đây là biến và kiểu dữ liệu giải thích qua ví dụ đơn giản mà bạn có thể viết ở đầu một tệp trống:
- let itemsInCart = 3 – Một số nguyên dùng để đếm. Bạn có thể tăng nó bằng itemsInCart = itemsInCart + 1.
- let userName = “Sam” – Một chuỗi dùng cho văn bản. Bạn có thể chào người dùng bằng “Hello, ” + userName.
- let itemPrice = 12.99 – Một số thực dùng cho tiền. Bạn có thể tính tổng bằng itemPrice * itemsInCart.
- let isDiscountApplied = false – Một boolean dùng cho điều kiện. Bạn có thể kiểm tra nó: if isDiscountApplied is true, hãy dùng giá đã giảm.
- let colors = [“red”, “green”, “blue”] – Một mảng gộp các giá trị lại. Bạn có thể đọc màu đầu tiên bằng colors[0].
Mỗi tên đều mô tả mục đích của nó và mỗi giá trị đều khớp với kiểu của nó. Nếu giá thay đổi, bạn chỉ cần cập nhật itemPrice một lần và mọi phép tính sử dụng nó đều phản ánh giá trị mới. Đó là ưu điểm của biến so với việc lặp lại các giá trị thô trong toàn bộ mã.
Những lỗi thường gặp của người mới với biến
- Dùng biến trước khi nó tồn tại: Đọc một nhãn trước khi bạn tạo hộp sẽ gây lỗi. Hãy khai báo và gán trước.
- Trộn lẫn kiểu một cách vô tình: Lưu một con số dưới dạng chuỗi như “100” thay vì 100 sẽ làm hỏng các phép toán toán học.
- Dùng tên mơ hồ: Những tên như data hoặc temp làm cho mã khó theo dõi. Hãy chọn những tên cụ thể, có ý nghĩa.
- Quên rằng gán sẽ ghi đè: Viết score = 10 sau score = 5 sẽ thay hoàn toàn 5, chứ không cộng chúng lại.
Một thói quen hữu ích là đọc mã thành tiếng. Hãy nói let total = price * quantity là total nhận price nhân quantity. Nếu câu nghe có vẻ vô lý, có lẽ tên hoặc kiểu cần được sửa.
Từ tệp trống đến chương trình hoạt động
Mọi chương trình đều bắt đầu theo cách như nhau: một tệp trống nơi bạn xác định những gì cần ghi nhớ và ghi nhớ như thế nào. Biến cung cấp cho bạn những nơi có tên để lưu thông tin, kiểu dữ liệu đảm bảo thông tin có hình dạng đúng, và bộ nhớ cung cấp không gian để thông tin tồn tại. Khi bạn có thể hình dung một biến là một chiếc hộp có nhãn với một loại nội dung cụ thể nằm trong một ngăn kéo có số, những ý tưởng như gán, lỗi kiểu và tham chiếu sẽ trở nên trực quan. Hãy bắt đầu nhỏ, đặt tên mọi thứ rõ ràng, và để tệp trống của bạn lớn lên từng biến được xác định rõ ràng một lần.
