Nếu bạn đang bắt đầu làm quen với lập trình smart contract trên Ethereum, thì việc học Solidity là bước đầu tiên cực kỳ quan trọng. Trong bài khởi đầu về solidity programming tutorial này, mình sẽ chia sẻ với bạn những khái niệm cơ bản, dễ hiểu nhất để bạn có thể tự tin bắt đầu con đường code solidity và xây dựng các ứng dụng phi tập trung (dApps) của riêng mình nhé!
Solidity là gì? Tại sao cần phải học Solidity?
Solidity là một ngôn ngữ lập trình cấp cao, hướng đối tượng và kiểu tĩnh. Nó được thiết kế riêng cho việc xây dựng smart contract solidity chạy trên blockchain Ethereum.
Vì là ngôn ngữ kiểu tĩnh, khi bạn lập trình Solidity, bạn bắt buộc phải khai báo trước kiểu dữ liệu của mỗi biến. Điều này giúp trình biết được chính xác cần dành bao nhiêu bộ nhớ cho biến đó ngay từ lúc compile. Nếu bạn mới học solidity, thì điểm đặc biệt cần lưu ý chính là cách làm việc với các kiểu dữ liệu (data types). Hiểu đúng về chúng sẽ giúp bạn tránh được vô số lỗi tiềm ẩn khi lập trình smart contract.
Đọc thêm: Solidity ABI (Application Binary Interface) là gì?
Các kiểu dữ liệu chính trong solidity
Trong lập trình Solidity, kiểu dữ liệu (data types) phân loại thông tin được lưu trong các biến. Bạn có thể kết hợp những kiểu đơn giản để tạo ra những cấu trúc phức tạp hơn như struct hoặc array. Solidity chia kiểu dữ liệu thành hai nhóm chính:
1. Value Types (Kiểu giá trị)
Value types lưu trữ trực tiếp dữ liệu trong biến. Khi gán một value type cho biến khác, Solidity sẽ tạo ra một bản sao, không ảnh hưởng tới giá trị gốc.
Các value types trong Solidity gồm:
- Signed/Unsigned Integers (int/uint): Số nguyên, có hoặc không có dấu.
- Booleans (bool): Chỉ nhận true hoặc false.
- Fixed Point Numbers: Số thực (dù hiện chưa được EVM hỗ trợ hoàn chỉnh).
- Addresses: Địa chỉ ví hoặc smart contract. Có thể thêm modifier payable để cho phép nhận ETH.
- Byte Arrays: Mảng lưu trữ bytes (ví dụ: bytes1, bytes2).
- Literals: Các giá trị bất biến như số, chuỗi, địa chỉ.
- Enums: Tập hợp các hằng số tự định nghĩa.
- Contract & Function Types: Đại diện cho các contract và function.
2. Reference Types (Kiểu tham chiếu)
Reference types lưu trữ địa chỉ tham chiếu đến vùng nhớ chứa dữ liệu, thay vì giá trị trực tiếp.
Các reference types gồm:
- Fixed Arrays: Mảng có kích thước cố định.
- Dynamic Arrays: Mảng có thể thay đổi kích thước.
- Structs: Tự định nghĩa cấu trúc dữ liệu với nhiều kiểu.
- Mappings: Kiểu key-value tương tự dictionary trong các ngôn ngữ khác.
Integer trong Solidity là gì?
Khi code Solidity, bạn sẽ thấy kiểu số nguyên (integer) cực kỳ thường xuyên, chia thành:
Signed Integer (int)
Kiểu int lưu trữ số âm lẫn số dương. Mặc định, int chính là int256 – lưu được số nguyên 256-bit. Nếu bạn muốn tiết kiệm gas, có thể dùng int8, int16, int32…
Ví dụ:
int256 balance = -100;
int8 smallNumber = 127;
Unsigned Integer (uint)
Ngược lại với int, uint chỉ lưu số dương từ 0 trở lên.
Ví dụ:
uint256 amount = 1000;
uint32 age = 25;
Tip nhỏ: uint và uint256 giống nhau hoàn toàn, nhưng ghi uint256 giúp code smart contract Solidity dễ đọc và chuyên nghiệp hơn.
So Sánh int và uint
Đặc điểm | int | uint |
---|---|---|
Giá trị lưu trữ | Số âm và số dương | Chỉ số dương |
Kích thước phổ biến | int256 | uint256 |
Việc chọn int hay uint rất quan trọng trong lập trình Solidity, nhất là khi cần tối ưu gas hoặc đảm bảo logic đúng.
Có thể bạn quan tâm: Cách verify signatures trong Solidity
Tại sao việc chọn data types chuẩn lại quan trọng khi viết smart contract?
- Tối ưu hóa phí gas: Data type càng nhỏ, chi phí lưu trữ càng thấp.
- Tránh lỗi overflow/underflow.
- Cải thiện độ rõ ràng và bảo mật cho code.
Nhớ rằng mỗi byte lưu trữ trên blockchain đều tiêu tốn chi phí thực sự. Khi bạn hiểu và chọn đúng data type, smart contract của bạn sẽ nhẹ hơn, an toàn hơn và tiết kiệm hơn.
Kết luận
Nếu bạn đang bắt đầu học solidity và bắt đầu tập tành lập trình blockchain, việc nắm vững các kiểu dữ liệu cơ bản sẽ giúp bạn tự tin code và xây dựng những smart contract Solidity đúng chuẩn. Trong bài tiếp theo, mình sẽ hướng dẫn kỹ hơn về cách quản lý storage, memory và calldata khi lập trình Solidity nhé. Còn bây giờ, hãy thử viết một vài biến kiểu int và uint đầu tiên xem sao!
Bài viết liên quan: