Trong khoa học máy tính và lập trình máy tính, kiểu dữ liệu (hoặc đơn giản là kiểu) là một tập hợp các giá trị có thể có và một tập hợp các thao tác được phép thực hiện trên đó. Một kiểu dữ liệu cho trình biên dịch hoặc trình thông dịch biết lập trình viên dự định sử dụng dữ liệu như thế nào. Hầu hết các ngôn ngữ lập trình đều hỗ trợ các kiểu dữ liệu cơ bản của số nguyên (có kích thước khác nhau), số dấu phẩy động (xấp xỉ số thực), ký tự và Booleans. Một kiểu dữ liệu ràng buộc các giá trị có thể có mà một biểu thức, chẳng hạn như một biến hoặc một hàm, có thể nhận. Kiểu dữ liệu này xác định các hoạt động có thể được thực hiện trên dữ liệu, ý nghĩa của dữ liệu và cách các giá trị của loại đó có thể được lưu trữ. [1][2] Show
Khái niệm[sửa]Kiểu dữ liệu là một tập hợp hoặc nhóm các giá trị dữ liệu. Một nhóm như vậy có thể được xác định vì nhiều lý do. sự giống nhau, thuận tiện, hoặc để tập trung sự chú ý. Việc tổ chức tốt thường là vấn đề hỗ trợ cho việc hiểu các định nghĩa phức tạp. Hầu như tất cả các ngôn ngữ lập trình đều bao gồm khái niệm kiểu dữ liệu một cách rõ ràng, mặc dù các kiểu dữ liệu có thể có thường bị hạn chế bởi các cân nhắc về tính đơn giản, khả năng tính toán hoặc tính đều đặn. Một khai báo kiểu dữ liệu rõ ràng thường cho phép trình biên dịch chọn một biểu diễn máy hiệu quả, nhưng tổ chức khái niệm được cung cấp bởi các kiểu dữ liệu không nên được giảm giá. [3] Các ngôn ngữ khác nhau có thể sử dụng các loại dữ liệu khác nhau hoặc các loại tương tự với ngữ nghĩa khác nhau. Ví dụ: trong ngôn ngữ lập trình Python, ____ đại diện cho một số nguyên có độ chính xác tùy ý có các phép toán số truyền thống như cộng, trừ và nhân. Tuy nhiên, trong ngôn ngữ lập trình Java, loại Hầu hết các ngôn ngữ lập trình cũng cho phép lập trình viên xác định các loại dữ liệu bổ sung, thường bằng cách kết hợp nhiều phần tử của các loại khác và xác định các hoạt động hợp lệ của loại dữ liệu mới. Ví dụ: một lập trình viên có thể tạo một kiểu dữ liệu mới có tên là "số phức" bao gồm phần thực và phần ảo hoặc kiểu dữ liệu màu được biểu thị bằng ba byte biểu thị số lượng của mỗi màu đỏ, lục và lam và một chuỗi biểu thị Các kiểu dữ liệu được sử dụng trong các hệ thống kiểu, cung cấp nhiều cách khác nhau để xác định, triển khai và sử dụng chúng. Trong một hệ thống kiểu, một kiểu dữ liệu đại diện cho một ràng buộc được đặt trên việc diễn giải dữ liệu, mô tả sự biểu diễn, diễn giải và cấu trúc của các giá trị hoặc đối tượng được lưu trữ trong bộ nhớ máy tính. Hệ thống loại sử dụng thông tin loại dữ liệu để kiểm tra tính chính xác của các chương trình máy tính truy cập hoặc thao tác dữ liệu. Trình biên dịch có thể sử dụng kiểu tĩnh của một giá trị để tối ưu hóa dung lượng lưu trữ mà nó cần và lựa chọn thuật toán cho các thao tác trên giá trị đó. Ví dụ, trong nhiều trình biên dịch C, kiểu dữ liệu Hầu hết các kiểu dữ liệu trong thống kê đều có kiểu so sánh được trong lập trình máy tính và ngược lại, như trong bảng sau Định nghĩa[sửa]Parnas, Shore & Weiss (1976) đã xác định năm định nghĩa về một "loại" được sử dụng—đôi khi ngầm hiểu—trong tài liệu Kiểu cú pháp là một nhãn cú pháp thuần túy được liên kết với một biến khi nó được khai báo. Mặc dù hữu ích cho các hệ thống kiểu nâng cao như hệ thống kiểu cấu trúc bên dưới, các định nghĩa như vậy không cung cấp ý nghĩa trực quan của các kiểu. Biểu diễn Một loại được xác định theo thành phần của nó gồm nhiều loại nguyên thủy hơn—thường là các loại máy móc. Biểu diễn và hành viMột loại được định nghĩa là biểu diễn của nó và một tập hợp các toán tử thao tác với các biểu diễn này. Không gian giá trịKiểu là một tập hợp các giá trị có thể có mà một biến có thể sở hữu. Các định nghĩa như vậy cho phép nói về các liên kết (rời rạc) hoặc các loại sản phẩm Descartes. Không gian giá trị và hành vi Một loại là một tập hợp các giá trị mà một biến có thể sở hữu và một tập hợp các chức năng mà một biến có thể áp dụng cho các giá trị nàyĐịnh nghĩa dưới dạng biểu diễn thường được thực hiện bằng các ngôn ngữ mệnh lệnh như ALGOL và Pascal, trong khi định nghĩa dưới dạng không gian giá trị và hành vi được sử dụng trong các ngôn ngữ cấp cao hơn như Simula và CLU. Các loại bao gồm hành vi phù hợp chặt chẽ hơn với các mô hình hướng đối tượng, trong khi mô hình lập trình có cấu trúc sẽ có xu hướng không bao gồm mã và được gọi là cấu trúc dữ liệu cũ đơn giản Các kiểu dữ liệu có thể được phân loại theo một số yếu tố
Thuật ngữ khác nhau - trong tài liệu, nguyên thủy, tích hợp sẵn, cơ bản, nguyên tử và cơ bản có thể được sử dụng thay thế cho nhau. [7] Các ví dụ[sửa]Các loại dữ liệu máy[sửa]Tất cả dữ liệu trong máy tính dựa trên thiết bị điện tử kỹ thuật số được biểu diễn dưới dạng bit (các lựa chọn thay thế 0 và 1) ở mức thấp nhất. Đơn vị dữ liệu có thể định địa chỉ nhỏ nhất thường là một nhóm bit được gọi là byte (thường là octet, có 8 bit). Đơn vị được xử lý bởi các hướng dẫn mã máy được gọi là một từ (kể từ năm 2011, thường là 32 hoặc 64 bit) Các loại dữ liệu máy hiển thị hoặc cung cấp khả năng kiểm soát chi tiết đối với phần cứng, nhưng điều này cũng có thể hiển thị các chi tiết triển khai khiến mã ít di động hơn. Do đó các loại máy chủ yếu được sử dụng trong lập trình hệ thống hoặc ngôn ngữ lập trình cấp thấp. Trong các ngôn ngữ cấp cao hơn, hầu hết các kiểu dữ liệu được trừu tượng hóa ở chỗ chúng không có biểu diễn máy do ngôn ngữ định nghĩa. Chẳng hạn, ngôn ngữ lập trình C cung cấp các kiểu như booleans, số nguyên, số dấu phẩy động, v.v. , nhưng các biểu diễn bit chính xác của các loại này được xác định theo triển khai. Loại C duy nhất có biểu diễn máy chính xác là loại Kiểu Boolean[sửa]Kiểu Boolean đại diện cho các giá trị true và false. Mặc dù chỉ có thể có hai giá trị, nhưng chúng thường được biểu diễn dưới dạng một từ hơn là một bit đơn vì nó yêu cầu nhiều hướng dẫn máy hơn để lưu trữ và truy xuất một bit riêng lẻ. Nhiều ngôn ngữ lập trình không có kiểu Boolean rõ ràng, thay vào đó sử dụng kiểu số nguyên và diễn giải (ví dụ) 0 là sai và các giá trị khác là đúng. Dữ liệu Boolean đề cập đến cấu trúc logic về cách ngôn ngữ được diễn giải sang ngôn ngữ máy. Trong trường hợp này, Boolean 0 đề cập đến logic Sai. Đúng luôn là một số khác không, đặc biệt là một số được gọi là Boolean 1 Các loại số[sửa]Hầu như tất cả các ngôn ngữ lập trình đều cung cấp một hoặc nhiều kiểu dữ liệu số nguyên. Họ có thể cung cấp một số lượng nhỏ các kiểu con được xác định trước được giới hạn trong các phạm vi nhất định (chẳng hạn như Các kiểu dữ liệu dấu chấm động biểu thị các giá trị phân số nhất định (số hữu tỉ, về mặt toán học). Mặc dù chúng có các giới hạn được xác định trước về cả giá trị tối đa và độ chính xác của chúng, nhưng đôi khi chúng được gọi một cách sai lầm là số thực (gợi ý đến số thực toán học). Chúng thường được lưu trữ nội bộ ở dạng a × 2b (trong đó a và b là số nguyên), nhưng được hiển thị ở dạng thập phân quen thuộc Các kiểu dữ liệu điểm cố định thuận tiện cho việc biểu diễn các giá trị tiền tệ. Chúng thường được triển khai bên trong dưới dạng số nguyên, dẫn đến các giới hạn được xác định trước Để độc lập với các chi tiết kiến trúc, có thể cung cấp loại Bignum hoặc loại Bảng liệt kê [ chỉnh sửa ]Kiểu liệt kê có các giá trị riêng biệt, có thể được so sánh và gán, nhưng không nhất thiết phải có bất kỳ biểu diễn cụ thể cụ thể nào trong bộ nhớ của máy tính; . Ví dụ, bốn chất trong một bộ bài chơi có thể là bốn chất liệt kê có tên CÂY, KIM CƯƠNG, TRÁI TIM, SPADE, thuộc một loại chất liệt kê có tên là chất. Nếu một biến V được khai báo có kiểu dữ liệu phù hợp, người ta có thể gán bất kỳ giá trị nào trong bốn giá trị đó cho nó. Một số triển khai cho phép lập trình viên gán giá trị nguyên cho giá trị liệt kê hoặc thậm chí coi chúng là kiểu tương đương với số nguyên Các loại chuỗi và văn bản[sửa | sửa mã nguồn]Chuỗi là một chuỗi các ký tự được sử dụng để lưu trữ các từ hoặc văn bản thuần túy, hầu hết các ngôn ngữ đánh dấu văn bản thường đại diện cho văn bản được định dạng. Các ký tự có thể là một chữ cái của một số bảng chữ cái, một chữ số, một khoảng trống, một dấu chấm câu, v.v. Các ký tự được vẽ từ một bộ ký tự như ASCII. Các kiểu ký tự và chuỗi có thể có các kiểu con khác nhau tùy theo mã hóa ký tự. ASCII rộng 7 bit ban đầu bị giới hạn và được thay thế bằng các bộ 8, 16 và 32 bit, có thể mã hóa nhiều loại bảng chữ cái không phải là tiếng Latinh (chẳng hạn như tiếng Do Thái và tiếng Trung Quốc) và các ký hiệu khác. Các chuỗi có thể có độ dài thay đổi hoặc độ dài cố định và một số ngôn ngữ lập trình có cả hai loại. Chúng cũng có thể được phân loại theo kích thước tối đa của chúng Vì hầu hết các bộ ký tự bao gồm các chữ số, nên có thể có một chuỗi số, chẳng hạn như Các loại liên minh [ chỉnh sửa ]Định nghĩa kiểu kết hợp sẽ chỉ định kiểu con nào trong số các kiểu con được phép có thể được lưu trữ trong các thể hiện của nó, e. g. "số float hoặc số nguyên dài". Ngược lại với một bản ghi, có thể được xác định để chứa một số float và một số nguyên, một liên kết chỉ có thể chứa một kiểu con tại một thời điểm Liên kết được gắn thẻ (còn được gọi là biến thể, bản ghi biến thể, liên kết phân biệt đối xử hoặc liên kết rời rạc) chứa một trường bổ sung cho biết loại hiện tại của nó để tăng cường an toàn cho loại Các kiểu dữ liệu đại số[sửa]Kiểu dữ liệu đại số (ADT) là một loại tổng có thể đệ quy của các loại sản phẩm. Giá trị của ADT bao gồm thẻ hàm tạo cùng với 0 hoặc nhiều giá trị trường, với số lượng và loại giá trị trường được cố định bởi hàm tạo. Tập hợp tất cả các giá trị có thể có của một ADT là liên kết rời rạc theo lý thuyết tập hợp (tổng), của tập hợp tất cả các giá trị có thể có của các biến thể của nó (tích của các trường). Các giá trị của các loại đại số được phân tích với khớp mẫu, xác định hàm tạo của một giá trị và trích xuất các trường chứa nó Nếu chỉ có một hàm tạo, thì ADT tương ứng với loại sản phẩm tương tự như bộ hoặc bản ghi. Hàm tạo không có trường tương ứng với sản phẩm trống (loại đơn vị). Nếu tất cả các hàm tạo không có trường thì ADT tương ứng với kiểu liệt kê Một ADT phổ biến là loại tùy chọn, được định nghĩa trong Haskell là Cấu trúc dữ liệu[sửa]Một số loại rất hữu ích để lưu trữ và truy xuất dữ liệu và được gọi là cấu trúc dữ liệu. Cấu trúc dữ liệu phổ biến bao gồm
Các kiểu dữ liệu trừu tượng[sửa mã nguồn]Kiểu dữ liệu trừu tượng là kiểu dữ liệu không chỉ định biểu diễn cụ thể của dữ liệu. Thay vào đó, một đặc tả chính thức dựa trên hoạt động của kiểu dữ liệu được sử dụng để mô tả nó. Mọi triển khai của một đặc điểm kỹ thuật phải đáp ứng các quy tắc được đưa ra. Ví dụ: một ngăn xếp có các thao tác đẩy/bật tuân theo quy tắc Nhập trước xuất trước và có thể được triển khai cụ thể bằng cách sử dụng danh sách hoặc mảng. Một ví dụ khác là một tập hợp lưu trữ các giá trị, không có bất kỳ thứ tự cụ thể nào và không có giá trị lặp lại. Bản thân các giá trị không được truy xuất từ các tập hợp, thay vào đó, một giá trị sẽ kiểm tra giá trị tư cách thành viên để thu được giá trị boolean "in" hoặc "not in" Các kiểu dữ liệu trừu tượng được sử dụng trong ngữ nghĩa chính thức và xác minh chương trình và, ít nghiêm ngặt hơn, trong thiết kế. Sau khi xác minh, một đặc điểm kỹ thuật có thể ngay lập tức được chuyển thành triển khai. Chẳng hạn, họ ngôn ngữ lập trình OBJ dựa trên tùy chọn này bằng cách sử dụng các phương trình để đặc tả và viết lại để chạy chúng. Đặc tả đại số[12] là một chủ đề nghiên cứu quan trọng trong CS khoảng năm 1980 và gần như là một từ đồng nghĩa với các kiểu dữ liệu trừu tượng tại thời điểm đó. Nó có một nền tảng toán học trong đại số phổ quát. [13] Ngôn ngữ đặc tả có thể được biểu cảm hơn bằng cách cho phép các công thức khác chứ không chỉ các phương trình Một ví dụ liên quan hơn là hệ thống phân cấp Boom của cây nhị phân, danh sách, túi và tập hợp các loại dữ liệu trừu tượng. [14] Tất cả các kiểu dữ liệu này có thể được khai báo bằng ba thao tác. null, cấu trúc vùng chứa trống, single, cấu trúc vùng chứa từ một phần tử duy nhất và nối thêm, kết hợp hai vùng chứa cùng loại. Thông số kỹ thuật hoàn chỉnh cho bốn loại dữ liệu sau đó có thể được đưa ra bằng cách thêm liên tiếp các quy tắc sau vào các hoạt động này - null là trung tính bên trái và bên phải của cây. nối thêm(null,A) = A, nối thêm(A,null) = A. - danh sách thêm mà append là liên kết. chắp thêm(chắp thêm(A,B),C) = nối thêm(A,chắp thêm(B,C)). - túi thêm tính giao hoán. nối thêm(B,A) = nối thêm(A,B). - cuối cùng, các bộ cũng là idempotent. nối thêm(A,A) = AQuyền truy cập vào dữ liệu có thể được chỉ định bằng cách khớp mẫu trong ba thao tác, ví dụ:. g. một hàm thành viên cho các thùng chứa này bằng cách - thành viên(X,single(Y)) = eq(X,Y)- thành viên(X,null) = false- thành viên(X,append(A,B)) = or(thành viên(X,A), thành viên(Phải cẩn thận để đảm bảo rằng chức năng là bất biến theo các quy tắc có liên quan cho loại dữ liệu. Trong mỗi lớp tương đương được ngụ ý bởi tập hợp con phương trình đã chọn, nó phải mang lại kết quả giống nhau cho tất cả các thành viên của nó Con trỏ và tài liệu tham khảo[sửa | sửa mã nguồn]Loại dẫn xuất, không tổng hợp chính là con trỏ, một loại dữ liệu có giá trị tham chiếu trực tiếp đến (hoặc "trỏ tới") một giá trị khác được lưu trữ ở nơi khác trong bộ nhớ máy tính bằng cách sử dụng địa chỉ của nó. Nó là một loại tài liệu tham khảo nguyên thủy. (Trong thuật ngữ hàng ngày, một số trang trong một cuốn sách có thể được coi là một phần dữ liệu đề cập đến một trang khác). Con trỏ thường được lưu trữ ở định dạng tương tự như số nguyên; . Để cải thiện vấn đề tiềm ẩn này, con trỏ được coi là một loại riêng biệt với loại dữ liệu mà chúng trỏ tới, ngay cả khi biểu diễn bên dưới giống nhau Các loại hàm[sửa]Các ngôn ngữ lập trình hàm coi các hàm là một kiểu dữ liệu riêng biệt và cho phép các giá trị của loại này được lưu trữ trong các biến và được chuyển đến các hàm. Một số ngôn ngữ đa mô hình như JavaScript cũng có cơ chế coi các hàm là dữ liệu. [15] Hầu hết các hệ thống kiểu hiện đại vượt ra ngoài "đối tượng hàm" kiểu đơn giản của JavaScript và có một họ các kiểu hàm được phân biệt bằng các kiểu đối số và trả về, chẳng hạn như kiểu Trong logic toán học, logic bậc nhất không cho phép áp dụng các lượng từ trên tên hàm hoặc vị từ, mặc dù logic bậc hai thì có. Loại hàm tạo[sửa]Một hàm tạo kiểu xây dựng các kiểu mới từ các kiểu cũ và có thể được coi là một toán tử lấy 0 hoặc nhiều kiểu làm đối số và tạo ra một kiểu. Các loại sản phẩm, loại chức năng, loại nguồn và loại danh sách có thể được tạo thành các hàm tạo kiểu Các loại định lượng[sửa]Các loại được định lượng phổ biến và được định lượng tồn tại dựa trên logic vị từ. Định lượng phổ quát được viết là ∀x. f(x){\displaystyle \forall x. f(x)} int 5 và là giao điểm của tất cả các loại int 6 của cơ thể int 7, i. e. giá trị thuộc loại int 7 cho mỗi int 6. Định lượng tồn tại được viết là ∃x. f(x){\displaystyle \exists x. f(x)}i32 0 và là sự kết hợp trên tất cả các loại int 6 của cơ thể int 7, i. e. giá trị thuộc loại int 7 cho một số int 6. Trong Haskell, định lượng phổ quát thường được sử dụng, nhưng các loại tồn tại phải được mã hóa bằng cách chuyển đổi Các loại sàng lọc [ chỉnh sửa ]Loại tinh chỉnh là loại được cung cấp một vị từ được giả định là giữ cho bất kỳ phần tử nào của loại tinh chỉnh. Chẳng hạn, loại số tự nhiên lớn hơn 5 có thể viết là {n∈N. n>5}{\displaystyle \{n\in \mathbb {N} \,. \,n>5\}} Các loại phụ thuộc [ chỉnh sửa ]Loại phụ thuộc là loại có định nghĩa phụ thuộc vào một giá trị. Hai ví dụ phổ biến của các loại phụ thuộc là hàm phụ thuộc và cặp phụ thuộc. Kiểu trả về của hàm phụ thuộc có thể phụ thuộc vào giá trị (không chỉ kiểu) của một trong các đối số của nó. Một cặp phụ thuộc có thể có giá trị thứ hai có loại phụ thuộc vào giá trị đầu tiên Một số ngôn ngữ lập trình biểu thị thông tin loại dưới dạng dữ liệu, cho phép xem xét và phản ánh loại. Ngược lại, các hệ thống loại bậc cao hơn, trong khi cho phép các loại được xây dựng từ các loại khác và được chuyển đến các hàm dưới dạng giá trị, thường tránh các quyết định tính toán dựa trên chúng. [cần dẫn nguồn] Các loại tiện lợi[sửa]Để thuận tiện, các ngôn ngữ cấp cao và cơ sở dữ liệu có thể cung cấp các kiểu dữ liệu "thế giới thực" được tạo sẵn, chẳng hạn như thời gian, ngày tháng và giá trị tiền tệ (tiền tệ). [16][17] Chúng có thể được tích hợp sẵn trong ngôn ngữ hoặc được triển khai dưới dạng các loại tổng hợp trong thư viện. [18] Đâu là kiểu dữ liệu hợp lệ trong PHP?PHP hỗ trợ các kiểu dữ liệu sau. . Chuỗi số nguyên Float (số dấu phẩy động - còn gọi là double) Boolean Mảng Vật Nguồn Đó là những kiểu dữ liệu hợp lệ?Hầu hết các ngôn ngữ lập trình đều hỗ trợ các kiểu dữ liệu cơ bản của số nguyên (có kích thước khác nhau), số dấu phẩy động (xấp xỉ số thực), ký tự và Booleans.
PHP và các kiểu dữ liệu của nó là gì?Các kiểu dữ liệu trong PHP
. PHP hỗ trợ tổng cộng tám kiểu dữ liệu nguyên thủy. Số nguyên, Số dấu phẩy động hoặc Float, Chuỗi, Booleans, Mảng, Đối tượng, tài nguyên và NULL .
Có bao nhiêu kiểu dữ liệu trong PHP?PHP hỗ trợ 8 loại dữ liệu nguyên thủy có thể được phân loại thêm thành 3 loại. Loại vô hướng (được xác định trước) Loại hợp chất (do người dùng xác định) Loại đặc biệt. |