Przejrzałem stronę bardzo krótko i zainteresowałem się. Czy są jakieś zalety używania Dart? Czy to tylko zamiennik JavaScript?
Wygląda na prostszą Javę. Pisząc dość dużo C # w pracy, język wydaje się bardzo podobny do tego, do czego jestem przyzwyczajony, więc nauka składni wydaje się dziecinnie prosta. Czy ktoś ma jakieś opinie lub doświadczenia z językiem?
(W porównaniu do CoffeeScript (= nie używam składni Ruby) składnia wygląda mi bardziej znajomo).
javascript
dart
marko
źródło
źródło
Is there any advantages of using Dart?
znaczy Przewaga nad czym i mierzona w jaki sposób ? Istnieje wiele języków, które kompilują się w JavaScript. Większość z nich robi coś znacznie lepszego niż Dart. Niektóre robią większość rzeczy lepiej niż Dart. I na przykład, jeśli wykonasz C #, ScriptSharp może być dla Ciebie interesujący. Chociaż wśród wszystkich języków kompilujących się w JavaScript nie byłby to mój pierwszy wybór, dla ciebie byłby to bardzo łatwy sposób przejścia, prawdopodobnie nawet umożliwiający bezbolesne przeniesienie istniejącego kodu.Odpowiedzi:
Dziękuję za twoje pytanie! Pełne wyłączenie odpowiedzialności, pracuję w zespole Dart.
Prawdopodobnie najlepszą zaletą, jaką Dart ma dzisiaj, jest znajomość języków C #, Java, C ++ i większości programistów JavaScript. Wielu programistów ma zestaw oczekiwań dotyczących swojego języka (oparty na klasach OO, zakres leksykalny, znana składnia) i swoich narzędzi (uzupełnianie kodu, refaktoryzacja, nawigacja kodu, debugowanie), które Dart zamierza spełnić i przekroczyć.
Oto kilka rzeczy, które lubię w języku:
Opcjonalne typy statyczne. Kiedy prototypuję lub po prostu piszę małe skrypty, nie używam ton typów statycznych. Po prostu ich nie potrzebuję i nie chcę dać się wciągnąć w ceremonię. Jednak niektóre z tych skryptów ewoluują w większe programy. W miarę skalowania skryptów chcę raczej klas i adnotacji typu statycznego.
Uznaje się za niewinnego do czasu udowodnienia winy. Dart stara się zminimalizować sytuacje, które powodują błąd podczas kompilacji. Wiele warunków w Dart to ostrzeżenia, które nie zatrzymują działania programu. Czemu? Zgodnie z modą tworzenia stron internetowych, programiści muszą koniecznie wypróbować trochę kodu, nacisnąć przycisk przeładowania i zobaczyć, co się stanie. Deweloper nie powinien najpierw musieć udowodnić, że cały program jest poprawny, zanim przetestuje tylko fragment kodu.
Zakres leksykalny. To jest niesamowite, jeśli nie jesteś do tego przyzwyczajony. Mówiąc najprościej, widoczność zmiennych, a nawet to , jest określona przez strukturę programu. Eliminuje to klasę łamigłówek w tradycyjnym programowaniu internetowym. Nie trzeba ponownie wiązać funkcji, aby zachować to, co myślisz lub oczekujesz.
Prawdziwe klasy upieczone w języku. Jest oczywiste, że większość programistów chce pracować w klasach, ponieważ większość platform programistycznych oferuje rozwiązanie. Jednak „klasa” z frameworka A nie jest kompatybilna z frameworkiem B w tradycyjnym tworzeniu stron internetowych. Dart używa klas w naturalny sposób.
Funkcje najwyższego poziomu. Jedną z bolesnych części Javy jest to, że wszystko należy umieścić w klasie. Jest to nieco sztuczne, szczególnie gdy chcesz zdefiniować kilka funkcji narzędziowych. W Dart możesz definiować funkcje na najwyższym poziomie, poza dowolną klasą. To sprawia, że skład biblioteki wydaje się bardziej naturalny.
Klasy mają niejawne interfejsy. Eliminacja jawnych interfejsów upraszcza język. Nie musisz już wszędzie definiować IDucka, wystarczy teraz klasowa Kaczka. Ponieważ każda klasa ma niejawny interfejs, możesz utworzyć
MockDuck implements Duck
Nazwani konstruktory. Możesz nadać konstruktorom nazwy, co naprawdę poprawia czytelność. Na przykład:
var duck = new Duck.fromJson(someJsonString)
Konstruktorzy fabryczni. Wzorzec fabryczny jest dość powszechny i miło jest widzieć, że jest upieczony w języku. Konstruktor fabryki może zwrócić singleton, obiekt z pamięci podręcznej lub obiekt podtypu.
Izoluje Dawno minęły czasy udostępniania stanu zmiennego między wątkami (technika podatna na błędy). Izolat Dart jest izolowaną stertą pamięci, która może działać w osobnym procesie lub wątku. Izoluje komunikację, wysyłając wiadomości przez porty. Izoluje pracę w Dart VM i może się kompilować z pracownikami sieci Web w aplikacjach HTML5.
Dart kompiluje do JavaScript. Jest to niezwykle ważne, ponieważ JavaScript jest lingua franca w sieci. Aplikacje Dart powinny działać w nowoczesnej sieci.
Mocne oprzyrządowanie. Projekt Dart dostarcza również edytor. Znajdziesz uzupełnianie kodu, refaktoryzację, szybkie poprawki, nawigację kodu, debugowanie i wiele innych. Ponadto IntelliJ ma wtyczkę Dart.
Biblioteki. Możesz porządkować kod Dart w bibliotekach, aby ułatwić sobie rozmieszczanie nazw i ponowne użycie. Twój kod może importować bibliotekę, a biblioteki mogą ponownie eksportować.
Interpolacja ciągów. To po prostu fajna funkcja, która ułatwia komponowanie łańcucha:
var msg = "Hello $friend!";
noSuchMethod Dart jest dynamicznym językiem i możesz obsługiwać dowolne wywołania metod za pomocą
noSuchMethod()
.Generics. Powiedzenie „to jest lista jabłek” daje twoim narzędziom znacznie więcej informacji, które pomogą ci wcześnie wykryć potencjalne błędy. Na szczęście, ogólne leki Dart są prostsze niż to, do czego prawdopodobnie jesteś przyzwyczajony.
Przeciążenie operatora. Klasy Dart mogą definiować zachowanie operatorów takich jak
+
lub-
. Na przykład możesz napisać kod podobny donew Point(1,1) + new Point(2,2)
.Mimo to istnieje wiele innych bibliotek JavaScript.
Osobiście uważam, że w Internecie jest miejsce dla wielu języków. Jeśli aplikacja jest niesamowita i działa w większości nowoczesnych przeglądarek, nie dbam o to, w jakim języku jest napisana. Tak długo, jak Ty, programista, jesteś szczęśliwy, produktywny i uruchamiasz się w Internecie, to znaczy co ma znaczenie! :)
źródło
To jeden punkt dotyczący Dart. JavaScript jest uważany za niezręczny język z kilkoma ogólnymi idiomami. W języku takim jak Java często istnieje naturalny sposób na rozwiązanie problemu. Na przykład, jeśli prowadzisz spis tabel, w Javie lub C # utworzysz tabelę klas.
JavaScript nie ma klas, możesz chcieć używać prototypów, ale czują się niezręcznie i nie zapewniają tak silnej struktury i narzędzi do enkapsulacji. (Przynajmniej nie robiąc żadnych wyczynów). Dziedzictwo, kompozycja itp. Jest niewygodne w przypadku prototypów Javascript. Dlatego większość ludzi używa zwykłych map skrótów do przechowywania danych. Lub używają bibliotek innych firm, takich jak prototyp, co zapewnia klasowe wrażenia.
Tak więc wygoda to jedno, a struktura drugie. JavaScript po prostu nie skaluje się dobrze, ponieważ nie ma standardowego sposobu strukturyzacji dużych aplikacji. Jednak obecnie takie liby stron trzecich stają się bardzo popularne. (Jak backbone.js)
Dart jest rozwiązaniem tego problemu. Jest tam, aby zapewnić ci strukturalną wygodę Java, a ponadto nie ma wszystkich tych niezręcznych funkcji JS. (Większość z nich dotyczy słabego pisania).
Tak więc odpowiedź brzmi: tak, klasy, dziedziczenie, ...: „tradycyjny OOP”. (Większość webowych aplikacji JS w prawdziwym świecie używa opartej na wywołaniu zwrotnym jQuery jako głównej struktury.) I ma luźną formę pisania statycznego, ale to nie jest kluczowa zaleta.
BTW: możesz przeczytać tę „wewnętrzną” korespondencję Google z 2010 roku: Future of Javascript
źródło
Daje mi to szansę na lepszą strukturę kodu niż JavaScript z zakresem i klasami.
Jest podobny do Java i JavaScript, a dzięki edytorowi Dart miałem prawie zerową adaptację. Zacząłem kodować od razu.
var ws = new [Moz]WebSocket
irytujące są różne przeglądarki. Dart kompiluje do kodu JavaScript kompatybilnego z popularnymi przeglądarkami.Moim wyzwaniem jest głównie połączenie z kodem JavaScript. W jakiś sposób znajduję sposoby na obejście tego, ale byłoby lepiej, gdyby był częścią Dart.
źródło
Podejście Java / C # jest zdecydowanie stronnicze w pukaniu JS od początku web 2.0. Jest tak z powodu sztucznego (lub bardzo rzeczywistego i koniecznego) rozróżnienia między językiem po stronie klienta a językiem po stronie serwera. Myślę, że jest to tak, że język po stronie serwera może pozostawać w „kontroli” nad głównymi problematycznymi domenami aplikacji internetowych i oddzielić mniej poważny kod (kod interfejsu użytkownika) od kodu biznesowego (po stronie serwera). Także Java, myślę, że uwielbia pozostać jądrem po stronie serwera, ponieważ przegrał wojnę GUI z apletami głównie z powodu Flasha i HTML 5. Teraz masz RedTamarin - projekt AS3 w stylu NodeJS nawiązujący do pluralistycznej mieszanej przyszłości ujednoliconych paradygmatów front i backend .
źródło