✨Hệ thống kiểu

Hệ thống kiểu

Trong ngôn ngữ lập trình, hệ thống kiểu (tiếng Anh: type system) là một tập các quy tắc gán một thuộc đặc tính gọi là kiểu cho các cấu trúc khác nhau của một chương trình máy tính bao gồm, như biến, biểu thức, hàm hay mô đun.

Những kiểu này chính thức hóa và bắt buộc (một cách ngầm định) các loại mà lập trình viên sử dụng cho cấu trúc dữ liệu và thành phần, ví dụ như: "chuỗi" (string), "mảng số thực" (array of float), "hàm trả về giá trị boolean"). Mục đích chính của hệ thống kiểu là để giảm khả năng lỗi trong chương trình máy tính bằng cách định nghĩa giao diện giữa các phần của chương trình máy tính, và sau đó kiểm tra các bộ phận được kết nối theo một cách nhất quán. Kiểm tra có thể xảy ra tĩnh (vào thời gian biên dịch - compile time), động (vào thời gian chạy -- run time), hay là sự kết hợp của kiểm tra tĩnh và động. Hệ thống kiểu còn có mục đích khác, như cho phép tối ưu hóa trình biên dịch nhất định, cho phép đa điều phối (multiple dispatch), cung cấp một dạng tài liệu,...

Một hệ thống kiểu liên kết mỗi kiểu với một giá trị tính toán, bằng cách kiểu tra dòng của những giá trị đó, cố gắng bảo đảm hay chứng minh rằng không có lỗi kiểu nào có thể xảy ra. Hệ thống kiểu đã cho xác định chính xác những gì cấu thành lỗi kiểu, nhưng nói chung mục đích là để ngăn các toán tử sử dụng được những loại giá trị mà hoạt động tính toán trên đó không có ý nghĩa (lỗi logic); lỗi bộ nhớ cũng sẽ được ngăn chặn. Hệ thống kiểu thường được đặc tả như là một phần của ngôn ngữ lập trình, và xây dựng trong trình thông dịch và trình biên dịch của ngôn ngữ đó; mặc dù hệ thống kiểu của nogon ngữ có thể được mở rộng bởi các công cụ tùy chọn (extended static checking) để thực hiện các loại kiểm tra bổ sung sử dụng cú pháp và ngữ pháp kiểu gốc của ngôn ngữ đó.

Tổng quan về sử dụng

Một ví dụ về hệ thống kiểu đơn giản là về ngôn ngữ C. Một phần của một chương trình C là về định nghĩa hàm. Một hàm được gọi bởi hàm khác. Giao diện của một hàm mô tả tên của hàm và danh sách các giá trị được truyền vào trong mã của nó. Mã của hàm được gọi mô tả tên được gọi, cùng với tên các biến nắm giữ giá trị được truyền vào nó. Trong quá trình thực thi, những giá trị được đặt vào bộ nhớ tạm, rồi thực thi nhảy tới mã của hàm được gọi. Mã của hàm được gọi truy xuất những giá trị đó và sử dụng chúng. Nếu các lệnh bên trong hàm được viết với giả thiết nhận được giá trị số nguyên (integer), nhưng mã được gọi truyền đến một giá trị dấu chấm động (floating-point), như vậy kết quả sai sẽ được trả về bởi hàm được gọi. Bộ biên dịch C kiểm tra kiểu được định nghĩa cho mỗi biến được gửi đi, với kiểu được định nghĩa trong giao diện của hàm được gọi. Nếu các kiểu không khớp, trình biên dịch sẽ trả ra một lỗi biên dịch (compile-time error).

Một trình biên dịch cũng có thể sử dụng kiểu tĩnh của giá trị để tối ưu hóa bộ nhớ cần thiết và chọn lựa giải thuật để hoạt động trên giá trị đó. Trong nhiều trình biên dịch của C, ví dụ như kiểu dữ liệu số thực (float), được biểu diễn bằng 32 bit, theo như đặc tả IEEE cho con số dấu chấm động chính xác đơn. Do vậy họ sẽ dùng các toán tử vi xử lý chuyên cho dấu chấm động (ví dụ như phép cộng, phép nhân dấm chấm động...).

Cơ bản

Hiểu một cách chính thức thì lý thuyết kiểu nghiên cứu về hệ thống kiểu. Một ngôn ngữ lập trình phải có kiểm tra kiểu (type check) bằng cách sử dụng hệ thống kiểu cho dù ở thời gian biên dịch hay thời gian chạy, ghi chú thủ công hay tự động suy ra. Như Mark Manasse đã nói rõ rằng:

Cho dù là được tự động bởi trình biên dịch hay được đặc tả bởi lập trình viên, hệ thống kiểu sẽ khiến hành vi chương trình trở nên bất hợp pháp nếu nó nằm ngoài quy tắc hệ thống kiểu. Ưu điểm của hệ thống kiểu đặc tả bởi lập trình viên gồm:

  • Trừu tượng hóa (abstraction) hay mô đun hóa (modularity) – Các kiểu cho phép lập trình viên suy nghĩ ở mức cao hơn mức bit hoặc byte mà không cần quan tâm đến hiện thực ở mức thấp hơn. Ví dụ, lập trình viên có thể bắt đầu nghĩ về chuỗi (string) như là một tập các giá trị kí tự thay vì một mảng các byte. Cao hơn một chút, kiểu cho phép lập trình viên nghĩ và thể hiện giao diện giữa hai hệ thống con với bất kì kích thước nào. Điều này cho phép nhiều mức độ địa phương hóa để các định nghĩa cần thiết cho tính tương hợp giữa các hệ thống con vẫn thống nhất khi hai hệ thống giao tiếp với nhau.
  • Tài liệu hóa (documentation) – Trong các hệ thống kiểu lớn hơn, kiểu có thể đóng vai trò như tài liệu để làm rõ mục đích của lập trình viên. Ví dụ, nếu lập trình viên định nghĩa một hàm trả về kiểu thời gian (timestamp), nó ghi tài liệu hàm với kiểu thời gian được khai báo tường minh trong mã với kiểu số nguyên.

Ưu điểm của hệ thống kiểu đặc tả bởi trình biên dịch gồm:

  • Tối ưu hóa (optimization) – Kiểm tra kiểu tĩnh có thể cung cấp thông tin thời gian biên dịch có ích. Ví duk, nếu một kiểu yêu cầu giá trị nằm trong bộ nhớ phải là bộ số của 4 byte, trình biên dịch có thể sử dụng lệnh máy hiệu quả hơn.
  • An toàn (safety) – Một hệ thống kiểu cho phép trình biên dịch phát hiện mã vô nghĩa hay có thể là mã không phợp lệ. Ví dụ, chúng ta có thể xác định biểu thức 3 / "Hello, World" là không hợp lệ, vì các quy tắc không xác định được cách chia một số nguyên cho một chuỗi. Kiểu mạnh hường an toàn hơn, nhưng không thể bảo đảm an toàn kiểu (type safety) được.

Kiểm tra kiểu

Quán trình kểm tra và thực thi các ràng buộc của kiểu—kiểm tra kiểu (type checking)— có thể xảy ra ở thời gian biên dịch (kiểm tra tĩnh) hoặc thời gian chạy. Nếu một đặc tả ngôn ngữ yêu cầu các quy tắc kiểu mạnh (ví dụ, chỉ cho phép ít hay nhiều việc chuyển đổi kiểu tự động mà không làm mất thông tin), quá trình đó gọi là kiểu mạnh, còn không, gọi là kiểu yếu. Các thuật ngữ này thường không được dùng theo nghĩa chặt chẽ.

Kiểm tra kiểu tĩnh

Kiểm tra kiểu tĩnh (static type checking) là quá trình xác minh an toàn kiểu của một chương trình dựa vào sự phân tích văn bản (mã nguồn) của chương trình. Nếu một chương trình vượt qua được bộ kiểm tra kiểu tĩnh, khi đó chương trình đảm bảo đáp ứng được một số đặc tính an toàn cho tất cả đầu vào.

Kiểm tra kiểu động và thông tin kiểu thời gian chạy

Kiểm tra kiểu động (dynamic type checking) là quá trình xác minh an toàn kiểu của chương trình vào thời gian chạy.

Kết hợp kiểm tra kiểu tĩnh và động

Một số ngôn ngữ cho phép cả kiểm tra kiểu tĩnh và động, đôi khi gọi là kiểm tra kiểu mềm (soft typing).

Kiểm tra kiểu tĩnh và động trong thực tế

Cần sự đánh đổi nhất định khi lựa chọn giữa kiểm tra kiểu tĩnh và động.

Hệ thống kiểu mạnh và kiểu yếu

An toàn kiểu và an toàn bộ nhớ

Các mức độ kiểm tra kiểu

Một số ngôn ngữ cho phép các mức độ kiểm tra kiểu khác nhau áp dụng cho từng vùng mã khác nhau.

Hệ thống kiểu tùy chọn

Nó được đề xuất chủ yếu bởi Gilad Bracha, cho phép lựa chọn hệ thống kiểu có thể độc lập với lựa chọn ngôn ngữ; như vậy một hệ thống kiểu nên là một mô đun để có thể gắn vào một ngôn ngữ khi cần.

👁️ 1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Trong ngôn ngữ lập trình, **hệ thống kiểu** (tiếng Anh: _type system_) là một tập các quy tắc gán một thuộc đặc tính gọi là kiểu cho các cấu trúc khác nhau của một chương
Trong khoa học máy tính, **hệ thống kiểu danh định** (tiếng Anh: _nominative type system**) hay **hệ thống kiểu dựa trên tên_' (_name-based type system_) là một lớp quan trọng của hệ thống kiểu, mà
**Hệ thống kiểu Hindley–Milner** (**HM**) là một hệ thống kiểu cổ điển cho phép tính lambda với đa hình tham số (_parametric polymorphism_). Nó còn được gọi là **Damas–Milner** hay **Damas–Hindley–Milner**. Nó được mô tả
Trong .NET Framework của Microsoft, **Hệ thống kiểu dữ liệu dùng chung** (tiếng Anh: Common Type System - CTS) là một tiêu chuẩn xác định cách các định nghĩa kiểu dữ liệu và các giá
**Hệ thống xã hội chủ nghĩa** là thể chế chính trị mà được các nước có các đảng Cộng sản nắm quyền lãnh đạo tuyên bố sẽ đưa đất nước và dân tộc mình đi
Trong việc lập trình, các ngôn ngữ lập trình thường được coi là **kiểu yếu** hoặc **kiểu mạnh**. Nói chung thì các khái niệm này không có định nghĩa chính xác cụ thể. Thực ra,
**Hệ thống địa chỉ của Nhật Bản** được sử dụng để xác định một địa điểm cụ thể tại Nhật Bản. Khi được viết bằng các ký tự tiếng Nhật, các địa chỉ bắt đầu
[[KDE 3.5]] [[GNOME 2.12.0]] Trong khoa học máy tính, **Hệ thống X Window** (còn được gọi tắt là **X11** hay **X**) là một windowing system dùng để hiển thị đồ họa bitmap. Nó cung ứng
Trong điện toán, khái niệm **hệ thống tập tin** hoặc **hệ thống tệp** () được dùng để chỉ các phương pháp và cấu trúc dữ liệu mà một hệ điều hành sử dụng để theo
The X Window System logo Trong vi tính, **Hệ thống X Window** (thường được gọi tắt là **X11** hoặc **X**) là một hệ thống cửa sổ xuyên dụng mạng dùng để hiển thị đồ họa
thumb|right|Một _hệ thống nhúng_ trên thẻ trình cắm có bộ xử lý, bộ nhớ, nguồn điện và giao diện bên ngoài **Hệ thống nhúng** () là một thuật ngữ để chỉ một hệ thống có
**Hệ thống thông tin di động toàn cầu** (tiếng Anh: _Global System for Mobile Communications_; tiếng Pháp: _Groupe Spécial Mobile_; viết tắt: **GSM**) là một công nghệ dùng cho mạng thông tin di động. Dịch
nhỏ|Tòa Hoàng gia, biểu tượng cho Hệ thống pháp luật Anh quốc **Pháp luật Anh** là hệ thống pháp luật được áp dụng cho toàn xứ Anh và xứ Wales được xây dựng cơ sở
thumb|right|[[Tàu điện ngầm Glasgow]] thumb|right|[[Rapid Rail|Rapid KL – Tuyến Kelana Jaya]] thumb|right|[[Tuyến Văn Hồ (Tuyến Nâu), Đường sắt đô thị Đài Bắc]] thumb|[[Tuyến 3 Scarborough trước đây của hệ thống tàu điện ngầm Toronto được
**Hệ thống phân giải tên miền** (hay được viết tắt là **DNS** do tên tiếng Anh **_Domain Name System_**) là một hệ thống cho phép thiết lập tương ứng giữa địa chỉ IP và [https://google.com
**Hệ thống AGP III** là một hệ thống phân loại thực vật đối với thực vật có hoa hiện đại. Nó được Angiosperm Phylogeny Group (APG) công bố tháng 10 năm 2009 trong _Botanical Journal
thumb|right|Một số hệ thống xác định giới tính bằng nhiễm sắc thể|400x400px **Hệ xác định giới tính** (tiếng Anhː _Sex-determination system_), hay còn gọi là **cơ chế xác định giới tính**, là tập hợp các
phải|nhỏ|280x280px|Kỹ thuật hệ thống được áp dụng trong các hệ thống phức tạp: Thiết kế tàu vũ trụ, Thiết kế chip máy tính, Rô bốt, Phần mềm tích hợp, xây dựng cầu đường. Kỹ thuật
**Suy luận kiểu** (tiếng Anh: _type inference_) dùng để chỉ việc tự động phát hiện kiểu dữ liệu của một biểu thức trong ngôn ngữ lập trình. Nó là một tính năng hiện diện trong
**Hệ thống thông tin địa lý** (_Geographic Information System_ - gọi tắt là **GIS**) được hình thành vào những năm 1960 và phát triển rất rộng rãi trong 10 năm lại đây. GIS ngày nay
**Hiệp hội Điện ảnh Hoa Kỳ** - Motion Picture Association of America (MPAA) đưa ra **Hệ thống phân loại phim của MPAA** và áp dụng trên toàn lãnh thổ Hoa Kỳ để phân loại phim
**Dân luật** là một hệ thống pháp luật trên thế giới có nguồn gốc từ châu Âu và được áp dụng tại hầu hết các quốc gia trên thế giới. Hệ thống dân luật được
= Giới thiệu = Cùng với sự phát triển của thương mại điện tử cũng như tương tác trực tuyến của con người trong giai đoạn hiện nay, **hệ thống gợi ý** đã được nghiên
**Hệ thống chuyển giá trị không chính thức** (**IVTS**) hay nôm na **hệ thống chuyển tiền chui** là bất kỳ hệ thống, cơ chế hoặc mạng lưới người nào nhận tiền với mục đích tạo
**Hệ thống đánh mã máy bay quân sự của Nhật Bản** trong thời kỳ Đế quốc (trước 1945) bao gồm hệ thống cho mỗi đơn vị vũ trang. Điều này dẫn đến việc sử dụng
nhỏ|Kháng nguyên A (đỏ), B (xanh) trên hồng cầu và kháng thể IgM trong huyết thanh. **Hệ thống nhóm máu ABO** là tên của một hệ nhóm máu ở người, dựa trên sự tồn tại
**Osiris Serverless Portal System** (thường được viết tắt bằng Osiris sps hoặc Osiris) là một chương trình freeware được sử dụng để tạo các trang web portal phân phối theo phương thức mạng hàng ngang
nhỏ|Tỉnh lộ 943 đoạn đi qua Thị trấn [[Phú Hòa, Thoại Sơn, An Giang]] nhỏ|Hệ thống giao thông Việt Nam 2000 Các tuyến đường bộ, đường sắt, đường hàng không trong **mạng lưới giao thông
**Các hệ thống kiểm soát bay** gồm các bề mặt điều khiển bay, các hệ thống trong buồng lái, các đường kết nối và các cơ cấu hoạt động cần thiết để điều khiển hướng
Ba yếu tố quan trọng của động cơ xăng là: hỗn hợp không khí-nhiên liệu (hòa khí) tốt, sức nén tốt, và đánh lửa tốt. **Hệ thống đánh lửa** tạo ra một tia lửa mạnh,
Một **hệ thống giao phối** (_Mating system_) là cách mà một nhóm cấu trúc liên quan đến hành vi tình dục. Ý nghĩa chính xác của thuật ngữ này phụ thuộc vào từng bối cảnh
**Hệ thống sản phẩm-dịch vụ** (tiếng Anh: **Product-service systems**, viết tắt là **PSS**_)_ là mô hình thương mại đưa ra sự phân phối có tính liên kết cả sản phẩm và dịch vụ. Các mô
**LTE** (viết tắt của cụm từ **Long Term Evolution**, có nghĩa là **Tiến hóa dài hạn**), công nghệ này được coi như công nghệ di động thế hệ thứ 4 (4G, nhưng thực chất LTE
thumb|right|Hệ thống [[Tàu điện ngầm thành phố New York là hệ thống tàu điện ngầm vận hành độc lập lớn nhất trên thế giới tính theo số lượng nhà ga mà nó phục vụ, sử
Một **hệ thống thời gian chuyển động được xác định trước (PMTS)** thường được sử dụng để thực hiện Chi phí phút lao động để thiết lập tỷ lệ mảnh, mức lương và/hoặc khuyến khích
thumb|[[Arena (hệ thống phòng thủ)|Hệ thống phòng thủ chủ động Arena:
1. Silo bảo vệ
2. Radar
3. Đạn đánh chặn
4. Tên lửa điều khiển chống tăng đang bay tới
5. Giai đoạn theo
phải|nhỏ|230x230px| Nhiều góc độ và chi tiết khác nhau của "MaxScan OE509" - một máy quét cầm tay chẩn đoán tích hợp (OBD) khá điển hình từ thập kỷ đầu tiên của thế kỷ 21.
thế=AO classification|phải|502x502px| Phân loại AO **Phân loại gãy xương Müller AO** là một hệ thống phân loại gãy xương lần đầu được phát hành vào năm 1987 bởi Tổ chức AO, là một phương pháp
thumb|7 đơn vị cơ bản SI **Hệ đo lường quốc tế** (tiếng Pháp: **S**ystème **I**nternational d'unités; viết tắt: **SI**), là 1 hệ thống đo lường thống nhất được sử dụng rộng rãi trên thế giới.
được đặt tên theo tên của James Curtis Hepburn, người đã dùng hệ này để phiên âm tiếng Nhật thành chữ cái Latinh ở phiên bản thứ 3 từ điển Nhật - Anh của ông,
Tương thích sử dụng cho các dàn âm thanh Sony có model HT-CT291 SA-CT290 SA-CT291, HT-CT290, HT-CT291, SA-CT290, SA-CT291, HTCT290, HTCT291, SACT290, SACT291​​​​​​​.. sử dụng loại điều khiển có kiểu dáng tương tự sản phẩm
Tương thích sử dụng cho các dàn âm thanh Sony có model HT-CT180 SA-CT180 SA-WCT180 HTCT180 SACT180 SAWCT180 149293011 SS-WCT80 SA-CT80 RMT-AH103U​​​​​​​.. sử dụng loại điều khiển có kiểu dáng tương tự sản phẩm Remote
Tư duy thiết kế (DT) là chủ đề của nhiều cuộc tranh luận và ứng dụng rộng rãi trên nhiều lĩnh vực kiến ​​thức khác nhau, bao gồm cả lĩnh vực thực phẩm; tuy nhiên,
"Chúng Tôi Cam Kết Hàng Đúng Chất Lượng Như Mô Tả Và Hình Ảnh"♻ THÔNG TIN SẢN PHẨM⭕Dao Cạo Râu - Dao Cạo Râu 5 Lưỡi Cao Cấp Balea Precision Flexpro 5, Hệ Thống 5
TƯ DUY HỆ THỐNG TRONG CÔNG VIỆC Khi đối mặt với những vấn đề phức tạp, chúng ta không thể giải quyết chúng bằng kiểu suy nghĩ lối mòn, nước đến chân mới nhảy, mù
TƯ DUY HỆ THỐNG TRONG CÔNG VIỆC Khi đối mặt với những vấn đề phức tạp, chúng ta không thể giải quyết chúng bằng kiểu suy nghĩ lối mòn, nước đến chân mới nhảy, mù
TƯ DUY HỆ THỐNG TRONG CÔNG VIỆC Khi đối mặt với những vấn đề phức tạp, chúng ta không thể giải quyết chúng bằng kiểu suy nghĩ lối mòn, nước đến chân mới nhảy, mù
TƯ DUY HỆ THỐNG TRONG CÔNG VIỆC Khi đối mặt với những vấn đề phức tạp, chúng ta không thể giải quyết chúng bằng kiểu suy nghĩ lối mòn, nước đến chân mới nhảy, mù
**Lupus ban đỏ hệ thống** (tiếng Anh: **systemic lupus erythematosus**, **SLE** hay **lupus**), là một bệnh tự miễn của mô liên kết, có thể ảnh hưởng đến mọi bộ phận cơ thể. Cũng như trong
thumb|Một thiết bị xử lý không khí được sử dụng để làm nóng hoặc làm mát không khí ở khu trung tâm. **Thông gió** (chữ V trong HVAC, hệ thống điều hòa không khí) là