Co to jest Dart



Dart to język opracowany przez Google, który przyciąga uwagę kręgów zajmujących się aplikacjami internetowymi Pisanie aplikacji internetowej może być świetną zabawą, szczególnie na początku, kiedy doświadczasz natychmiastowej satysfakcji: zakoduj, przeładuj, powtórz. Niestety wykańczanie i utrzymywanie aplikacji internetowej nie jest takie przyjemne. JavaScript jest świetny do małych skryptów i ma wydajność do uruchamiania dużych aplikacji. Ale kiedy skrypt przekształca się w dużą aplikację internetową, debugowanie i modyfikowanie tej aplikacji może być koszmarem, zwłaszcza gdy masz duży zespół. Wpisz Dart, projekt typu open source, którego celem jest umożliwienie programistom tworzenia bardziej złożonych, wydajnych aplikacji dla nowoczesnej sieci. Używając języka Dart, możesz szybko pisać prototypy, które szybko ewoluują, a także masz dostęp do zaawansowanych narzędzi, niezawodnych bibliotek i dobrych technik inżynierii oprogramowania. Dart ma już narzędzia, takie jak Dartboard (który pozwala pisać i uruchamiać kod Dart w przeglądarce) i Dart Editor (który pozwala tworzyć, modyfikować i uruchamiać aplikacje Dart). Zestaw SDK zawiera narzędzia wiersza polecenia, takie jak kompilator Dart-to-JavaScript (który tworzy JavaScript, który można umieścić w dowolnej nowoczesnej przeglądarce) i maszynę wirtualną Dart (maszynę wirtualną, która umożliwia uruchamianie kodu Dart na serwerach). Najnowszym narzędziem, które zostanie udostępnione, jest kompilacja przeglądarki Chromium o pseudonimie Dartium, która zawiera wbudowaną maszynę wirtualną Dart. Ale fakty mogą się zmienić, a linki mogą się zepsuć. Najnowsze informacje można znaleźć w witrynie Dart

Dlaczego Google stworzyło Dart?

Chcemy, abyś mógł tworzyć świetne aplikacje internetowe. Świetne aplikacje internetowe usprawniają sieć, a kiedy działa lepiej, wszyscy wygrywają. Inżynierowie w Google od dawna myśleli o aplikacjach internetowych. Napisano kilka złożonych i szeroko używanych aplikacji internetowych na dużą skalę (np. Gmail, Google+ i Dokumenty Google), więc dobrze zna wyzwania związane z tworzeniem aplikacji internetowych. Napisano również przeglądarkę (Chrome) i silnik JavaScript (V8), więc dużo przemyśleli, jak przyspieszyć działanie aplikacji internetowych. Zasadniczo stworzyliDart, ponieważ uważali, że pomoże on wprowadzić do sieci więcej świetnych aplikacji i uważamy, że tworzenie bardziej złożonych aplikacji internetowych powinno być łatwiejsze.

Czy sieć naprawdę potrzebuje innego języka?

Twórcy aplikacji ze wszystkich platform powinni być w stanie tworzyć dla nowoczesnej sieci, ale wielu nie-endemicznych programistów internetowych ma inne oczekiwania i wymagania w stosunku do ich języka, narzędzi i platformy programistycznej niż te, które są obecnie dostępne. Uważamy, że jest miejsce na nową platformę, taką, która nie jest obciążona 15-letnim cruftem, która jest znana programistom z różnych środowisk i której struktura umożliwia obsługę większych, bardziej złożonych aplikacji, których wymagają użytkownicy. Uważamy, że JavaScript nie zniknie. W rzeczywistości Google aktywnie współpracuje z TC39 w celu ulepszenia JavaScript, a nowe funkcje już pojawiają się w V8 i Chrome. Jednak nasze zaangażowanie w ulepszanie JavaScript nie powstrzymuje nas od myślenia o innych rozwiązaniach. Na przykład Dart skorzysta z ciągłej pracy nad JavaScript, ponieważ programy Dart kompilują się do JavaScript, aby działać w całej nowoczesnej sieci. Uważamy, że Dart to fascynująca i znana platforma, która spełnia potrzeby programistów z różnych środowisk i doświadczeń, w tym endemicznych programistów internetowych. Wierzymy, że Dart wnosi świeże pomysły do programowania internetowego, a innowacje zarówno w Dart, jak i JavaScript pomogą popchnąć sieć do przodu dla programistów aplikacji i użytkowników.

Pokaż mi kod

Dość gadania, zobaczmy trochę kodu. Niezależnie od tego, czy znasz JavaScript czy Javę, kod Dart powinien wyglądać znajomo. Oto przykład prostej strony internetowej w Dart:

hi.dart:

#import('dart:html');
main() {
document.query('#status').text = 'Hi, Dart';
}
hi.html:


< h2 id="status" >< /h2 >
< script type="application/dart" src="hi.dart" >< /script >

Jeśli przeglądarka nie ma osadzonej maszyny wirtualnej Dart, możesz skompilować kod Dart do JavaScript.

->
< script type="text/javascript" src="hi.dart.js" >< /script >


Spójrzmy teraz na kod Dart, który wykorzystuje funkcje:

send(msg, to, from, [rate='First Class']) {
return '${from} said ${msg} to ${to} via ${rate}';
}
main() => print(send('hello', 'Seth', 'Bob'));
> "Bob said hello to Seth via First Class"

Składnia => używana do implementacji funkcji main() to przyjemny, kompaktowy sposób implementacji funkcji, która oblicza i zwraca pojedyncze wyrażenie. Bez => implementacja metody main() wyglądałaby następująco:

main() {
print(send('hello', 'Seth', 'Bob'));
}

W powyższej implementacji metody send () rate jest opcjonalnym parametrem z wartością domyślną. Ta metoda ilustruje również działanie interpolacji ciągów znaków ($ {var}). Oto kod Darta, który jest bardziej zorientowany obiektowo:

class Point {
Point(this.x, this.y);
distanceTo(other) {
var dx = x - other.x;
var dy = y - other.y;
return Math.sqrt(dx * dx + dy * dy);
}
var x, y;
}
main() {
var p = new Point(2, 3);
var q = new Point(3, 4);
print('distance from p to q = ${p.distanceTo(q)}');
}

Ten kod powinien wyglądać znajomo, jeśli kiedykolwiek używałeś języka opartego na klasach.

Jak mogę grać w Dart?

Najłatwiejszym sposobem wypróbowania Dart jest użycie Dartboard, sposobu na interaktywne wykonywanie kodu Dart w dowolnej nowoczesnej przeglądarce. Tarcza do rzutek jest osadzona w witrynie Dart pod adresem www.dartlang. org. Możesz także użyć Dartboard, przechodząc bezpośrednio na try.dartlang.org. Oto zdjęcie tego, co zobaczysz w tej witrynie:



Zmień kod, jak chcesz, a następnie kliknij przycisk Uruchom (w lewym górnym rogu). Zobaczysz wyniki swojego kodu w nowym obszarze poniżej:



Adres URL w prawym górnym rogu tarczy to link do kodu, który właśnie uruchomiłeś. Podobnie jak większość rzeczy związanych z Dart, Dartboard wciąż się zmienia. Aby uzyskać najnowsze informacje, zobacz samouczek dotyczący tarczy.

A może prawdziwy edytor?

Kiedy wyrośniesz z Dartboard, wypróbuj Dart Editor. Jest to edytor do pobrania dla systemów Windows, Mac i Linux, który umożliwia pisanie, modyfikowanie i uruchamianie aplikacji internetowych Dart. Dart Editor może uruchomić Twój kod Dart za pośrednictwem maszyny wirtualnej lub może skompilować go do JavaScript i uruchomić go w przeglądarce. Oto zdjęcie tego, jak obecnie wygląda Dart Editor:



Aby uruchomić dowolny program w Dart Editor, po prostu kliknij przycisk Uruchom, gdy wybrany jest dowolny element z biblioteki tego programu. Jeśli Twój program jest aplikacją internetową, Dart Editor uruchamia Dartium (Chromium z wbudowaną maszyną wirtualną Dart), aby uruchomić program. Kiedy jesteś gotowy do wysłania do produkcji, Dart Editor może skompilować go do JavaScript, dzięki czemu Twoja aplikacja będzie dostępna dla całej nowoczesnej sieci. Dart Editor ma kilka funkcji, które pomogą Ci edytować kod Dart, a wkrótce spodziewamy się więcej funkcji. Jak widać na powyższym zrzucie ekranu, Dart Editor podkreśla składnię Dart. Dart Editor obsługuje również automatyczne uzupełnianie i może szybko przenieść Cię do miejsca, w którym deklarowane są typy i inne interfejsy API. Możesz również uzyskać szybki zarys klas, metod i pól programu.

Co nowego w Dart?

Teraz, gdy jesteście już przygotowani, porozmawiajmy o języku. Nie będziemy szczegółowo omawiać funkcji i składni Dart - możesz przeczytać o tym wszystkim na www.dartlang.org - ale oto kilka z bardziej interesujących funkcji Dart. Wpisywanie opcjonalne: możesz używać typów lub nie, to zależy od Ciebie. Typy w kodzie Dart nie zmieniają sposobu wykonywania aplikacji, ale mogą pomóc programistom i narzędziom programistycznym zrozumieć Twój kod. Możesz nie zawracać sobie głowy typami podczas opracowywania prototypu, ale możesz dodać typy, gdy jesteś gotowy, aby zaangażować się w implementację. Pojawiający się wzorzec polega na dodawaniu typów do interfejsów i sygnatur metod oraz pomijaniu typów w metodach. Migawki: obecnie przeglądarki muszą przeanalizować kod źródłowy aplikacji internetowej, zanim będzie można ją uruchomić. Kod Dart może być migawkowy - cały jego stan i kod rejestrowany jest w określonym momencie - co może znacznie przyspieszyć uruchamianie. We wstępnych testach aplikacja internetowa z 54 000 wierszy kodu Dart uruchomiła się w ciągu 640 ms bez migawki. Z migawkami zaczęło się w 60 ms. Gdy program Dart działa na maszynie wirtualnej Dart, może zauważyć znaczną poprawę wydajności czasu uruchamiania dzięki migawkom. Izolaty: Dart obsługuje równoczesne wykonywanie za pomocą izolatów, o których możesz pomyśleć jako o procesie bez kosztów ogólnych. Każdy izolat ma własną pamięć i kod, na które nie ma wpływu żaden inny izolat. Jedynym sposobem, w jaki izolat może komunikować się z innym izolatem, są komunikaty. Izolacje umożliwiają pojedynczej aplikacji efektywne korzystanie z komputerów wielordzeniowych. Inne zastosowanie izolatów: uruchamianie kodu z różnych źródeł na tej samej stronie bez narażania bezpieczeństwa. Aby uzyskać więcej informacji, zobacz "Izolaty" na stronie 14 poniżej. Interfejsy z domyślnymi implementacjami: zignoruj ten, jeśli nigdy nie korzystałeś z języka, który zawiera klasy i interfejsy / protokoły. Ciągle tutaj? DOBRZE. Jeśli spojrzysz na biblioteki Dart, zauważysz, że używają one interfejsów w przypadkach, w których niektóre inne języki używałyby klas - na przykład Data i HashMap. Jest to możliwe, ponieważ interfejs Dart może mieć domyślną implementację - klasę (zwykle prywatną), która jest domyślnym sposobem tworzenia obiektów implementujących interfejs. Na przykład, mimo że Stopwatch jest interfejsem, możesz wywołać new Stopwatch (), aby uzyskać domyślną implementację stopera. Jeśli spojrzysz na dokumentację API lub kod źródłowy, zobaczysz, że domyślną implementacją Stopwatch jest klasa o nazwie StopwatchImplementation. Ogólne, ale łatwe: generyczne były już robione, ale są mylące. Dart przyjmuje nowe podejście, projektując system generyczny, który jest bardziej zrozumiały. Kompromis polega na poświęceniu odrobiny dokładności, ale uważamy, że umożliwienie programistom większej produktywności przewyższa projekt języka ivory-tower. Aby uzyskać więcej informacji, zobacz "Ogólne" na stronie 12 poniżej. Biblioteka HTML: przyjrzeliśmy się również, jak należy używać HTML DOM. (DOM jest skrótem od Document Object Model; jest to interfejs, który pozwala programowo aktualizować zawartość, strukturę i styl strony internetowej.) Tworząc natywną bibliotekę Dart (dart: html) w celu uzyskania dostępu i manipulowania DOM, stworzyliśmy elementy, atrybuty i węzły wydają się naturalne

Dlaczego Dart wygląda tak znajomo?

Nowatorski i niepowtarzalny język może być piękny, ale miałby może pięciu użytkowników. Dart jest przeznaczony do masowej adaptacji, więc musi być znajomy zarówno dla użytkowników języków skryptowych (takich jak JavaScripters), jak i użytkowników języków strukturalnych (takich jak programiści Java). Mimo to Dart ma kilka unikalnych funkcji dla języka skierowanego do głównego nurtu. Na przykład interfejsy z domyślnymi implementacjami pomagają ukryć szczegóły implementacji. Opcjonalne pisanie, kolejna nowa funkcja w sieci, powinno pomóc w jaśniejszym rozwiązaniu adnotacji dotyczących zamiarów dewelopera oraz umów dotyczących interfejsu i bibliotek.

Co znajduje się w platformie Dart?

Dart to więcej niż tylko język, to cała platforma dla współczesnych programistów internetowych. Specyfikacja języka: język Dart jest znajomy, z kilkoma nowymi funkcjami, takimi jak opcjonalne pisanie na klawiaturze i izolaty.

Biblioteki: biblioteki podstawowe zapewniają funkcje, w tym kolekcje, daty i matematykę, a także powiązania HTML, operacje we / wy po stronie serwera, takie jak gniazda, a nawet JSON.
Kompilator do JavaScript: Możesz skompilować programy Dart do JavaScript, które mogą działać w całej nowoczesnej sieci.
VM: maszyna wirtualna jest zbudowana od podstaw w celu natywnego uruchamiania kodu Dart. Maszyna wirtualna działa w wierszu poleceń dla aplikacji po stronie serwera i może być również osadzona w przeglądarkach dla aplikacji po stronie klienta.
Integracja z Chromium: maszyna wirtualna Dart została osadzona w kompilacji Chromium o pseudonimie Dartium, umożliwiając uruchamianie natywnych aplikacji Dart bez uprzedniej kompilacji do JavaScript.
Dart Editor: Ten lekki edytor, wraz z podświetlaniem składni i uzupełnianiem kodu, może uruchomić skrypt w maszynie wirtualnej lub aplikacji internetowej w Dartium. Może również skompilować Twoją aplikację internetową do JavaScript i uruchomić ją w innej przeglądarce.

Czy powinienem dziś używać Dart w mojej aplikacji?

Dart wciąż się zmienia, więc na razie nie stawiaj na to farmy. Jednak wszystko w Dart jest open source i otwarte na debatę, więc zachęcamy do wypróbowania Dart i przekazania opinii. Gdy język i biblioteki się uspokoją (w tym roku, jeśli wszystko pójdzie zgodnie z planem), spodziewamy się, że będziesz w stanie uruchamiać produkcyjne aplikacje internetowe Dart we wszystkich głównych nowoczesnych przeglądarkach.

Czy oczekujesz, że ludzie będą używać Dart?
Możesz używać Dart do tworzenia złożonych, wysokowydajnych aplikacji dla nowoczesnej sieci. Język Dart jest przeznaczony do pracy na kliencie i serwerze, co oznacza, że można go używać do implementacji kompletnej, kompleksowej aplikacji. Możesz także użyć Dart do skalowania rozwoju w miarę, jak Twój program rośnie z małego zestawu funkcji do dużej kolekcji klas. Na przykład tworzenie stron internetowych zachęca do bardzo krótkich iteracji programistycznych. Gdy udoskonalasz swój pomysł, a zakres i złożoność programu rośnie, kod prawdopodobnie będzie wymagał większej modułowości i hermetyzacji. Dart umożliwia refaktoryzację z funkcji do klas oraz od kodu bez typu do kodu wpisanego. Jeśli chodzi o wdrożenie, masz dwie opcje: kompilację do JavaScript lub użycie maszyny wirtualnej Dart. W przypadku kodu po stronie klienta kompilacja do JavaScript umożliwia uruchomienie kodu Dart w nowoczesnych przeglądarkach. Przyszła wersja Chrome będzie dostarczana z wbudowaną maszyną wirtualną Dart, umożliwiającą uruchamianie kodu Dart bezpośrednio w przeglądarce Chrome bez uprzedniej kompilacji do JavaScript.

Jak mogę skompilować do JavaScript?

Aby stworzyć czytelny dla człowieka kod JavaScript, powinieneś użyć kompilatora Frog (dostępnego w Dart SDK). Wciąż trwająca praca, Frog generuje kod JavaScript, który jest mały i wydajny. Na przykład załóżmy, że masz następujący kod Dart:

class HelloWorld {
yell() => print("hello world!!!!");
}
main() => new HelloWorld().yell();
Frog compiles that into the following JavaScript code:
// ********** Library dart:core **************
// ********** Natives dart:core **************
// ********** Code for Object **************
// ********** Code for top level **************
function print(obj) {
return _print(obj);
}
function _print(obj) {
if (typeof console == 'object') {
if (obj) obj = obj.toString();
console.log(obj);
} else {
write(obj);
write('\n');
}
}
// ********** Library dart:coreimpl **************
// ********** Code for NumImplementation **************
NumImplementation = Number;
// ********** Code for StringImplementation **************
StringImplementation = String;
// ********** Code for _Worker **************
// ********** Code for top level **************
// ********** Library helloworld **************
// ********** Code for HelloWorld **************
function HelloWorld() {
}
HelloWorld.prototype.yell = function() {
return print("hello world!!!!");
}
// ********** Code for top level **************
function main() {
return new HelloWorld().yell();
}
main();

Jak widać, kod JavaScript jest prosty. Aby pobrać kompilator Frog, pobierz SDK, który jest teraz dostępny w wersji wstępnej.

Jakie biblioteki są dostępne?

Na razie Dart ma trzy biblioteki, z których możesz korzystać:

dart : core

Podstawowe interfejsy API, na które mogą liczyć wszystkie aplikacje, niezależnie od tego, czy są to samodzielne skrypty, czy działające w przeglądarce. Te interfejsy API umożliwiają wykonywanie takich operacji, jak:
•  wyświetlić tekst podstawowy (print ())
•  grupowanie obiektów w kolekcje (kolekcja, zestaw, lista, kolejka)
•  manipulować parami klucz-wartość (mapa)
•  określić daty i godziny (data, strefa czasowa, czas trwania, stoper)
•  używaj ciągów (String, Pattern, RegExp)
•  używaj liczb (num, int, double, Math)
•  zwrócić wartość przed zakończeniem operacji (Future)
•  porównać podobne obiekty (porównywalne)
•  wykonać operację na każdym elemencie w obiekcie wieloelementowym (Iterowalne)

dart: html

Interfejsy API do tworzenia interfejsów użytkownika dla aplikacji internetowych. Na przykład:

•  pobierz obiekty globalne (dokument, okno)
•  znaleźć elementy HTML (query elementu () i queryAll ())
•  dodawać i usuwać programy obsługi zdarzeń (element we właściwości)
•  operować na grupach obiektów przy użyciu wbudowanych interfejsów kolekcji Dart

dart: io

Interfejsy API po stronie serwera do łączenia się ze światem zewnętrznym. Ta biblioteka jest dostępna tylko wtedy, gdy maszyna wirtualna Dart jest uruchomiona na serwerze. Przykłady:

•  odczyt i zapis danych (InputStream, OutputStream)
•  otwierać i czytać pliki (Plik, Katalog)
•  podłączyć do gniazd sieciowych (Socket)

Społeczność rozpoczęła także przenoszenie bibliotek, z których możesz korzystać. Na przykład biblioteki kryptowalut z Closure zostały przeniesione do Dart. Na potrzeby tworzenia gier popularny silnik fizyki Box2D został również przeniesiony do Dart.

Pokaż więcej kodu

Przedstawiliśmy przegląd najciekawszych funkcji Dart i pokazaliśmy trochę kodu Dart. Teraz omówimy kilka z tych funkcji - typy, typy ogólne, izolaty i manipulacje DOM - i pokażemy jeszcze więcej kodu.

Typy

Powyżej pokazaliśmy ten przykład:

class Point {
Point(this.x, this.y);
distanceTo(other) {
var dx = x - other.x;
var dy = y - other.y;
return Math.sqrt(dx * dx + dy * dy);
}
var x, y;
}
main() {
var p = new Point(2, 3);
var q = new Point(3, 4);
print('distance from p to q = ${p.distanceTo(q)}');
}

Możesz zauważyć, że chociaż kod definiuje i używa klasy, w przeciwnym razie nie ma typów. W Dart typy są opcjonalne. Nie zmieniają sposobu działania programów, ale sprawiają, że kod jest bardziej zrozumiały dla narzędzi (takich jak debuggery i IDE) i programistów (takich jak Twój zamiennik, kiedy przechodzisz do jeszcze lepszego projektu). Pomyśl o typach jako o adnotacjach lub dokumentacji, które mogą pomóc narzędziom i ludziom lepiej zrozumieć Twoje zamiary i wcześniej wykryć błędy. Uważamy, że dobrym miejscem do rozpoczęcia dodawania typów są sygnatury metod i interfejsy - "powierzchnia" programu. W miarę dodawania do projektu większej liczby osób i generowania większej liczby klas warto wiedzieć, jakie typy są używane przez metody (i które z nich są zwracane). Oto poprzedni przykład z typami dodanymi do definicji interfejsu API:
v class Point {
Point(this.x, this.y);
num distanceTo(Point other) {
var dx = x - other.x;
var dy = y - other.y;
return Math.sqrt(dx * dx + dy * dy);
}
num x, y;
}
main() {
var p = new Point(2, 3);
var q = new Point(3, 4);
print('distance from p to q = ${p.distanceTo(q)}');
}

Zwróć uwagę, że nie dodaliśmy typów do treści metody distanceTo (). Wyłaniający się wzorzec idiomatycznego Darta polega na używaniu typów jako sygnatur metod, ale nie w treściach metod. Treści metod powinny być wystarczająco małe, aby można je było łatwo zrozumieć, i oczekujemy, że w pewnym momencie narzędzia przeprowadzą wnioskowanie o typie. Jeśli jednak wolisz używać typów wszędzie, możesz zmienić var dx na num dx i tak dalej.

Ogólne

Jeśli wcześniej nie korzystałeś z typów ogólnych - a może nawet jeśli już tak - zobaczenie czegoś takiego jak List < E > w dokumentacji API może być nieco przerażające. Nie martw się. Leki generyczne w Dart są łatwe. Na przykład, jeśli nie obchodzi Cię, jakie typy obiektów znajdują się na liście, możesz utworzyć taką listę:

new List()

Jeśli wiesz, że Twoja lista będzie zawierała tylko jeden rodzaj obiektu - na przykład tylko ciągi znaków - możesz (ale nie musisz) zadeklarować, że podczas tworzenia obiektu List:

new List < String > ()

Po co zawracać sobie głowę dodatkową ceremonią? Określenie, jakie typy może przechowywać Twoja kolekcja, jest dobrym sposobem na udokumentowanie zarówno innym programistom, jak i narzędziom, jakie są Twoje oczekiwania. Narzędzia i środowisko wykonawcze mogą wcześnie wykrywać błędy. (Fakt: new List () to skrót od new List < Dynamic > (). Dynamic to typ używany za sceny dla zmiennych "bez typu".) Oto przykłady tego, jak Dart traktuje różne typy i kolekcje bez typu. Jeśli znasz typy ogólne w Javie, zwróć szczególną uwagę na dwa ostatnie przykłady.

main() {
print(new List() is List< Object >);
print(new List() is List< Dynamic >);
print(new List< String >() is List< Object >);
print(new List< Object >() is! List< String >); // Not all objects are strings
print(new List () is! List< int >); // Strings are not ints
print(new List() is List); // TRUE! Every list of string is
// a list
print(new List() is List< String >); // TRUE! It's OK to pass a List // to a method that expects
// List< String >
}
Ostatnie dwa przykłady podkreślają kowariantne typy generyczne Darta. Ponieważ na wolności natkniesz się na nietypowy kod Dart, język Dart musi umożliwiać traktowanie nietypowej listy tak samo, jak wpisanej listy i odwrotnie. Jak możesz stwierdzić z powyższego kodu, sparametryzowane typy Darta są reifikowane. Oznacza to, że typy ogólne nie są tracone w czasie kompilacji, więc Dart naprawdę wie, że List to "lista ciągów znaków".

Manipulowanie DOM

Ponowne odwiedzanie DOM, aby uczynić go bardziej dartowym, ma wiele zalet. Możesz używać elementów i węzłów jako rzeczywistych obiektów Dart i możesz przechodzić przez węzły potomne, tak jak w przypadku innych kolekcji Dart. Na przykład, oto kod, który znajduje określony element, a następnie wykonuje różne operacje na elemencie i jego elementach podrzędnych.

#import ("dart: html");
main() {
// Znajdź element.
var elem = document.query ("# id");
// Obsługa zdarzeń.
elem.on.click.add ((event) => print ('click!'));
// Ustaw atrybut.
elem.attributes ['nazwa'] = 'wartość';
// Dodaj element podrzędny.
elem.elements.add (nowy Element.tag ("p"));
// Dodaj klasę CSS do każdego elementu podrzędnego.
elem.elements.forEach ((e) => e.classes.add ("ważne"));
}

Izolacje

Mimo że Dart jest jednowątkowy, nadal możesz korzystać z maszyn wielordzeniowych, używając izolatów. Izolacja zapewnia izolację pamięci między różnymi częściami uruchomionego programu. Każdy izolat może działać w oddzielnym wątku lub procesie zarządzanym przez maszynę wirtualną Dart. Izolaty komunikują się, wysyłając wiadomości przez porty. Komunikaty są kopiowane, aby izolat nie mógł zmienić stanu obiektów należących do innych izolatów. Aby zilustrować działanie izolatów, zbudujmy prostą usługę echa. Najpierw zdefiniujemy echo (), funkcję do uruchomienia w izolacji. Każdy izolat ma port, którego możemy używać do odbierania wiadomości. Odpowiemy na wiadomość za pośrednictwem podanego portu odpowiedzi. Metoda main () tworzy nowy izolat dla funkcji echo () za pomocą funkcji spawnFunction (). Użyj SendPort, aby wysyłać wiadomości do izolatu i nasłuchiwać odpowiedzi za pomocą then ().

#import ('dart: isolate');
echo() {
port.receive ((msg, Reply) => Reply.send ("Echo: $ msg"));
}
void main () {
SendPort sendPort = spawnFunction (echo);
sendPort.call ("Hello, Dart!"). then ((response) => print (response));
}

Oto wynik:

Echo: Cześć, Dart!

Przetestowaliśmy powyższy kod na maszynie wirtualnej Dart. W JavaScript izolaty kompilują się do pracowników sieci web, dzięki czemu mogą działać w oddzielnych procesach. Izolaty wciąż są refaktoryzowane. Wypatruj kolejnych aktualizacji


Powrót