IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 14 - Ekosystém a konvence Dartu

V minulé lekci, Dynamic, var, null a null aware operátory, jsme si vysvětlili něco o datovém typu dynamic, hodnotě null a jak s ní pracovat. Tato lekce bude v kurzu základních konstrukcí Dartu poslední a již se nebude věnovat kódu, ale povíme si něco o ekosystému Dartu a jaké konvence bychom měli dodržovat.

Ekosystém

Dart je relativně nový jazyk, který se při svém návrhu mohl poučit z mnoha chyb jiných technologií. A i přes to, že je open source, Dart tým každou změnu pečlivě rozmýšlí.

Ať už je Dart váš první jazyk, který se učíte, nebo již máte s programováním několik zkušeností, Dart je jedna z mála technologií, která má konzistentní postupy a konvence pro vývoj. Pokud se podíváme ku příkladu na již zmiňovaný Javascript nebo Javu, najdete stovky či tisíce nejrůznějších nástrojů od hromady různých vývojářů, kterými si můžete ulehčit vývoj - ať už to jsou nástroje na automatizaci, testování, kompilaci, generování dokumentace atp.

V Dartu, podobně jako v C#, se tento fenomén nevyskytuje (alespoň ne v takovéto míře) a existují tak jasně stanovené konvence a další podpůrné nástroje, čímž je celkový ekosystém zdravější a v celkovém pohledu nabývá ucelenějšího dojmu. A navíc všechen kód vypadá stejně (nebo by alespoň měl být, jelikož bychom měli dodržovat konvence, samozřejmě ne nutně 100%).

Struktura Dart projektu

Nejprve, než si povíme něco o nástrojích, bychom si měli vysvětlit, jak vlastně strukturovat naše projekty. Každý projekt v Dartu je balíček a již víme, že hlavní soubor, kterým se balíček konfiguruje, je pubspec.yaml. V tom definujeme závislosti, závislosti nutné k vývoji a třeba i verzi Dart sdk. Tento soubor je vlastně to, co říká, že tento projekt bude Dart balíček.

Mimochodem, i když budete importovat soubory v rámci vašeho balíčku, pořád byste měli používat package: prefix:

import 'package:moje_hra/src/hrac.dart';

Po stažení závislostí (příkaz pub get) se vytvoří lockfile soubor pubspec.lock, který obsahuje informace, na čem konkrétně je daný balíček závislý. Pokud je váš balíček aplikace, měl by se tento soubor pubspec.lock zálohovat spolu s kódem. Aplikace je takový balíček, který nemá být určen jako závislost ostatních, a tedy ho plánujete spouštět přímo - např. konzolová aplikace, webová aplikace a pod.

Stažení závislostí také vytvoří soubor .packages, který však nezálohujte.

Pokud chcete vydat svůj kód jako Open Source, měl by obsahovat i další soubory jako README.md, LICENSE, CHANGELOG atp. Těmito soubory se však zabývat nebudeme. Pokud vás Open Source zajímá, doporučuji se podívat na Open Source Guides (v angličtině).

bin/

Jak již víme, do složky bin/ přidáváme spustitelné soubory (např. soubor, který spustí konzolovou aplikaci), které může každý spustit.

Skripty v této složce můžete spustit pomocí příkazu pub run.

lib/

Do složky lib/ přidáme volně dostupné zdroje. Ty můžeme využít jak my v našem kódu, tak někdo jiný, kdo používá náš balíček.

Implementační soubory (tedy ty soubory, které jsou určeny pouze pro běh naší aplikace) se dávají do složky lib/src/. Soubory v této složce nejsou volně dostupné a tedy byste ani vy neměli nikdy importovat nic z této složky jiných balíčků.

web/

Pro webové balíčky využijete složku web/, do které se umisťují soubory vstupního bodu webové aplikace - Dart skripty s metodou main() a další potřebné soubory, jako např. index.html, style.css atp.

Implementační kód webu (tedy veškerý kód, který není volán přímo ze vstupních bodů jako jsou HTML soubory a podobné) by však stále měl být ve složce lib/src/.

test/

Každý balíček by měl být řádně otestován. V Dartu se umisťují všechny testy do složky test/ a tyto soubory by měly mít suffix _test, např. tedy muj_prvni_test.dart. Testy typicky používají balíček test.

benchmark/

Speciální druh testů, které netestují správnost kódu, ale jeho rychlost (nebo třeba práci s pamětí), jsou "benchmarky". Ty se umisťují do složky benchmark/.

doc/

Dokumentace, kterou byste měli psát, patří do složky doc/. Pokud spustíte nástroj dartdoc, vygeneruje se automaticky dokumentace do složky doc/api/. Jelikož se generuje automaticky, neměli byste ji verzovat.

Pro ostatní typy dokumentace, např. pokud si ji chcete udržovat ručně, nejsou žádné konvence, jen by neměla být ve složce doc/api/.

example/

Kód, testy, dokumentace a pořád to není dost. Ukázky reálného používání vašeho balíčku patří do složky example/.

tool/

Do složky tool/ je vhodné vkládat různé podpůrné spustitelné soubory, jako jsou různé skripty, generátory, automatizační pomocníci atp.

Oproti spustitelným souborům ve složce bin/ nejsou tyto soubory určené pro externí použití.

Nástroje Dartu

pub

Pub je nástroj, díky kterému můžeme stahovat (pub get) cizí balíčky a nahrávat ty své. Ale umí toho i mnohem více. Váš balíček dokáže sestavit (pub build), spustit (pub run), watchovat (opakovaně sestavovat a spouštět při každé změně - pub serve) atp.

dartanalyzer

Dartanalyzer provádí statickou analýzu kódu. Jelikož se jedná o nezávislý nástroj, lze lehce využít v jiných aplikacích a tak třeba i IntelliJ IDEA využívá právě tento nástroj pro kontrolu.

dart2js a dartdevc

Dart má 2 nástroje určené pro kompilaci Dartu do Javascriptu. Nástroj dartdevc je rychlejší, jednodušší, čitelnější, má silnější kontrolu a umí spolupracovat s debugovacími nástroji. Nástroj dart2js je oproti tomu optimalizovaný na sestavení produkční verze webové aplikace.

dartdoc

Dartdoc generuje HTML dokumentaci z Dart kódu, kterou vygeneruje do doc/api/.

dartfmt

Dartftml formátuje Dart kód podle konvencí.

DartPad

Čas od času má každý z nás potřebu svůj kód sdílet. Ať už kvůli radě od kamaráda, nebo aby mohl projekt hezky ukázat. K těmto účelům slouží webový nástroj DartPad, který samozřejmě využívá i dartanalyzer, takže informuje o všech chybách a má v sobě několik efektních ukázek, jak Dart lze použít.

Konvence

Dart má poměrně rozsáhlé konvence týkající se zápisu, dokumentace, používání a návrhu. Všechny konvence, jelikož jich je opravdu mnoho a nebudeme si je všechny vypisovat, najdete na oficiálních stránkách Effective Dart.

V rámci této lekce si uvedeme jednu věc, a to sice názvy souborů. Jak již jste si určitě všimli, názvy souborů v Dartu se píší malými písmeny a slovy oddělenými podtržítky, což je oproti jiným jazykům docela rozdíl. Píšeme tedy muj_program.dart, nepíšeme MujProgram.dart.

Na psaní dobrého kódu jsou 2 zásadní pravidla:

Být konzistentní

Na spoustu věcí není žádné zlaté pravidlo, jak je psát dobře. Pokud však budete dostatečně konzistentní, objektivně se celý kód zdá lepší a čitelnější. A pokud už něco musí být jiné, mělo by to být z dobrého důvodu.

Být stručný

Dart je navržen tak, aby byl jednoduchý. A pokud existuje více způsobů, jak vyjádřit jednu věc, vyberte ten nejjednodušší. To ale samozřejmě neznamená, že byste měli napsat vždy co nejkratší kód. Kód by měl být napsán přehledně, ne "nahňácaný" na sobě.

Naše výuka Dartu teď vlastně teprve začíná, nicméně tento on-line kurz těch nejzákladnějších konstrukcích jazyka již dokončujeme. Dart kurz nyní pokračuje v sekci Základy objektově orientovaného programování v Dartu. Příště si tedy představíme objektový svět a pochopíme mnoho věcí, které nám až doteď byly utajovány. :)


 

Předchozí článek
Dynamic, var, null a null aware operátory
Všechny články v sekci
Základní konstrukce jazyka Dart
Článek pro vás napsal Honza Bittner
Avatar
Uživatelské hodnocení:
2 hlasů
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Aktivity