Tôi có xu hướng suy nghĩ về các tính năng:
Cú pháp:
C-Dựa hoặc những gì có bạn. Java có cú pháp dựa trên C. Tôi đặc biệt khuyên bạn nên thử một cái gì đó như Python hoặc Ruby để thoát khỏi cú pháp và suy nghĩ nhiều hơn về các nguyên tắc cơ bản về cách một ngôn ngữ nhất định hoạt động. Tôi cho rằng không có cú pháp nào cần phải cồng kềnh hơn dựa trên C và không có vấn đề gì khi xây dựng các khối xung quanh khoảng trắng.
Biên dịch so với giải thích w. Quá trình xây dựng so với phiên dịch / Bảng điều khiển:
Tôi có rất ít sự quen thuộc với thời gian biên dịch so với các mối quan tâm về môi trường thời gian chạy nhưng tôi nhận thấy rằng có rất nhiều mối quan tâm mà tôi hiếm khi nghĩ đến.
Tương tự như vậy, có rất nhiều ngôn ngữ được giải thích vẫn có một quá trình biên dịch để chạy bên trong một máy ảo như Java. Bạn vẫn phải xây dựng lại để thấy những thay đổi đối với mọi thứ.
Và sau đó có JavaScript và Python mà bạn có thể thực thi nhanh chóng, ra lệnh bằng lệnh trong bảng điều khiển trong môi trường trực tiếp. Tất cả ba có thể dẫn đến cách viết mã rất khác nhau.
Gõ động so với nghiêm ngặt:
Tôi có xu hướng xem hai là sự đánh đổi thiết kế. Khi bạn ở cấp độ thấp hơn nhiều và hiệu suất là rất quan trọng, gõ tĩnh có rất nhiều ý nghĩa. Tôi chưa bao giờ hiểu khái niệm này là "an toàn" hơn so với người khác bằng cách nào đó nhưng tôi đã nghĩ ra một ngôn ngữ rất dẻo / năng động, nơi bạn chỉ cần học cách hệ thống gõ hoạt động và những gì mong đợi, về cơ bản. Loại shenanigans hiếm khi là mối quan tâm của tôi trong JS. Trong một số cách, tính linh hoạt có thể làm cho mọi thứ trở nên mạnh mẽ hơn, mặc dù phải thừa nhận rằng một cú chạm mạnh mẽ hơn cho một nhà phát triển cấp độ cao hơn nếu bạn không biết về một số lỗ hổng trong ngôn ngữ.
Phạm vi cấp độ khối so với phạm vi chức năng so với ?:
Block-Level là phổ biến nhất (mọi thứ giữa {} trong hầu hết các ngôn ngữ cú pháp dựa trên c). Phạm vi JavaScript được xây dựng xung quanh các hàm (cũng được sử dụng để xây dựng các đối tượng sao cho các đối tượng cũng hiệu quả). Ngoài ra còn có một sự thay đổi lớn trong loại quyền truy cập mà bạn có từ phạm vi bên trong đến phạm vi bên ngoài. Tôi không quen thuộc với các kế hoạch phạm vi khác nhưng tôi chắc chắn chúng tồn tại.
OOP cổ điển so với Prototypal OOP vs Recent-OOP (cấu trúc trong C?) So với Non-OOP:
Ngay cả trong OOP dựa trên lớp cũng có rất nhiều chỗ để thay đổi. Cho dù bạn có thể thực hiện nhiều kế thừa (ew, vượt quá, ew), xác định giao diện, v.v ...
Trong JavaScript, chúng ta có một loại OOP nguyên mẫu hỗn hợp, trong đó các đối tượng đơn giản hơn nhiều, có khả năng biến đổi cao, nhưng chúng ta vẫn có khả năng tách giao diện khỏi các mối quan tâm nội bộ, mà IMO, là khía cạnh quan trọng của việc đóng gói.
Vấn đề của OOP là thực sự có rất nhiều thứ bạn có thể rút ra mà về cơ bản là định hướng OOP mà không phải là kỹ thuật OOP. Tất nhiên có những người theo chủ nghĩa thuần túy nhưng vào cuối ngày, Mẫu thiết kế là về việc đạt được một số trừu tượng nhất định hoạt động tốt trong các tình huống nhất định. Đừng quá nhanh để cho rằng các ý tưởng từ một ngôn ngữ dựa trên OOP không được sử dụng trong một cái gì đó theo định hướng thủ tục hơn. Và tôi không nói về JavaScript. Nó hoàn toàn không bị giới hạn bởi phiên bản ngớ ngẩn của mô hình OOP dựa trên nguyên mẫu.
Chức năng hạng nhất:
Không có những thứ này trong một ngôn ngữ là một điều khó khăn để tôi từ bỏ. Bạn có thể truyền các hàm xung quanh giống như chúng là dữ liệu để sử dụng trong các bối cảnh khác. Điều này làm cho các kế hoạch xử lý sự kiện đặc biệt rất dễ thực hiện nhưng nó cũng giúp dễ dàng điều chỉnh ngôn ngữ để hoạt động theo cách bạn muốn. Đó là, hơn bất cứ điều gì tôi nghi ngờ, điều đã tạo nên thành công cho JavaScript, mặc dù nó đã được thiết kế trong hai tuần và nhận được cú pháp gần đúng của Java như là một kế hoạch tiếp thị.
Đóng cửa:
Tôi không chắc cuộc tranh luận diễn ra ở đâu cho Java, nhưng tôi biết rất nhiều nhà phát triển Java đã kêu gọi cho tính năng này một hoặc hai năm trước. Trong ngôn ngữ không đóng, khi một hàm đóng, bất cứ thứ gì có thể tham chiếu nội dung nào đó từ bên trong hàm đó sẽ không thể truy cập được vì đó là rác được thu thập. Trong một bao đóng, bối cảnh thực thi bị ràng buộc sao cho nếu bạn có thể tham chiếu các thứ bên trong hàm đóng đó từ một phạm vi khác như trong một đối tượng hoặc hàm được trả về, về cơ bản bạn sẽ nhận được các vars đó khi chúng đóng. Nó giống như làm kẹt chân bạn trong cánh cửa của bộ sưu tập rác, mặc dù tôi nghi ngờ nó được triển khai giống như các bản sao của những chiếc bình được làm thành lọ địa phương của thực thể tham chiếu.
Cứng nhắc / nghiêm ngặt / an toàn so với việc mang đến cho bạn tất cả những sợi dây bạn muốn:
Các nhà phát triển JS và nhà phát triển Java có xu hướng hoàn toàn không hiểu nhau và tôi nghĩ nó có liên quan nhiều đến hai ngôn ngữ nằm ở hai phía gần đối diện của phổ thiết kế đặc biệt này. Tôi không muốn bạn bảo vệ tôi khỏi bản thân hoặc khỏi các nhà phát triển khác trong đội của tôi. Tôi muốn làm nhiều hơn nữa với rất ít mã và thực hiện tất cả theo những cách rất khác nhau (nhưng phù hợp với một tên miền nhất định) tùy thuộc vào tình huống. Hoàn toàn có sự đánh đổi cho cả hai và rất nhiều ngôn ngữ có xu hướng giảm nhiều hơn ở giữa.