Kiểu dữ liệu (tiếng Anh Data Types) là mô tả đặc thù và xác định định dạng của nội dung của dữ liệu (giá trị mà các hằng và biến có thể nhận được). kiểu dữ liệu cũng được dùng để xác định định dạng trả về của các biểu thức, hàm số.
Các kiểu dữ liệu trong các ngôn ngữ lập trình phổ biến hiện nay được chia thành 2 nhóm chính: kiểu dữ liệu cơ bản và kiểu dữ liệu phức hợp. Bên cạnh đó, lập trình hướng đối tượng đưa thêm khái niệm lớp như một sự đóng gói của dữ liệu và các thao tác trên dữ liệu (x. t. Lập trình Hướng đối tượng)
Các kiểu dữ liệu[sửa]
Các kiểu dữ liệu cơ bản[sửa]
- Logic: biểu diễn một trong hai giá trị: đúng (True) hoặc sai (False). Tên kiểu dữ liệu logic thường là bool hoặc boolean. Các phép toán tương ứng là: so sánh bằng, “phủ định” (NOT), “và” (AND), “hoặc” (OR).
- Ký tự: biểu diễn các ký tự có thể in ra được (bảng chữ cái, chữ số và các kí hiệu). Tên kiểu dữ liệu ký tự thường là “char”. Kiểu dữ liệu ký tự sử dụng phép toán so sánh, sắp xếp các từ, cụm từ theo thứ tự từ vựng, dẫn xuất từ thứ tự các ký tự trong bảng chữ cái.
- Số nguyên: biểu diễn các số nguyên không dấu hoặc có dấu. Tên kiểu dữ liệu số nguyên thường là int hoặc Integer. Tùy vào mục đích sử dụng, các ngôn ngữ lập trình sẽ hỗ trợ các biến thể của kiểu số nguyên như: số nguyên không dấu, số nguyên có dấu, số nguyên 32-bit, số nguyên 64-bit. Các phép toán cơ bản của kiểu số nguyên là: so sánh, cộng, trừ, nhân, chia không lấy phần dư và chia lấy phần dư.
- Số thực: biểu diễn số thực có dấu. Tùy vào ngôn ngữ lập trình, tên kiểu dữ liệu số thực có thể là real, float hoặc double. Các phép toán cơ bản của kiểu số thực là: cộng, trừ, nhân và chia.
- Con trỏ: kiểu dữ liệu đặc biệt, chứa địa chỉ của một vùng nhớ khác. Kiểu dữ liệu con trỏ thường được khai báo thông qua việc đặt dấu sao: ‘*’ hoặc dấu mũ ‘^’ sau tên kiểu tương ứng với vùng nhớ. Các phép toán cơ bản của con trỏ là: truy cập vào nội dung vùng nhớ, ép kiểu.
Các kiểu dữ liệu phức hợp[sửa]
- Chuỗi: tập có thứ tự các ô nhớ kiểu ký tự. Chuỗi ký tự thường được biểu diễn dưới dạng mảng một chiều của các ký tự (x. t. Cấu trúc dữ liệu tuyến tính). Các phép toán cơ bản của chuỗi ký tự là: so sánh, truy cập hoặc thay đổi từng phần tử trong chuỗi. Tên kiểu dữ liệu chuỗi thường dùng là string.
- Cấu trúc: tập hợp các hằng hoặc biến có kiểu dữ liệu khác nhau, được gọi là các trường. Các phép toán cơ bản với cấu trúc là các phép toán trên các trường dữ liệu tương ứng. Từ khóa khai báo cấu trúc thường dùng là “struct”.
- Lớp: tương tự như cấu trúc, nhưng có kèm theo các thao tác với những trường dữ liệu cũng như các quyền truy cập vào từng thành phần bên trong lớp. Trong lập trình hướng đối tượng, “trường dữ liệu” và “thao tác” thường được gọi là “thuộc tính” và “phương thức”. Ba quyền cơ bản là: công cộng (public), bảo mật (protected) và riêng tư (private). Từ khóa để khai báo lớp phổ biến nhất là “class”.
- Tệp: một dạng con trỏ đặc biệt, chỉ vào một vùng nhớ lưu trữ ở bộ nhớ ngoài (file). Các thao tác cơ bản với kiểu dữ liệu này là: đọc, ghi, sửa toàn bộ hoặc một phần của vùng nhớ tương ứng. Tên kiểu dữ liệu tệp thường dùng là File hoặc FILE.
Các đặc điểm chính[sửa]
- Kiểu dữ liệu xác định tập các giá trị của biến số hay biểu thức. kiểu dữ liệu cũng có thể là tập các giá trị được tạo ra bởi một phép toán hay một hàm số.
- Kiểu dữ liệu của một hằng số, biến số hay biểu thức có thể được xác định ngay trong quá trình khai báo với từ khóa tương ứng, không nhất thiết phải thông qua quá trình thực thi các phép toán.
- Giá trị trả về của phép toán hay hàm số sẽ do các luật của ngôn ngữ lập trình cụ thể xác định, dựa trên kiểu dữ liệu của các biến số đầu vào. Ví dụ nếu hàm tính toán là phép cộng hai số, số thứ nhất là số nguyên không dấu, số thứ hai là số thực thì kết quả trả về sẽ có kiểu số thực).
Trong các ngôn ngữ lập trình cấp thấp như hợp ngữ, không có định nghĩa rõ ràng về kiểu dữ liệu, mà chỉ cung cấp một tập các thanh ghi và vùng nhớ. Lập trình viên sẽ phải tự định dạng các thanh ghi và vùng nhớ thành các kiểu dữ liệu khác nhau, thông qua các câu lệnh, các phép xử lý cụ thể tương ứng. Các ngôn ngữ bậc cao hỗ trợ tất cả các kiểu dữ liệu cơ bản và phức hợp. Trong các ngôn ngữ lập trình hướng đối tượng, kiểu dữ liệu lớp đóng vai trò rất quan trọng. Trong các ngôn ngữ lập trình hiện đại Python không hỗ trợ các thao tác trực tiếp với con trỏ nhằm đơn giản hóa việc lập trình và tránh các lỗi nghiêm trọng có thể xảy ra trong các thao tác với bộ nhớ. Kiểu dữ liệu là một trong những thành phần cơ bản nhất và không thể thiếu trong ngôn ngữ lập trình, được sử dụng trong mọi ứng dụng, mọi thao tác phát triển phần mềm. Các kiểu dữ liệu cơ bản gần như giữ nguyên cách định nghĩa, định dạng từ thời kỳ ban đầu của ngôn ngữ lập trình. Tùy theo sự phát triển của kiến trúc máy tính, các kiểu dữ liệu cơ bản được được nâng cao hơn về mặt khoảng giá trị, độ chính xác và các phép toán hỗ trợ (ví dụ: các phép toán siêu việt như sin, cos, log, khai căn,... đối với kiểu số thực). Các kiểu dữ liệu phức hợp được nghiên cứu để có thể dễ dàng cài đặt hoặc thao tác hơn, che kín các xử lý chi tiết bên trong đối với người sử dụng.
Kiểu dữ liệu là một trong những nội dung cơ bản nhất và thường được đưa vào dạy ngay từ những phần đầu tiên của bất kỳ môn học nào liên quan đến ngôn ngữ lập trình. Bên cạnh đó, cách biểu diễn các kiểu dữ liệu cơ bản cũng thường được đưa vào trong một số môn học liên quan đến phần cứng như: vi xử lý, kiến trúc máy tính.
Tài liệu tham khảo[sửa]
- Donald Knuth, The Art of Computer Programming, vol. 1. Addison-Wesley, 3rd edition, 1997, ISBN 978-0201896831
- Quách Tuấn Ngọc, Ngôn ngữ lập trình C, Nhà xuất bản Hà Nội, 1998
- Niclaus Wirth, Algorithms + Data structures = Programs, Prentice-Hall, Inc (1976), ISBN 0-13-022418-9