# 65: Kiểu Miền Chuyên Biệt Được Ưa Chuộng Hơn Là Kiểu Nguyên Thủy

Vào ngày 23 tháng 9 năm 1997, chiếc tàu quỹ đạo Khí hậu Sao Hỏa đã bị thất lạc khi đang tiến vào quỹ đạo Sao Hỏa vì một lỗi phần mềm khi trở về Trái Đất. Sau này, lỗi ấy được gọi là metric mix-up. Trạm phần mềm tại mặt đất đã phải làm việc rất cật lực trong khi con tàu vũ trụ thì lại cần nỗ lực nhiều hơn thế, và trạm phần mềm mặt đất đã đánh giá thấp sức mạnh của các máy đẩy trong tàu vũ trụ với hệ số 4.45.

Đây là một trong các ví dụ về sự thất bại phần mềm có thể được ngăn chặn nếu được áp dụng nhiều và chắc các kiểu gõ miền chuyên biệt (domain-specific). Đây cũng là một ví dụ cho lí luận về các tính năng của ngôn ngữ Ada, một trong các mục tiêu thiết kế chính của những tính năng đó là hoàn thiện Quan trọng an toàn phần mềm nhúng (embedded safety-critical software). Ada có tính vững mạnh trong việc kiểm tra kiểu tĩnh cho cả hai kiểu nguyên thủy và kiểu do người dùng định (user-defined):

type Velocity_In_Knots is new Float range 0.0 .. 500.00; 
type Distance_In_Nautical_Miles is new Float range 0.0 .. 3000.00;
Velocity: Velocity_In_Knots;
Distance: Distance_In_Nautical_Miles;
Some_Number: Float;
Some_Number:= Distance + Velocity; — Will be caught by the compiler as a type error.

Các nhà phát triển ở lĩnh vực ít đòi hỏi hơn cũng có lợi từ việc sử dụng nhiều hơn kiểu gõ domain-specific, nơi họ có thể sử dụng kiểu dữ liệu nguyên thủy được cung cấp bởi ngôn ngữ và thư viện của nó, như là stringsfloats. Trong ngôn ngữ Java, C++, Python và các ngôn ngữ hiện đại khác, kiểu dữ liệu trừu tượng được xem như là lớp (class). Sử dụng các lớp như là Velocity_In_KnotsDistance_In_Nautical_Miles sẽ tăng thêm giá trị nối liền với chất lượng code.

  • Code trở nên dễ đọc vì nó thể hiện nhiều khái niệm tuyệt đối của một lĩnh vực chứ không chỉ là String hay Float.
  • Code trở nên có thể kiểm tra vì nó đóng gói (encapsulates) các hành vi có thể dễ dàng kiểm tra.
  • Code tạo điệu kiện để tái sử dụng các ứng dụng và hệ thống.

Sử dụng ngôn ngữ đánh máy tĩnh hay động đều mang đến cho người dùng giá trị như nhau. Điểm khác nhau duy nhất là các nhà phát triển sử dụng ngôn ngữ đánh máy tĩnh cần sự giúp đỡ của trình biên dịch trong khi những người sử dụng ngôn ngữ đánh máy động lại có xu hướng dựa vào các bài kiểm tra đơn vị của họ. Phong cách kiểm tra có thể khác nhau, nhưng mục đích và cách thể hiện thì không.

Và lời khuyên là hãy bắt đầu khám phá các kiểu domain-specific vì mục đích phát triển phần mềm chất lượng.