Poznámky ze zkoumání jazyka Dart

Během zkoumání jazyka Dart jsem narazil na pár informací, které se hodí sepsat. Pokud někdo nemá čas na celodenní zkoumání, získá tak rychlý průlet tohoto jazyka.

Domovská stránka jazyka je https://www.dartlang.org/

Novinky včetně RSS kanálu najdete na http://news.dartlang.org/

Dva komplexní tutoriály jsou na https://www.dartlang.org/codelabs/

Obecné informace

Lze v něm psát aplikace jak pro client-side, tak server-side. Je vyvíjený jako open-source pod licencí New BSD License. Většina přispěvatelů je z firmy Google. Zdrojové kódy nástrojů a rozšíření lze najít i na GitHubu. Dart je označován jako nástupce Google Web Toolkit (ve kterých je například aktuální Gmail).

Jazyk Dart

  • Je to objektově orientovaný jazyk, podobný Javě, takže má normálně dědičnost, rozhraní atd.
  • Lze přeložit do JavaSciptu s podporou moderních prohlížečů a IE10+.
  • Při nativním běhu na Dart Virtual Machine je cca 2x rychlejší (https://www.dartlang.org/performance/) jak nativní JavaScript.
  • Syntaxe je C-style, takže má chlupaté závorky a středníky.
  • volitelné typování (místo var x = 10 lze psát num x = 10).
  • Má vývojový a produkční mód, který nedělá typovou kontrolu a je tak rychlejší.
  • Top level funkce je main() tzn. void main() { ... }, která se volá jako první.
  • jmené konstruktory; výchozí konstruktor se jmenuje podle názvu třídy, takže například Person(), ale můžeme mít i jmenný konstruktor Person.withAge(num age).
  • Konstruktor může mít pevné a volitelné parametry.
  • Konstruktory jsou buď jmenné, nebo poziční (záleží na pořadí parametrů).
  • Proměnné jsou buď public, nebo private a ty zapisujeme s podtržítkem na začátku.
  • Každá proměnná je objekt, výchozí hodnota je null.
  • Proměnné nelze přetěžovat.
  • Lze použít future construct someFnc().then(futureFnc).catchError(handleError).
  • Má operátor kaskády, který umožňuje řetězit operace na jedné instanci objektu person..setName()..setSurname().
  • Nedělá rozdíl mezi "něco" a 'něco'.
  • Stringová interpolace "Nějaký text $variable pokračování textu" je až 4x rychlejší, než klasické skládání řetězců.
  • Pomocí knihoven je zaručená modulárnost.
  • Import knihoven lze omezit pomocí operátorů show (naimportuje pouze část knihovny) a hide (skryje část knihovny).
  • Kompilace pak podporuje tree-shaking, takže do výsledného minifikovaného JavaScriptu jsou přibaleny pouze používané knihovny.
  • Neexistuje ===.
  • Místo List() můžeme psát [].
  • Místo funkce() { return value; } lze psát funkce() => value;
  • generické třídy, např List<String> users;
  • Umí data binding jako Angular JS, takže na nějaký prvek v DOM lze napojit náš model a změna probíhá ihned.
  • Závislosti jsou řešení přes Pub Package Manager (něco jako Composer, nebo Bower).
  • Závislosti zapisujeme do souboru pubspec.yaml (něco jako composer.json).
  • Lock soubor se pak jmenuje pubspec.lock a generuje se automaticky.

Dart Editor

Přímo na domovské stránce Dartu lze stáhnout editor, což je IDE postavené nad Eclipse. Navíc je k tomu přibalené Chromium, které má v sobě Dart virtual machine, takže není soubory potřeba kompilovat. Každá změna je při obnovení stránky hned vidět v prohlížeči. Navíc je vše propojené, takže chyby nebo výstupy chodí do konzole. Dart Editor obsahuje rovněž Pub Package Manager a umí ho automaticky volat při změně souboru pubspec.yaml.

Knihovny

  • dart:core Základní knihovna přibalená do každého projektu.
  • dart:html Pro práci s HTML a DOMem. Umí querySelector pro pohybu po DOMu, něco jako umí jQuery: querySelector('#mainMenu').
  • dart:math Matematické funkce.
  • dart:convert Konverze formátů, třeba JSON na List. S JSONem se pak pracuje jako s mapou.
  • dart:async Asynchronní metody. Future konstrukce.

Psaní aplikace

Dart do projektu automaticky přibaluje soubor dart.js, který zajistí to, že když prohlížeč podporuje nativně Dart, tak načte soubor s příponou dart, jinak načte zkompilovaný .js soubor.