4 điểm bởi ffdd270 2020-07-30 | 3 bình luận | Chia sẻ qua WhatsApp

Từ Ruby 3, Type Annotation tương tự TypeScript sẽ được bổ sung. Đây là bài viết giải thích Matz và đội ngũ Ruby Committer đã cân nhắc điều gì khi đưa kiểu tĩnh vào Ruby, và họ đã sử dụng giải pháp nào. Dưới đây là phần tóm tắt.

Trong Ruby 3, một ngôn ngữ mới là RBS được thêm vào và được cung cấp cùng với Ruby 3.

RBS là ngôn ngữ dành cho Type Annotation của Ruby.

  • Bối cảnh ra đời

(untype được dịch là kiểu động.)

Kiểu tĩnh và kiểu động là cuộc đối đầu lâu đời trong các ngôn ngữ lập trình. Kiểu động cho phép phát triển nhanh, nhưng gặp vấn đề khi mở rộng đội ngũ và codebase; còn kiểu tĩnh phù hợp với quy mô lớn nhưng kém linh hoạt hơn.

Quảng cáo

Để lấy ưu điểm của cả hai phía, C# có tính năng dynamic trì hoãn việc kiểm tra kiểu đến runtime; PHP và Python có tùy chọn kiểm tra kiểu. TypeScript thì chọn một ngôn ngữ kiểu dành cho một ngôn ngữ vốn không khai báo kiểu.

Ruby cũng đã tạo ra ngôn ngữ mô tả kiểu chuẩn là RBS để tận dụng ưu điểm của cả hai cách tiếp cận.

  • RBS trông như thế nào?

RBS tương tự như .h của C/C++/ObjC hoặc .d.ts của TypeScript. Ưu điểm của cách này là có thể tận dụng lợi ích của việc kiểm tra kiểu mà không cần sửa các file Ruby hiện có.

Trong RBS, thuộc tính của lớp và kiểu của phương thức được định nghĩa. RBS là ngôn ngữ mô tả cấu trúc của chương trình Ruby, đồng thời cung cấp cho lập trình viên cái nhìn tổng quan về mã nguồn cùng các lớp và phương thức đã được định nghĩa. Ưu điểm lớn nhất là có thể kiểm tra định nghĩa kiểu cho cả phần triển khai lẫn quá trình thực thi.

  • Các tính năng cốt lõi của RBS

Việc phát triển hệ thống kiểu cho một ngôn ngữ động khác với các ngôn ngữ đã được gán kiểu tĩnh từ đầu. Hiện đã có rất nhiều mã Ruby ngoài thực tế, vì vậy hệ thống kiểu cho Ruby phải hỗ trợ được càng nhiều mã càng tốt.

Quảng cáo

Vì thế, bài viết giới thiệu hai đặc tính quan trọng của mã Ruby và cách RBS giải quyết chúng.

  • Duck Typing

Duck typing là kỹ thuật viết mã khi không biết chính xác kiểu, nhưng giả định rằng một số phương thức nhất định sẽ tồn tại. Để hỗ trợ kỹ thuật này, RBS đã đưa vào interface, cho phép kiểm tra xem đối số có các phương thức đó hay không.

  • Tính không đồng nhất

Đây là một mẫu mã khác cho phép biểu thức có thể mang giá trị của nhiều kiểu khác nhau. Mẫu này cũng phổ biến trong Ruby, và RBS hỗ trợ điều đó thông qua union type và method overload.

  • Lập trình Ruby cùng với kiểu
Quảng cáo

Giới thiệu những lợi ích chính của RBS.

  • Có thể tìm ra nhiều bug hơn.

  • An toàn với nil

  • Tích hợp IDE tốt hơn.

  • Hướng dẫn cho Duck Typing

3 bình luận

 
heycalmdown 2020-07-30

https://crystal-lang.org - Tôi khá tò mò Crystal sẽ có mối quan hệ với RBS như thế nào. (Crystal là một ngôn ngữ biên dịch mượn cú pháp của Ruby.)

 
ffdd270 2020-07-30

; m; bài viết cứ liên tục bị cắt mất ở giữa nên tôi đã gỡ toàn bộ phần code. Xin lỗi vì vô tình thành spam yu..

 
xguru 2020-07-30

Ôi, có vẻ là do ký tự `