14. diel - Ekosystém a konvencie Dart
V minulej lekcii, Dynamic, var, null a null aware operátormi , sme si vysvetlili niečo o dátovom type
dynamic
, hodnote null
a ako s ňou pracovať. Táto
lekcia bude v kurze základných konštrukcií Dart posledný a už sa nebude
venovať kódu, ale povieme si niečo o ekosystéme Dart a aké konvencie by sme
mali dodržiavať.
Ekosystém
Dart je relatívne nový jazyk, ktorý sa pri svojom návrhu mohol poučiť z mnohých chýb iných technológií. A aj napriek tomu, že je open source, Dart tím každú zmenu starostlivo rozmýšľa.
Či už je Dart váš prvý jazyk, ktorý sa učíte, alebo už máte s programovaním niekoľko skúseností, Dart je jedna z mála technológií, ktorá má konzistentné postupy a konvencie pre vývoj. Ak sa pozrieme ku príkladu na už spomínaný Javascript alebo Javu, nájdete stovky či tisíce najrôznejších nástrojov od hromady rôznych vývojárov, ktorými si môžete uľahčiť vývoj - či už to sú nástroje na automatizáciu, testovanie, kompiláciu, generovanie dokumentácie atp.
V Dart, podobne ako v C #, sa tento fenomén nevyskytuje (aspoň nie v takejto miere) a existujú tak jasne stanovené konvencie a ďalšie podporné nástroje, čím je celkový ekosystém zdravšie a v celkovom pohľade naberá holistickejšieho dojmu. A navyše všetok kód vyzerá rovnako (alebo by aspoň mal byť, pretože by sme mali dodržiavať konvencie, samozrejme nie nevyhnutne 100%).
Štruktúra Dart projektu
Najprv, než si povieme niečo o nástrojoch, by sme si mali vysvetliť, ako
vlastne štruktúrovať naše projekty. Každý projekt v Dart je balíček a
už vieme, že hlavný súbor, ktorým sa balíček konfiguruje, je
pubspec.yaml
. V tom definujeme závislosti, závislosti potrebné k
vývoju a trebárs aj verziu Dart sdk. Tento súbor je vlastne to, čo hovorí,
že tento projekt bude Dart balíček.
Mimochodom, aj keď budete importovať súbory v rámci vášho balíčku,
stále by ste mali používať package:
prefix:
import 'package:moje_hra/src/hrac.dart';
Po stiahnutí závislostí (príkaz pub get
) sa vytvorí
lockfile súbor pubspec.lock
, ktorý obsahuje informácie, na čom
konkrétne je daný balík závislý. Ak je váš balík programu, mal by sa
tento súbor pubspec.lock zálohovať spolu s kódom. Aplikácia je taký
balík, ktorý nemá byť určený ako závislosť ostatných, a teda ho
plánujete spúšťať priamo - napr. Konzolová aplikácie, webová aplikácia
a pod.
Stiahnutie závislostí tiež vytvorí súbor .packages
, ktorý
však nezálohujte.
Ak chcete vydať svoj kód ako Open Source, mal by obsahovať aj ďalšie
súbory ako README.md
, LICENSE
, CHANGELOG
atp. Týmito súbory sa však zaoberať nebudeme. Ak vás Open Source zaujíma,
odporúčam sa pozrieť na Open Source
Guides (v angličtine).
Bin /
Ako už vieme, do zložky bin/
pridávame spustiteľné súbory
(napr. Súbor, ktorý spustí konzolovú aplikáciu), ktoré môže každý
spustiť.
Skripty v tejto zložke môžete spustiť pomocou príkazu
pub run
.
Lib /
Do zložky lib/
pridáme voľne dostupné zdroje. Tie môžeme
využiť ako my v našom kódu, tak niekto iný, kto používa náš
balíček.
Implementačný súbory (teda tie súbory, ktoré sú určené iba pre beh
našej aplikácie) sa dávajú do zložky lib/src/
. Súbory v tejto
zložke nie sú voľne dostupné a teda by ste ani vy nemali nikdy importovať
nič z tejto zložky iných balíčkov.
Web /
Pre webové balíčky využijete zložku web/
, do ktorej sa
umiestňujú súbormi vstupného bodu webové aplikácie - Dart skripty s
metódou main()
a ďalšie potrebné súbory, ako napr.
index.html
, style.css
atp.
Implementačný kód webu (teda všetok kód, ktorý nie je volaný priamo zo
vstupných bodov ako sú HTML súbory a podobné) by však stále mal byť v
priečinku lib/src/
.
Test /
Každý balíček by mal byť riadne otestovaný. V Dart sa umiestňujú
všetky testy do zložky test/
a tieto súbory by mali mať suffix
_test
, napr. Teda muj_prvni_test.dart
. Testy typicky
používajú balíček
test.
Benchmark /
Špeciálny druh testov, ktoré netestujú správnosť kódu, ale jeho
rýchlosť (alebo napríklad prácu s pamäťou), sú "benchmarky". Tie sa
umiestňujú do zložky benchmark/
.
Doc /
Dokumentácia, ktorú by ste mali písať, patrí do zložky
doc/
. Ak spustíte nástroj dartdoc
, vygeneruje sa
automaticky dokumentácie do zložky doc/api/
. Keďže sa generuje
automaticky, nemali by ste ju verzovat.
Pre ostatné typy dokumentácie, napr. Ak si ju chcete udržiavať ručne,
nie sú žiadne konvencie, len by nemala byť v priečinku
doc/api/
.
Example /
Kód, testy, dokumentácia a stále to nie je dosť. Ukážky reálneho
používanie vášho balíčku patrí do zložky example/
.
Tool /
Do zložky tool/
je vhodné vkladať rôzne podporné
spustiteľné súbory, ako sú rôzne skripty, generátory, automatizačnej
pomocníci atp.
Oproti spustiteľným súborom v priečinku bin/
nie sú tieto
súbory určené pre externé použitie.
Nástroje Dart
Pub
Pub je nástroj, vďaka ktorému môžeme sťahovať (pub get
)
cudzie balíčky a nahrávať tie svoje. Ale vie toho aj omnoho viac. Váš
balíček dokáže zostaviť (pub build
), spustiť
(pub run
), watchovat (opakovane zostavovať a spúšťať pri
každej zmene - pub serve
) atp.
Dartanalyzer
Dartanalyzer vykonáva statickú analýzu kódu. Keďže sa jedná o nezávislý nástroj, možno ľahko využiť v iných aplikáciách a tak napríklad aj IntelliJ IDEA využíva práve tento nástroj pre kontrolu.
Dart2js a dartdevc
Dart má 2 nástroje určené pre kompiláciu Dart do JavaScriptu. Nástroj
dartdevc
je rýchlejší, jednoduchší, čitateľnejší, má
silnejší kontrolu a vie spolupracovať s debugovacími nástrojmi. Nástroj
dart2js
je oproti tomu optimalizovaný na zostavenie produkčnej
verzie webovej aplikácie.
Dartdoc
Dartdoc generuje HTML dokumentáciu z Dart kódu, ktorú vygeneruje do
doc/api/
.
Dartfmt
Dartftml formátuje Dart kód podľa konvencií.
DartPad
Čas od času má každý z nás potrebu svoj kód zdieľať. Či už kvôli rade od kamaráta, alebo aby mohol projekt pekne ukázať. K týmto účelom slúžia webový nástroj DartPad, ktorý samozrejme využíva aj dartanalyzer, takže informuje o všetkých chybách a má v sebe niekoľko efektných ukážok, ako Dart možno použiť.
Konvencie
Dart má pomerne rozsiahle konvencie týkajúce sa zápisu, dokumentácia, používanie a návrhu. Všetky konvencie, pretože ich je naozaj veľa a nebudeme si ich všetky vypisovať, nájdete na oficiálnych stránkach Effective Dart.
V rámci tejto lekcie si uvedieme jednu vec, a to síce názvy súborov. Ako
už ste si určite všimli, názvy súborov v Dart sa píšu malými písmenami
a slovami oddelenými podtržníkmi, čo je oproti iným jazykom docela rozdiel.
Píšeme teda muj_program.dart
, nepíšeme
MujProgram.dart
.
Na písanie dobrého kódu sú 2 zásadné pravidlá:
Byť konzistentné
Na veľa vecí nie je žiadne zlaté pravidlo, ako je písať dobre. Ak však budete dostatočne konzistentné, objektívne sa celý kód zdá lepšia a čitateľnejší. A ak už niečo musí byť iné, malo by to byť z dobrého dôvodu.
Byť stručný
Dart je navrhnutý tak, aby bol jednoduchý. A ak existuje viac spôsobov, ako vyjadriť jednu vec, vyberte ten najjednoduchší. To ale samozrejme neznamená, že by ste mali napísať vždy čo najkratšie kód. Kód by mal byť napísaný prehľadne, nie "nahňácaný" na sebe.
Naša výučba Dart teraz vlastne len začína, avšak tento on-line kurz tých najzákladnejších konštrukciách jazyka už dokončujeme. Dart kurz teraz pokračuje v sekcii Základy objektovo orientovaného programovania v Dart. Nabudúce si teda predstavíme objektový svet a pochopíme veľa vecí, ktoré nám až doteraz boli utajované.:)