Làm thế nào để bạn sử dụng vịt gõ trong javascript mà không luôn luôn kiểm tra các thuộc tính và phương thức?
Đơn giản: không luôn luôn kiểm tra các thuộc tính và phương thức.
Trong Ruby, những gì bạn đang gọi được gọi là "gõ gà". Trong một ngôn ngữ gõ vịt năng động, bạn chỉ cần tin tưởng rằng người gọi chuyển cho bạn một đối tượng phù hợp. Đó là công việc của người gọi để tôn vinh hợp đồng của anh ấy.
Tôi biết javascript sử dụng kiểu gõ vịt và lúc đầu tôi nghĩ rằng điều này sẽ làm cho tính đa hình dễ dàng so với các ngôn ngữ được gõ mạnh như C #.
Bạn đang nhầm lẫn nhiều trục trực giao của việc gõ ở đây. Có bốn trục gõ trực giao:
- Khi nào : kiểu gõ động (kiểu không được biết và được kiểm tra cho đến khi chạy) so với kiểu gõ tĩnh (kiểu được biết và được kiểm tra trước khi chạy)
- Cái gì : gõ vịt (các loại dựa trên hành vi ), gõ cấu trúc (các loại dựa trên cấu trúc ) và gõ danh nghĩa (các loại dựa trên tên )
- Bạn có thể nhìn thấy chúng? gõ rõ ràng (các kiểu phải được chú thích rõ ràng) so với gõ ngầm (các kiểu được suy ra)
- gõ mạnh so với gõ yếu - bạn có thể nhận thấy rằng tôi đã không đặt cho cái này một tiêu đề hấp dẫn cũng như một lời giải thích trong ngoặc đơn, đó là vì không giống như bảy thuật ngữ ở trên, mỗi thuật ngữ có một định nghĩa chính xác được chấp nhận phổ biến, hai thuật ngữ này có khoảng một tá định nghĩa mơ hồ được sử dụng rộng rãi mâu thuẫn với nhau; lý tưởng nhất là bạn nên tránh các thuật ngữ này hoàn toàn và nếu bạn phải sử dụng chúng, hãy xác định chính xác chúng trước
Vì bạn đã đề cập đến C #: nó chủ yếu được gõ tĩnh, nhưng hỗ trợ gõ động thông qua kiểu dynamic
, nó chủ yếu được gõ, nhưng các kiểu ẩn danh sử dụng kiểu cấu trúc và các kiểu cú pháp (như cú pháp hiểu truy vấn LINQ) có thể được tranh luận là vịt -typed hoặc gõ theo cấu trúc, phần lớn được gõ rõ ràng nhưng hỗ trợ nhập ngầm cho các đối số kiểu chung và biến cục bộ (mặc dù trường hợp biến cục bộ khá lạ so với hầu hết các ngôn ngữ khác, vì bạn không thể bỏ kiểu này, thay vào đó bạn phải cung cấp cho nó một loại giả rõ ràngvar
, nói cách khác, nếu bạn muốn một kiểu ẩn, bạn phải nói rõ ràng như vậy). Việc C # được gõ mạnh hay yếu là vấn đề định nghĩa hai thuật ngữ bạn sử dụng, tuy nhiên, lưu ý rằng có thể có nhiều lỗi loại thời gian chạy trong C #, đặc biệt là do hiệp phương sai không an toàn.
Tôi biết tôi chỉ có thể không kiểm tra, nhưng theo dõi các lỗi thời gian chạy javascript có thể là một cơn ác mộng vì chúng không luôn xảy ra khi lỗi thực sự xảy ra trong mã.
Gỡ lỗi không phải là một kỹ năng dễ học. Tuy nhiên, có các kỹ thuật để làm cho việc gỡ lỗi dễ dàng hơn, ví dụ Saff Squeeze là một kỹ thuật được mô tả bởi Kent Beck, sử dụng các bài kiểm tra và tái cấu trúc để gỡ lỗi:
Kiểm tra hồi quy và Saff Bóp
Kent Beck, Học viện Three Rivers
Tóm tắt: Để cách ly một cách hiệu quả một khiếm khuyết, hãy bắt đầu với một bài kiểm tra ở cấp độ hệ thống và tiến hành nội tuyến và cắt tỉa cho đến khi bạn có bài kiểm tra nhỏ nhất có thể chứng minh được lỗi đó.