Liệu có bất kỳ tính năng hữu ích cho các lập trình viên web?


33

http://www.dartlang.org/

Tôi đã kiểm tra trang web rất nhanh và thấy tò mò. Có bất kỳ lợi thế của việc sử dụng phi tiêu? Nó chỉ là một sự thay thế cho JavaScript?

Có vẻ như Java đơn giản hơn. Viết khá nhiều C # tại nơi làm việc, ngôn ngữ cảm thấy rất giống với những gì tôi đã từng sử dụng, vì vậy việc học cú pháp trông giống như một cách dễ dàng để học. Có ai có ý kiến ​​hay kinh nghiệm với ngôn ngữ này không?

(So ​​với CoffeeScript (= Tôi không thực hiện cú pháp Ruby) cú pháp có vẻ quen thuộc hơn với tôi).


18
Nhận xét của Doug Crockford thật thú vị: "Vì vậy, tôi đã suy nghĩ rất lâu ... nếu tôi có thể lấy một tờ giấy sạch và viết một ngôn ngữ mới giữ được tất cả sự tốt đẹp của Javascript ... Tôi sẽ không nghĩ ra với bất cứ thứ gì như phi tiêu. "
MebAlone

2
@MebAlone Ho-ho-ho, thật sâu sắc. Thật là một wag mà Crockford là. Trí tuệ hơn trí tuệ.
funkybro

11
@MebAlone Các nhà thiết kế ngôn ngữ Dart không cố gắng đưa ra một ngôn ngữ mới mà vẫn giữ được tất cả sự tốt đẹp của JavaScript. Họ đã cố gắng đưa ra một ngôn ngữ ngôn ngữ hướng đối tượng dựa trên lớp cho trình duyệt.
MarkJ

1
Is there any advantages of using Dart?nghĩa là gì? Lợi thế hơn những gì và đo lường như thế nào ? Có một loạt các ngôn ngữ biên dịch thành JavaScript. Hầu hết trong số họ làm một cái gì đó tốt hơn nhiều so với Dart. Một số làm hầu hết mọi thứ tốt hơn so với Dart. Và ví dụ, nếu bạn làm C #, thì ScriptSharp có thể thú vị với bạn. Mặc dù trong số tất cả các ngôn ngữ biên dịch sang JavaScript, nó sẽ không phải là lựa chọn đầu tiên của tôi, đối với bạn, nó sẽ thể hiện một quá trình chuyển đổi rất dễ dàng, thậm chí có thể cho phép chuyển mã không tồn tại.
back2dos

1
@MebAlone Douglas có một chút xung đột. Các nhà phát triển phàn nàn không chấp nhận các ý tưởng mới nhưng nói rằng phi tiêu rất tệ trong năm 2012 khi nó chỉ mới được phát hành 2 ngày trước. Họ đã thông báo rằng nó sẽ đến 2 năm trước. Như phi tiêu giải quyết một số điều mà Douglas không hài lòng trong JS (không có hàm xây dựng nào với nguyên mẫu "lỏng lẻo"). Trong khi giữ những thứ anh ấy thích (như đóng cửa). Trong một số bài thuyết trình, tôi đã thấy anh ấy khen ngợi nguyên mẫu, sau đó chỉ trích cú pháp của các hàm tạo (anh ấy đúng). Sau đó, "giải quyết" nó hiển thị một mô-đun mô-đun hoàn toàn bỏ qua sự tồn tại của nguyên mẫu.
HMR

Câu trả lời:


65

Cảm ơn câu hỏi của bạn! Từ chối trách nhiệm đầy đủ, tôi làm việc trong nhóm Dart.

Có lẽ lợi thế tốt nhất mà Dart có được ngày nay là nó quen thuộc với C #, Java, C ++ và hầu hết các nhà phát triển JavaScript. Nhiều nhà phát triển có một loạt các kỳ vọng xung quanh ngôn ngữ của họ (OO dựa trên lớp, phạm vi từ vựng, cú pháp quen thuộc) và các công cụ của họ (hoàn thành mã, tái cấu trúc, điều hướng mã, gỡ lỗi) mà Dart nhắm đến và vượt quá.

Đây là một số điều mà tôi thích về ngôn ngữ:

  1. Các loại tĩnh tùy chọn. Khi tôi tạo mẫu hoặc chỉ đơn giản là viết các tập lệnh nhỏ, tôi không sử dụng rất nhiều kiểu tĩnh. Tôi chỉ không cần họ, và tôi không muốn bị sa lầy với buổi lễ. Tuy nhiên, một số trong những kịch bản phát triển thành các chương trình lớn hơn. Theo quy mô kịch bản, tôi có xu hướng muốn các lớp và chú thích kiểu tĩnh.

  2. Vô tội cho đến khi được chứng minh có tội. Dart cố gắng hết sức để giảm thiểu các tình huống dẫn đến lỗi thời gian biên dịch. Nhiều điều kiện trong Dart là cảnh báo, điều đó không ngăn chương trình của bạn chạy. Tại sao? Để phù hợp với thời trang phát triển web, bắt buộc phải cho phép các nhà phát triển thử một chút mã, nhấn tải lại và xem điều gì sẽ xảy ra. Trước tiên, nhà phát triển không cần phải chứng minh toàn bộ chương trình là chính xác trước khi chỉ kiểm tra một góc của mã.

  3. Phạm vi từ điển. Điều này thật tuyệt vời, nếu bạn không quen với nó. Nói một cách đơn giản, khả năng hiển thị của các biến và thậm chí điều này , được xác định bởi cấu trúc chương trình. Điều này giúp loại bỏ một lớp các câu đố trong lập trình web truyền thống. Không cần phải liên kết lại các chức năng để giữ điều này với những gì bạn nghĩ hoặc mong đợi.

  4. Các lớp học thực sự nướng vào ngôn ngữ. Rõ ràng hầu hết các nhà phát triển muốn làm việc trong các lớp, vì hầu hết các khung phát triển web cung cấp một giải pháp. Tuy nhiên, "lớp" từ khung A không tương thích với khung B, trong phát triển web truyền thống. Phi tiêu sử dụng các lớp học một cách tự nhiên.

  5. Chức năng cấp cao nhất. Một điều đau đớn của Java là mọi thứ phải được đưa vào một lớp. Đây là một chút giả tạo, đặc biệt là khi bạn muốn xác định một vài chức năng tiện ích. Trong Dart, bạn có thể định nghĩa các hàm ở cấp cao nhất, bên ngoài bất kỳ lớp nào. Điều này làm cho thành phần thư viện cảm thấy tự nhiên hơn.

  6. Các lớp học có giao diện ngầm. Việc loại bỏ các giao diện rõ ràng đơn giản hóa ngôn ngữ. Không cần phải xác định IDuck ở mọi nơi, tất cả những gì bạn cần bây giờ là một lớp Vịt. Bởi vì mỗi lớp có một giao diện ngầm, bạn có thể tạo mộtMockDuck implements Duck

  7. Nhà xây dựng được đặt tên. Bạn có thể cung cấp cho các nhà xây dựng tên, mà thực sự giúp với khả năng đọc. Ví dụ:var duck = new Duck.fromJson(someJsonString)

  8. Xây dựng nhà máy. Mô hình nhà máy là khá phổ biến, và thật tuyệt khi thấy điều này được đưa vào ngôn ngữ. Một nhà xây dựng nhà máy có thể trả về một singleton, một đối tượng từ bộ đệm hoặc một đối tượng của kiểu con.

  9. Cô lập. Đã qua rồi những ngày chia sẻ trạng thái có thể thay đổi giữa các luồng (một kỹ thuật dễ bị lỗi). Một cô lập Dart là một đống bộ nhớ bị cô lập, có thể chạy trong một tiến trình hoặc luồng riêng biệt. Cô lập giao tiếp bằng cách gửi tin nhắn qua cổng. Cô lập hoạt động trong máy ảo và có thể biên dịch cho nhân viên web trong ứng dụng HTML5.

  10. Dart biên dịch thành JavaScript. Điều này cực kỳ quan trọng, vì JavaScript là ngôn ngữ chung của web. Các ứng dụng phi tiêu nên chạy trên web hiện đại.

  11. Dụng cụ mạnh mẽ. Dự án Dart cũng gửi một biên tập viên. Bạn sẽ tìm thấy hoàn thành mã, tái cấu trúc, sửa lỗi nhanh, điều hướng mã, gỡ lỗi và hơn thế nữa. Ngoài ra, IntelliJ có một plugin Dart.

  12. Thư viện. Bạn có thể sắp xếp mã Dart vào các thư viện, để dễ dàng đặt tên và tái sử dụng. Mã của bạn có thể nhập thư viện và thư viện có thể xuất lại.

  13. Nội suy chuỗi. Đây chỉ là một tính năng hay, giúp bạn dễ dàng soạn một chuỗi:var msg = "Hello $friend!";

  14. noSuchMethod Dart là một ngôn ngữ động và bạn có thể xử lý các cuộc gọi phương thức tùy ý với noSuchMethod().

  15. Thế hệ. Có thể nói "đây là một danh sách táo" cung cấp cho các công cụ của bạn nhiều thông tin hơn để giúp bạn và sớm phát hiện ra các lỗi tiềm ẩn. Tuy nhiên, may mắn thay, thuốc generic của Dart đơn giản hơn những gì bạn có thể đã từng sử dụng.

  16. Vận hành quá tải. Các lớp phi tiêu có thể định nghĩa hành vi cho các toán tử như +hoặc -. Ví dụ, bạn có thể viết mã như thế nào new Point(1,1) + new Point(2,2).

Như đã nói, có rất nhiều thư viện JavaScript ngoài kia.

Cá nhân, tôi tin rằng có nhiều chỗ trên web cho nhiều ngôn ngữ. Nếu ứng dụng tuyệt vời và chạy trên phần lớn các trình duyệt hiện đại, tôi không quan tâm đến việc nó được viết bằng ngôn ngữ nào. Miễn là bạn, nhà phát triển, vui vẻ, làm việc hiệu quả và khởi chạy trên web, đó là có chuyện gì vậy! :)


Nhiều ngôn ngữ lập trình hiện đại (Ruby, Scala, Python) bao gồm một số loại cơ chế thừa kế và điều này sẽ có trong JDK8. Đây có phải là kế hoạch cho Dart?
MebAlone

4
+1 ở điểm số 1 - gõ động khá phù hợp với các tập lệnh nhỏ (nghĩa là "xác thực mẫu" -level). Bất cứ điều gì vượt quá điều đó và tôi thấy mạng lưới an toàn của việc gõ tĩnh là không thể thiếu.
funkybro

2
@MebAlone Tôi hy vọng chúng ta sẽ thấy mixins sẽ đến với Dart trong tương lai gần.
Seth Ladd

Ngạc nhiên Snap-shaping đã không được đề cập - IMO một trong những tính năng tốt nhất của Dart.
huyền thoại

@mythz Tôi chưa đề cập đến ảnh chụp nhanh vì chúng chưa được triển khai. Nhưng vâng, họ thật tuyệt!
Seth Ladd

11

Viết khá nhiều C # tại nơi làm việc, ngôn ngữ cảm thấy rất giống với những gì tôi đã từng

Đó là một điểm về Dart. Javascript được coi là một ngôn ngữ khó xử với một vài thành ngữ chung. Trong một ngôn ngữ như Java thường có một cách tự nhiên để tiếp cận một vấn đề. Chẳng hạn, nếu bạn giữ một bảng kiểm kê của bảng, trong Java hoặc C #, bạn sẽ tạo Bảng lớp.

Javascript không có lớp, bạn có thể muốn sử dụng các nguyên mẫu nhưng họ cảm thấy lúng túng và không cung cấp các công cụ đóng gói và cấu trúc mạnh như vậy. (Ít nhất là không phải không thực hiện bất kỳ pha nguy hiểm nào.) Kế thừa, sáng tác, v.v. thật khó xử với các nguyên mẫu Javascript. Đó là lý do tại sao hầu hết mọi người sử dụng bản đồ băm đơn giản để lưu trữ dữ liệu. Hoặc họ sử dụng libs của bên thứ 3 như nguyên mẫu mang lại cho bạn trải nghiệm giống như lớp học.

Vì vậy, thuận tiện là một điều, cấu trúc khác. Javascript chỉ không có quy mô tốt vì không có cách tiêu chuẩn để cấu trúc các ứng dụng quy mô lớn. Tuy nhiên hiện tại libs bên thứ 3 như vậy đang trở nên thực sự phổ biến. (Giống như backbone.js)

Phi tiêu là một cái gì đó để giải quyết điều đó. Nó ở đó để cung cấp cho bạn sự tiện lợi theo quy tắc của Java và hơn nữa, nó không có tất cả các tính năng JS khó xử này. (Hầu hết chúng liên quan đến việc gõ yếu.)

Vì vậy, câu trả lời là có: các lớp, thừa kế, ...: "OOP truyền thống". (Hầu hết các ứng dụng web JS trong thế giới thực đều sử dụng phương thức gọi lại của jQuery được tiếp cận như cấu trúc chính.) Và nó có dạng gõ tĩnh, tuy nhiên đó không phải là điểm bán hàng chính.

BTW: bạn có thể muốn đọc thư Google "nội bộ" này ngày 2010: Tương lai của Javascript

Javascript có những lỗi cơ bản không thể sửa được chỉ bằng cách phát triển ngôn ngữ. Chúng tôi sẽ áp dụng chiến lược hai hướng cho tương lai của Javascript ... Phát triển ngôn ngữ mới (được gọi là Dash) nhằm duy trì tính chất động của Javascript nhưng có cấu hình hiệu suất tốt hơn và có thể sử dụng để thực hiện các dự án lớn .. .


5
Không phải ai cũng coi Javascript là "ngôn ngữ khó xử". Thường có một cách tự nhiên để tiếp cận một vấn đề. Tất cả quá thường xuyên, nó đòi hỏi các kỹ thuật (lập trình chức năng, nạp chồng toán tử, mixins, lập trình chung) không được Java hỗ trợ. Kế thừa, thành phần, v.v. không khó xử với các nguyên mẫu Javascript. Nó chỉ khác với Java và C #, nhưng tương tự như Ruby, LUA và Perl.
kevin cline

1
Mmm ... lần đầu tiên tôi nghe thấy bất cứ điều gì tốt về nguyên mẫu. Nhưng theo cách nào bạn thấy các nguyên mẫu JS tương tự như Ruby?
Philip

1
bạn cần phải ra khỏi thế giới Java thường xuyên hơn. Look tại Ruby Lập trình meta ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) và bạn sẽ thấy rằng độ phân giải tên thành viên Ruby là tương tự (nhưng IMO nhiều phức tạp hơn) độ phân giải tên thành viên Javascript.
kevin cline

jQuery không có hình dạng hoặc hình thức nào thúc đẩy cách tiếp cận gọi lại nhiều hơn API DOM (mà về cơ bản nó bao bọc) hoặc chính bản thân JS làm hoặc Dart sẽ có. Nguyên mẫu là cơ chế kế thừa cho phép chúng ta làm những thứ mà lớp không thể. So sánh các lớp với các hàm xây dựng hàm, trong đó đóng gói các vars thể hiện bên trong là tốt, không phải là nguyên mẫu. Không phải là Java / C / devter-setter spam cấp độ tài năng trung bình của bạn có ý tưởng nhỏ nhất về việc đóng gói là tốt cho hoặc nhà phát triển trung bình của Google có ý tưởng nhỏ nhất về cách viết JavaScript.
Erik Reppen

@ErikReppen: nếu bạn sử dụng jQuery dành riêng cho thao tác DOM, bạn có thể viết mã mà không cần bất kỳ cuộc gọi lại nào, trong trường hợp bạn kết hợp nó với các khung công tác khác như backbone.js. Các sự kiện ràng buộc với jQuery rất nhiều khuyến khích các cuộc gọi lại (ẩn danh). backbone.js có IMHO một cách tiếp cận có cấu trúc hơn.
Philip

5

Đối với tôi, nó cho tôi cơ hội để cấu trúc mã của tôi tốt hơn JavaScript với phạm vi và các lớp.

Nó tương tự như Java và JavaScript và với trình soạn thảo Dart, tôi gần như không thích ứng. Tôi bắt đầu viết mã ngay lập tức.

var ws = new [Moz]WebSocketphải phục vụ cho các trình duyệt khác nhau là khó chịu. Dart biên dịch thành mã JavaScript tương thích với các trình duyệt phổ biến.

Thách thức của tôi chủ yếu là giao tiếp với mã JavaScript. Tôi bằng cách nào đó tìm mọi cách xung quanh nó nhưng sẽ tốt hơn nếu đó là một phần của Dart.


Đồng ý, @Abiola, Dart cần có sự can thiệp JavaScript tốt hơn. Nó rất nhiều trên radar, tôi đang mong chờ những gì nhóm nghiên cứu đưa ra.
Seth Ladd

0

Cách tiếp cận Java / C # chắc chắn là sai lệch khi gõ JS kể từ khi bắt đầu web 2.0 Đó là do sự khác biệt giả tạo (hoặc rất thực tế & cần thiết) giữa ngôn ngữ phía máy khách và ngôn ngữ phía máy chủ. Tôi nghĩ rằng đây là ngôn ngữ phía máy chủ có thể vẫn nằm trong 'quyền kiểm soát' các miền vấn đề cốt lõi của ứng dụng web và để phân định mã ít nghiêm trọng hơn (mã ui) từ mã doanh nghiệp (phía máy chủ). Ngoài ra Java Tôi nghĩ rằng vẫn thích duy trì một hạt nhân phía máy chủ vì nó đã thua cuộc chiến GUI với các applet do phần lớn là Flash và HTML 5. Bây giờ bạn có RedTamarin một dự án AS3 NodeJS-esque ám chỉ một tương lai đa nguyên của mặt trận thống nhất và phụ trợ .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.