Dart มีคุณสมบัติที่มีประโยชน์สำหรับโปรแกรมเมอร์เว็บหรือไม่?


33

http://www.dartlang.org/

ฉันตรวจสอบเว็บไซต์อย่างรวดเร็วและอยากรู้อยากเห็น มีข้อดีของการใช้ Dart หรือไม่? มันเป็นเพียงการแทนที่สำหรับ JavaScript?

ดูเหมือน Java ที่ง่ายกว่า การเขียนภาษา C # ในที่ทำงานค่อนข้างมากภาษารู้สึกเหมือนกับที่ฉันคุ้นเคยดังนั้นการเรียนรู้ไวยากรณ์จึงดูเหมือนเป็นเรื่องง่ายที่จะเรียนรู้ มีใครมีความคิดเห็นหรือประสบการณ์เกี่ยวกับภาษาบ้างไหม?

(เทียบกับ CoffeeScript (= ฉันไม่ได้ทำไวยากรณ์ Ruby) ไวยากรณ์นั้นดูคุ้นเคยสำหรับฉัน)


18
ความคิดเห็นของ Doug Crockford กำลังสนุก: "ดังนั้นฉันคิดมานานแล้ว ... ถ้าฉันสามารถใช้กระดาษสะอาดและเขียนภาษาใหม่ที่ยังคงรักษาความดีของ Javascript เอาไว้ ... ฉันคงไม่เกิดขึ้น กับอะไรก็ได้เช่น Dart "
MebAlone

2
@MebAlone Ho-ho-ho วิธีที่ชาญฉลาด ช่างเป็นรถที่ Crockford เป็นใคร Wisecracks มากกว่าภูมิปัญญา
funkybro

11
@MebAlone นักออกแบบภาษา Dart ไม่ได้พยายามหาภาษาใหม่ที่ยังคงความดีของจาวาสคริปต์เอาไว้ พวกเขาพยายามคิดภาษาเบราว์เซอร์ที่เน้นการใช้ภาษาเป็นหลัก
MarkJ

1
อะไรIs there any advantages of using Dart?หมายถึง? เปรียบเหนือสิ่งและวัดวิธี ? มีหลายภาษาที่รวบรวมไปยัง JavaScript ส่วนใหญ่ทำสิ่งที่ดีกว่า Dart บางคนทำสิ่งที่ดีกว่าดาร์ท และตัวอย่างเช่นถ้าคุณทำ C # ดังนั้นScriptSharpอาจน่าสนใจสำหรับคุณ ในขณะที่ทุกภาษารวบรวม JavaScript มันจะไม่ไกลจากตัวเลือกแรกของฉันสำหรับคุณมันจะนำเสนอการเปลี่ยนแปลงง่ายมากอาจแม้แต่อนุญาตให้พอร์ตรหัสที่มีอยู่อย่างเจ็บปวด
back2dos

1
@MebAlone Douglas เป็นความขัดแย้งเล็กน้อย นักพัฒนาบ่นไม่ยอมรับความคิดใหม่ แต่บอกว่าโผไม่ดีในปี 2012 เมื่อมันเพิ่งเปิดตัว 2 วันที่ผ่านมา พวกเขาประกาศออกมาเมื่อ 2 ปีก่อน เช่นเดียวกับโผที่พูดถึงบางสิ่งที่ดักลาสไม่พึงพอใจใน JS (ไม่มีฟังก์ชั่นคอนสตรัคเตอร์ที่มีต้นแบบ "Loose hanging") ในขณะที่รักษาสิ่งที่เขาชอบ (เช่นปิด) ในการนำเสนอหลายครั้งฉันได้เห็นต้นแบบการสรรเสริญจากนั้นวิจารณ์ไวยากรณ์ของฟังก์ชันตัวสร้าง (เขาพูดถูก) จากนั้น "แก้ปัญหา" มันแสดงรูปแบบโมดูลที่ไม่สนใจการมีอยู่ของต้นแบบอย่างสมบูรณ์
HMR

คำตอบ:


65

ขอบคุณสำหรับคำถามของคุณ! ข้อจำกัดความรับผิดชอบเต็มรูปแบบฉันทำงานกับทีม Dart

อาจเป็นประโยชน์ที่ดีที่สุดที่ Dart มีในวันนี้คือคุ้นเคยกับ C #, Java, C ++ และผู้พัฒนา JavaScript ส่วนใหญ่ นักพัฒนาหลายคนมีชุดของความคาดหวังรอบภาษาของพวกเขา (OO ตามคลาสขอบเขตคำศัพท์ไวยากรณ์ที่คุ้นเคย) และเครื่องมือของพวกเขา (การทำให้โค้ดเสร็จสิ้นการสร้างใหม่การนำทางโค้ด

นี่คือสิ่งที่ฉันชอบเกี่ยวกับภาษา:

  1. ประเภทคงที่ตัวเลือก เมื่อฉันสร้างต้นแบบหรือเขียนสคริปต์เล็ก ๆ ฉันไม่ได้ใช้ประเภทสแตติกมากมาย ฉันไม่ต้องการ 'em และฉันไม่ต้องการจมอยู่กับพิธี อย่างไรก็ตามสคริปต์เหล่านั้นบางส่วนมีการพัฒนาเป็นโปรแกรมที่ใหญ่ขึ้น ในฐานะที่เป็นสเกลสคริปต์ฉันมักจะต้องการคลาสและคำอธิบายประกอบประเภทคงที่

  2. ไร้เดียงสาจนกว่าจะพิสูจน์ว่ามีความผิด โผพยายามอย่างหนักเพื่อลดสถานการณ์ที่ทำให้เกิดข้อผิดพลาดในการคอมไพล์ เงื่อนไขมากมายใน Dart คือคำเตือนซึ่งไม่ทำให้โปรแกรมของคุณหยุดทำงาน ทำไม? เพื่อให้สอดคล้องกับรูปแบบการพัฒนาเว็บไซต์จำเป็นที่จะต้องให้นักพัฒนาสามารถลองใช้โค้ดโหลดจำนวนเยี่ยมชมและดูว่าเกิดอะไรขึ้น นักพัฒนาไม่ควรต้องพิสูจน์ก่อนว่าโปรแกรมทั้งหมดถูกต้องก่อนที่จะทดสอบมุมของโค้ด

  3. ขอบเขตคำศัพท์ มันยอดเยี่ยมมากถ้าคุณไม่คุ้นเคย พูดง่ายๆคือการมองเห็นตัวแปรและแม้แต่สิ่งนี้ก็ถูกกำหนดโดยโครงสร้างของโปรแกรม นี่เป็นการกำจัดคลาสของ puzzlers ในการเขียนโปรแกรมเว็บแบบดั้งเดิม ไม่จำเป็นต้องฟังก์ชั่นใหม่ที่จะให้ผูกนี้กับสิ่งที่คุณคิดหรือคาดหวัง

  4. เรียนจริงอบเป็นภาษา ชัดเจนว่านักพัฒนาส่วนใหญ่ต้องการทำงานในชั้นเรียนเนื่องจากกรอบการพัฒนาเว็บส่วนใหญ่เสนอวิธีแก้ปัญหา อย่างไรก็ตาม "คลาส" จากกรอบงาน A ไม่สามารถทำงานร่วมกับกรอบงาน B ได้ในการพัฒนาเว็บแบบดั้งเดิม โผใช้คลาสอย่างเป็นธรรมชาติ

  5. ฟังก์ชั่นระดับสูงสุด ส่วนหนึ่งที่เจ็บปวดของ Java คือทุกอย่างจะต้องมีการเรียน นี่เป็นสิ่งประดิษฐ์เล็กน้อยโดยเฉพาะเมื่อคุณต้องการกำหนดฟังก์ชั่นยูทิลิตี้บางอย่าง ใน Dart คุณสามารถกำหนดฟังก์ชั่นที่ระดับบนสุดนอกคลาสใดก็ได้ สิ่งนี้ทำให้องค์ประกอบห้องสมุดรู้สึกเป็นธรรมชาติมากขึ้น

  6. คลาสมีอินเทอร์เฟซโดยนัย การกำจัดอินเทอร์เฟซที่ชัดเจนช่วยให้ภาษาง่ายขึ้น ไม่จำเป็นต้องกำหนด IDuck ทุกที่อีกต่อไปสิ่งที่คุณต้องมีคือ Duck class เนื่องจากทุกคลาสมีอินเทอร์เฟซโดยปริยายคุณสามารถสร้างMockDuck implements Duck

  7. ตัวสร้างชื่อ คุณสามารถตั้งชื่อคอนสตรัคเตอร์ซึ่งช่วยให้อ่านได้ง่าย ตัวอย่างเช่น:var duck = new Duck.fromJson(someJsonString)

  8. รับเหมาก่อสร้างโรงงาน รูปแบบของโรงงานค่อนข้างธรรมดาและเป็นเรื่องดีที่ได้เห็นการพูดภาษานี้ คอนสตรัคเตอร์โรงงานสามารถส่งคืนซิงเกิลตันวัตถุจากแคชหรือวัตถุประเภทย่อย

  9. ไอโซเลท ไปเป็นวันของการแบ่งปันสถานะที่ไม่แน่นอนระหว่างกระทู้ (เทคนิคการเกิดข้อผิดพลาดได้ง่าย) Dart isolate เป็นฮีปหน่วยความจำที่แยกได้ซึ่งสามารถทำงานในกระบวนการหรือเธรดแยกกัน แยกการสื่อสารโดยการส่งข้อความผ่านพอร์ต แยกการทำงานใน Dart VM และสามารถรวบรวมกับผู้ปฏิบัติงานเว็บในแอป HTML5

  10. โผรวบรวมไปยัง JavaScript นี่เป็นสิ่งสำคัญอย่างยิ่งเนื่องจาก JavaScript เป็นภาษากลางของเว็บ แอพโผลควรใช้กับเว็บที่ทันสมัย

  11. เครื่องมือที่แข็งแกร่ง โครงการโผยังจัดส่งโปรแกรมแก้ไข คุณจะพบโค้ดที่สมบูรณ์การรีแฟคเตอร์การแก้ไขด่วนการนำทางโค้ดการดีบักและอื่น ๆ นอกจากนี้ IntelliJ ยังมีปลั๊กอิน Dart

  12. ห้องสมุด คุณสามารถจัดระเบียบรหัส Dart เข้าในไลบรารีเพื่อให้การกำหนดชื่อได้ง่ายขึ้นและสามารถนำกลับมาใช้ใหม่ได้ รหัสของคุณสามารถนำเข้าห้องสมุดและห้องสมุดสามารถส่งออกได้อีกครั้ง

  13. การแก้ไขสตริง นี่เป็นเพียงคุณลักษณะที่ดีทำให้ง่ายต่อการเขียนสตริง:var msg = "Hello $friend!";

  14. noSuchMethodnoSuchMethod()โผเป็นภาษาแบบไดนามิกและคุณสามารถจัดการกับสายวิธีการโดยพลการ

  15. generics ความสามารถในการพูดว่า "นี่คือรายการแอปเปิ้ล" ให้ข้อมูลเพิ่มเติมกับเครื่องมือของคุณเพื่อช่วยคุณและตรวจจับข้อผิดพลาดที่อาจเกิดขึ้นก่อน อย่างไรก็ตามโชคดีที่ข้อมูลทั่วไปของ Dart นั้นง่ายกว่าสิ่งที่คุณคุ้นเคย

  16. ผู้ประกอบการมากไป เรียนโผสามารถกำหนดพฤติกรรมสำหรับผู้ประกอบการเหมือนหรือ+ ตัวอย่างเช่นคุณสามารถเขียนโค้ดเช่น-new Point(1,1) + new Point(2,2)

ต้องบอกว่าทุกอย่างนั้นมีอีกหลายไลบรารี JavaScript อยู่ที่นั่น

โดยส่วนตัวผมเชื่อว่ามีหลายภาษาบนเว็บ หากแอปนั้นยอดเยี่ยมและทำงานในเบราว์เซอร์รุ่นใหม่ส่วนใหญ่ฉันไม่สนใจภาษาที่เขียนไว้ตราบใดที่คุณผู้พัฒนามีความสุขมีประสิทธิผลและเปิดตัวบนเว็บ เกิดอะไรขึ้น! :)


ภาษาโปรแกรมสมัยใหม่จำนวนมาก (Ruby, Scala, Python) รวมถึงกลไกการสืบทอดหลายประเภทและนี่มาใน JDK8 มีการวางแผนสำหรับ Dart หรือไม่
MebAlone

4
+1 ในจุด # 1 - การพิมพ์แบบไดนามิกค่อนข้างเพียงพอสำหรับสคริปต์ขนาดเล็ก (เช่น "การตรวจสอบความถูกต้องของฟอร์ม" - ระดับ) มีอะไรมากมายนอกเหนือจากนั้นและฉันพบว่าเครือข่ายความปลอดภัยของการพิมพ์แบบคงที่ขาดไม่ได้
funkybro

2
@MebAlone ฉันคาดว่าเราจะเห็นมิกซ์อินมาที่ Dart ในอนาคตอันใกล้
เซทแลดด์

ไม่ได้พูดถึง Snap-shot ที่น่าแปลกใจ - IMO เป็นหนึ่งในคุณสมบัติที่ดีที่สุดของ Dart
mythz

@mythz ฉันไม่ได้พูดถึงสแน็ปช็อตเพราะยังไม่ได้ใช้งานเลย แต่ใช่พวกเขาเจ๋ง!
เซทแลดด์

11

การเขียน C # ในที่ทำงานค่อนข้างมากภาษารู้สึกเหมือนกับที่ฉันคุ้นเคย

นั่นคือประเด็นหนึ่งเกี่ยวกับ Dart Javascript ถือว่าเป็นภาษาที่น่าอึดอัดใจและมีสำนวนทั่วไปอยู่เล็กน้อย ในภาษาอย่าง Java มักจะเป็นวิธีธรรมชาติในการแก้ไขปัญหา ตัวอย่างเช่นหากคุณเก็บสินค้าคงคลังของตารางใน Java หรือ C # คุณจะสร้างตารางเรียน

Javascript ไม่มีคลาสคุณอาจต้องการใช้ต้นแบบ แต่พวกเขารู้สึกอึดอัดใจและไม่มีโครงสร้างที่แข็งแกร่งและเครื่องมือการห่อหุ้ม (อย่างน้อยก็ไม่ต้องเลิกโดยเด็ดขาด) การสืบทอดองค์ประกอบและอื่น ๆ นั้นน่าอึดอัดใจกับต้นแบบ Javascript นั่นเป็นเหตุผลที่คนส่วนใหญ่ใช้แผนที่แฮชธรรมดาเพื่อเก็บข้อมูล หรือพวกเขาใช้ libs บุคคลที่สามเช่นต้นแบบที่ให้ประสบการณ์แบบคลาส

ดังนั้นความสะดวกสบายจึงเป็นเรื่องหนึ่งโครงสร้างอื่น ๆ Javascript ไม่ได้ขยายขนาดเนื่องจากไม่มีวิธีมาตรฐานในการจัดโครงสร้างแอปขนาดใหญ่ อย่างไรก็ตามในปัจจุบัน libs บุคคลที่สามดังกล่าวกำลังเป็นที่นิยมมาก (เช่น backbone.js)

โผเป็นสิ่งที่ต้องแก้ มีไว้เพื่ออำนวยความสะดวกแก่คุณอย่างเต็มที่ของ Java และยิ่งไปกว่านั้นมันไม่มีคุณสมบัติ JS ที่น่าอึดอัดใจเหล่านี้ (ส่วนใหญ่เกี่ยวข้องกับการพิมพ์ที่อ่อนแอ)

ดังนั้นคำตอบคือใช่: คลาส, การสืบทอด, ... : "OOP ดั้งเดิม" (webapps ส่วนใหญ่ในโลกแห่งความจริง JS นั้นใช้การโทรกลับของ jQuery ที่เข้าหาเป็นโครงสร้างหลัก) และมันมีรูปแบบของการพิมพ์แบบคงที่ซึ่งไม่ใช่จุดขายหลัก

BTW: คุณอาจต้องการอ่าน Google mailing "ภายใน" ลงวันที่ 2010: อนาคตของ Javascript

Javascript มีข้อบกพร่องพื้นฐานที่ไม่สามารถแก้ไขได้โดยการพัฒนาภาษา เราจะใช้กลยุทธ์สองง่ามสำหรับอนาคตของ Javascript ... พัฒนาภาษาใหม่ (เรียกว่า Dash) ที่มีวัตถุประสงค์เพื่อรักษาธรรมชาติของ Javascript แต่มีโปรไฟล์ประสิทธิภาพที่ดีขึ้นและคล้อยตามเครื่องมือสำหรับโครงการขนาดใหญ่ .. .


5
ไม่ใช่ทุกคนที่คิดว่า Javascript "เป็นภาษาที่น่าอึดอัดใจ" มักจะมีวิธีธรรมชาติในการแก้ไขปัญหา บ่อยครั้งที่มันต้องการเทคนิค (การเขียนโปรแกรมการทำงาน, การใช้งานเกินพิกัด, มิกซ์อิน, การเขียนโปรแกรมทั่วไป) ที่ Java ไม่รองรับ การสืบทอดการจัดวาง ฯลฯ ไม่ได้เกิดขึ้นกับต้นแบบ Javascript มันแตกต่างจาก Java และ C # แต่คล้ายกับ Ruby, LUA และ Perl
วินไคลน์

1
อืม ... ครั้งแรกที่ฉันได้ยินอะไรที่ดีเกี่ยวกับต้นแบบ แต่ในทางใดที่คุณเห็น JS ตัวต้นแบบคล้ายกับ Ruby
ฟิลิป

1
คุณต้องออกจากโลก Java บ่อยขึ้น ดู Ruby metaprogramming ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) และคุณจะเห็นว่าการแก้ไขชื่อสมาชิก Ruby นั้นคล้ายกับ (แต่ IMO ซับซ้อนกว่า) การแก้ไขชื่อสมาชิก Javascript
kevin cline

jQuery ไม่ว่าจะอยู่ในรูปแบบหรือรูปแบบใดก็ตามจะส่งเสริมการโทรกลับได้มากกว่า DOM API (ซึ่งมันจะล้อมรอบ) หรือหลักของ JS เองหรือ Dart จะมี ต้นแบบเป็นกลไกการสืบทอดที่ทำให้เราสามารถทำสิ่งต่าง ๆ ในชั้นเรียนไม่ได้ เปรียบเทียบคลาสกับตัวสร้างฟังก์ชันซึ่งแค็ปซูลอินสแตนซ์ภายใน vars ทำได้ดีไม่ใช่ต้นแบบ ไม่ใช่ว่าคนที่มีความสามารถระดับปานกลางถั่ว / ผู้ส่ง - setter - สแปมสแปม Java หรือ C # dev มีความคิดที่น้อยที่สุดของสิ่งที่ encapsulation เป็นสิ่งที่ดีหรือ Google dev โดยเฉลี่ยมีความคิดน้อยของวิธีการเขียน JavaScript
Erik Reppen

@ErikReppen: หากคุณใช้ jQuery สำหรับการจัดการ DOM โดยเฉพาะคุณสามารถเขียนโค้ดที่แทบจะไม่ต้องการการเรียกกลับใด ๆ ในกรณีที่คุณรวมเข้ากับกรอบอื่น ๆ เช่น backbone.js การเชื่อมโยงเหตุการณ์กับ jQuery สนับสนุนการเรียกกลับ (ไม่ระบุชื่อ) อย่างมาก backbone.js มีวิธีการที่มีโครงสร้างมากขึ้น IMHO
Philip

5

สำหรับฉันแล้วมันให้โอกาสฉันจัดโครงสร้างโค้ดของฉันดีกว่า JavaScript ที่มีขอบเขตและคลาส

มันคล้ายกับ Java และ JavaScript และด้วย Dart editor ฉันมีการปรับตัวให้ใกล้เคียงกับศูนย์ ฉันเริ่มเขียนโค้ดทันที

var ws = new [Moz]WebSocketต้องตอบสนองเบราว์เซอร์ที่แตกต่างกันเป็นที่น่ารำคาญ โผคอมไพล์รหัส JavaScript ที่เข้ากันได้กับเบราว์เซอร์ยอดนิยม

ความท้าทายของฉันคือการเชื่อมต่อกับรหัส JavaScript ฉันจะหาวิธีรอบ ๆ แต่จะดีกว่าถ้ามันเป็นส่วนหนึ่งของ Dart


เห็นด้วย @Abiola, Dart ต้องการ JavaScript ที่ทำงานร่วมกันได้ดีขึ้น มันเป็นเรดาร์มากฉันรอคอยสิ่งที่ทีมจะทำ
เซทแลดด์

0

วิธี Java / C # มีอคติอย่างมากในการทำให้ JS ล้มเหลวตั้งแต่เริ่มต้นเว็บ 2.0 นั่นเป็นเพราะความแตกต่างของการประดิษฐ์ (หรือจริง & จำเป็นมาก) ระหว่างภาษาฝั่งไคลเอ็นต์และภาษาฝั่งเซิร์ฟเวอร์ ฉันคิดว่านี่เป็นสิ่งที่ภาษาฝั่งเซิร์ฟเวอร์ยังคงอยู่ใน 'การควบคุม' ของโดเมนปัญหาหลักของเว็บแอปและแยกแยะรหัสที่ร้ายแรงน้อยกว่า (รหัส UI) จากรหัสธุรกิจ (ฝั่งเซิร์ฟเวอร์) Java ฉันคิดว่าชอบที่จะยังคงเป็นเคอร์เนลฝั่งเซิร์ฟเวอร์เพราะมันหายไปจากสงคราม GUI กับแอปเพล็ตส่วนใหญ่มาจาก Flash และ HTML 5 ตอนนี้คุณมี RedTamarin โครงการ NodeJS-esque AS3 ยิ่งทำให้อนาคตของพล็อต .

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.