Чи є в Dart якісь корисні функції для веб-програмістів?


33

http://www.dartlang.org/

Я перевірив сайт дуже коротко і отримав цікавість. Чи є якісь переваги використання Dart? Це лише заміна JavaScript?

Це схоже на простішу Java. Пишучи на роботі досить багато C #, мова дуже схожа на те, до чого я звикла, тому засвоєння синтаксису схоже на легкий вітер. Хтось має думку чи досвід роботи з мовою?

(У порівнянні з CoffeeScript (= я не роблю синтаксис Ruby) синтаксис мені здається більш звичним).


18
Коментар Дуга Крокфорда кумедний: "Отже, я давно думав ... якби я міг взяти чистий аркуш паперу і написати нову мову, що зберігає всі доброти Javascript ... я б не придумав з чим-небудь схожим на Дарт ».
MebAlone

2
@MebAlone Хо-хо-хо, як проникливий. Що за віск, що це Крокфорд. Мудреці над мудрістю.
funkybro

11
@MebAlone Дизайнери мови Dart не намагалися придумати нову мову, яка зберігає всі блага JavaScript. Вони намагалися придумати браузерну об'єктно-орієнтовану мову для браузера.
MarkJ

1
Що Is there any advantages of using Dart?означає? Перевага над чим і вимірюється як ? Існує цілий ряд мов, які збираються в JavaScript. Більшість з них роблять щось набагато краще, ніж Дарт. Деякі роблять більшість справ краще, ніж Дарт. Наприклад, якщо ви робите C #, то ScriptSharp може бути цікавим для вас. Хоча серед усіх мов, що складаються на JavaScript, це був би далеко не першим моїм вибором, для вас це буде дуже легким переходом, можливо, навіть безболісно переносить існуючий код.
back2dos

1
@MebAlone Дуглас трохи конфліктує. Скарги розробників не приймають нових ідей, але сказати, що дартс поганий у 2012 році, коли він вийшов лише 2 дні тому. Вони оголосили, що приїдуть 2 роки тому. Як і дротик вирішує деякі речі, з якими Дуглас незадоволений у JS (відсутні конструкторські функції з прототипом "вільно висить"). Зберігаючи речі, які йому подобаються (як закриття). У кількох презентаціях я бачив, як він хвалить прототип, потім критикує синтаксис конструкторських функцій (він правий). Потім "вирішує" його, показуючи модульний шаблон, який повністю ігнорує існування прототипу.
HMR

Відповіді:


65

Дякуємо за запитання! Повна відмова від відповідальності, я працюю над командою Dart.

Мабуть, найкраща перевага, яку сьогодні має Dart, це те, що вона знайома C #, Java, C ++ та більшості розробників JavaScript. Багато розробників мають набір очікувань щодо своєї мови (клас на базі класу, лексична сфера, знайомий синтаксис) та їхніх інструментів (завершення коду, рефакторинг, навігація по коду, налагодження), які Dart прагне досягти та перевищити.

Ось деякі речі, які мені подобаються у мові:

  1. Необов’язкові статичні типи. Коли я створюю прототипи або просто пишу невеликі сценарії, я не використовую багато статичних типів. Мені просто не потрібні їх, і я не хочу заплутатися з церемонією. Однак деякі з цих сценаріїв перетворюються на більші програми. У міру масштабування сценаріїв, я, як правило, хочу класувати примітки та статичні типи.

  2. Невинний, поки не доведеться винні. Dart дуже намагається мінімізувати ситуації, які призводять до помилки часу компіляції. Багато умов у Dart - це попередження, які не зупиняють роботу програми. Чому? У відповідності з модою веб-розробок, обов'язково потрібно дозволити розробникам спробувати трохи коду, натиснути перезавантажити і подивитися, що відбувається. Розробнику не слід спочатку доводити, що вся програма є правильною, перш ніж тестувати кут коду.

  3. Лексичний обсяг. Це приголомшливо, якщо ви до цього не звикли. Простіше кажучи, видимість змінних і навіть це визначається структурою програми. Це виключає клас загадок у традиційному веб-програмуванні. Не потрібно повторно прив’язувати функції, щоб дотримати це до того, що ви думаєте чи очікуєте.

  4. Справжні заняття запекли на мові. Зрозуміло, що більшість розробників хочуть працювати на заняттях, оскільки більшість рамок веб-розробок пропонують рішення. Однак, "клас" з фреймворку A не сумісний з рамкою B в традиційній веб-розробці. Дарт використовує класи природним чином.

  5. Функції верхнього рівня. Болісною частиною Java є те, що все треба класти в клас. Це трохи штучно, особливо коли потрібно визначити кілька функцій утиліти. У Dart ви можете визначати функції на верхньому рівні, поза будь-яким класом. Це робить композицію бібліотеки більш природною.

  6. Класи мають неявні інтерфейси. Усунення явних інтерфейсів спрощує мову. Більше не потрібно визначати IDuck скрізь, все, що вам зараз потрібно, - це клас Дак. Оскільки кожен клас має неявний інтерфейс, ви можете створитиMockDuck implements Duck

  7. Названі конструктори. Ви можете надати конструкторам імена, що справді допомагає в читанні. Наприклад:var duck = new Duck.fromJson(someJsonString)

  8. Заводські конструктори. Заводський зразок досить поширений, і приємно бачити, що це запекло на мові. Заводський конструктор може повернути сингл, об'єкт із кешу або об’єкт підтипу.

  9. Ізоляти. Пройшли дні обміну змінним станом між потоками (техніка, схильна до помилок). Ізолят Dart - це відокремлена купа пам'яті, здатна запускатися в окремому процесі або потоці. Ізоляти спілкуються, надсилаючи повідомлення через порти. Ізоляти працюють у Dart VM і можуть збиратись для веб-працівників у програмах HTML5.

  10. Dart компілює в JavaScript. Це вкрай важливо, оскільки JavaScript є лінгва-франкою в Інтернеті. Додаток Dart має працювати у сучасному Інтернеті.

  11. Сильний інструментарій. Проект Dart також надсилає редактора. Ви знайдете завершення коду, рефакторинг, швидкі виправлення, навігацію по коду, налагодження та багато іншого. Також IntelliJ має плагін Dart.

  12. Бібліотеки. Ви можете організувати код Dart в бібліотеки, щоб полегшити простір імен та повторно використовувати. Ваш код може імпортувати бібліотеку, а бібліотеки можуть реекспортувати.

  13. Строкова інтерполяція. Це просто приємна функція, яка дозволяє легко складати рядок:var msg = "Hello $friend!";

  14. noSuchMethod Dart - це динамічна мова, з якою ви можете обробляти довільні виклики методів noSuchMethod().

  15. Джерела. Уміння сказати "це список яблук" дає вашим інструментам набагато більше інформації, щоб допомогти вам і рано зафіксувати потенційні помилки. На щастя, генеричні дані Дарта є більш простими, ніж те, що ви, мабуть, звикли.

  16. Перевантаження оператора. Класи Dart можуть визначати поведінку для операторів, таких як +або -. Наприклад, ви можете написати код типу new Point(1,1) + new Point(2,2).

Сказавши все це, є набагато більше бібліотек JavaScript.

Особисто я вважаю, що в Інтернеті є місце для багатьох мов. Якщо додаток приголомшливо, і він працює у більшості сучасних браузерів, мені все одно, на якій мові він написаний. Поки ви, розробник, щасливі, продуктивні та запускаєтеся в Інтернеті, це що важливо! :)


Багато сучасних мов програмування (Ruby, Scala, Python) містять якийсь механізм множинного успадкування, і це відбувається в JDK8. Планується це для Дартса?
MebAlone

4
+1 у пункті №1 - динамічне введення тексту є цілком адекватним для невеликих сценаріїв (тобто рівень "перевірка форми"). Все, що набагато перевищує це, і я вважаю незахищеною мережу статичного набору тексту незамінною.
funkybro

2
@MebAlone Я очікую, що найближчим часом у Дарт приїдуть мікіни.
Сет Ладд

Про здивований знімок не згадували - IMO - одна з найкращих особливостей Дарта.
mythz

@mythz Я не згадував знімки, оскільки вони ще не реалізовані. Але так, вони круті!
Сет Ладд

11

Пишучи на роботі досить багато C #, мова дуже схожа на те, до чого я звикла

Це один момент про Дарт. Javascript вважається незграбною мовою з кількома загальними ідіомами. У такій мові, як Java, часто існує природний спосіб вирішити проблему. Наприклад, якщо ви зберігаєте інвентар таблиці, в Java або C # ви створите таблицю класів.

У Javascript немає класів, можливо, ви хочете використовувати прототипи, але вони відчувають себе незграбно і не забезпечують такої міцної структури та інструментів інкапсуляції. (Принаймні, не роблячи жодних трюків.) Наслідування, композиція тощо незручно з прототипами Javascript. Ось чому більшість людей використовують звичайні хеш-карти для зберігання даних. Або вони використовують сторонні вкладки на зразок прототипу, що дає вам досвід класу.

Тож зручність - це одне, структуруйте інше. Javascript просто не масштабується, оскільки не існує стандартного способу структурування масштабних додатків. Однак в даний час такі сторонні губки стають дійсно популярними. (Як backbone.js)

Дарт - це щось вирішити. Це там, щоб надати вам конструктивну зручність Java, і більше того, вона не має всіх цих незручних функцій JS. (Більшість з них стосується слабкого набору тексту.)

Тож відповідь "так": класи, успадкування, ...: "традиційний ООП". (Більшість веб-сайтів реального світу JS там використовують зворотний виклик jQuery, який наближається до основної структури.) І він має вільну форму статичного набору тексту, однак це не ключовий момент продажу.

BTW: ви можете прочитати цю "внутрішню" розсилку Google від 2010 року: Майбутнє Javascript

У Javascript є основні недоліки, які неможливо виправити лише розвиваючи мову. Ми приймемо двосторонню стратегію майбутнього Javascript ... Розробити нову мову (називається Dash), яка має на меті підтримувати динамічний характер Javascript, але мати кращий профіль продуктивності та піддаватися інструментам для великих проектів .. .


5
Не всі вважають Javascript "незграбною мовою". Часто існує природний спосіб підійти до проблеми. Занадто часто для цього потрібні методи (функціональне програмування, перевантаження оператора, міксин, загальне програмування), які не підтримуються Java. Спадщина, композиція тощо не є незручною з прототипами Javascript. Він просто відрізняється від Java та C #, але схожий на Ruby, LUA та Perl.
Кевін Клайн

1
Ммм ... вперше я чую щось хороше про прототипи. Але яким чином ви бачите прототипи JS, схожі на Ruby?
Філіп

1
вам потрібно частіше виходити (із світу Java). Погляньте на метапрограмування Ruby ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ), і ви побачите, що роздільна здатність імені учасника Ruby схожа на (але IMO складніше, ніж).
Кевін Клайн

jQuery ні в якому разі не сприяє підходу до зворотного виклику більше, ніж API DOM (який він фактично завершує) або основний JS, як і Dart. Прототипи - це механізм успадкування, який дозволяє нам робити класи, які не можуть. Порівнюйте класи з конструкторами функцій, які просто чудово інкапсулюють внутрішні екземпляри, а не прототипи. Мало того, що ваш середній талант на рівень талантів / геттер-сетер спам Java або C # dev має найменше уявлення про те, для чого інкапсуляція хороша, або середній розробник Google має найменше уявлення про те, як написати JavaScript.
Ерік Відкрити

@ErikReppen: якщо ви використовуєте jQuery виключно для маніпуляції з DOM, ви можете писати код, який навряд чи потребує зворотних викликів, якщо ви поєднаєте його з іншими структурами, такими як backbone.js. Пов'язування подій з jQuery дуже сприяє (анонімним) зворотним викликам. backbone.js має IMHO більш структурований підхід.
Філіп

5

Для мене це дає можливість структурувати мій код краще, ніж JavaScript з областю та класами.

Це схоже на Java та JavaScript, і з редактором Dart у мене було майже нульову адаптацію. Я почав кодувати відразу.

var ws = new [Moz]WebSocketнеобхідність обслуговувати різні браузери дратує. Dart компілює код JavaScript, сумісний із популярними браузерами.

Моя проблема в основному полягає в взаємодії з кодом JavaScript. Я якось знаходжу шляхи навколо цього, але було б краще, якби це частина Дартса.


Погоджено, @Abiola, Dart потребує кращого взаємодії з JavaScript. Це дуже сильно на радарі, я з нетерпінням чекаю того, що придумає команда.
Сет Ладд

0

Підхід Java / C #, безумовно, упереджений, коли стукає JS з початку веб 2.0, це через штучну (або дуже реальну та необхідну) диференціацію між клієнтськими мовами та мовами на стороні сервера. Я думаю, що це так, що на стороні сервера мова може залишатися в «контролі» основних проблемних доменів веб-додатків і відмежовувати менш серйозний код (код ui) від бізнес-коду (на стороні сервера). Також Java, я думаю, любить залишатись серверним ядром, оскільки програла графічний інтерфейс з апплетами завдяки значною мірою Flash та HTML 5. Тепер у вас є RedTamarin проект AS3-NqueJS-esque, натякаючи на плюралістичне змішане майбутнє об'єднаних парадигм фронту та бекенда .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.