Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

4. diel - Typový systém druhýkrát - dátové typy

V predchádzajúcom cvičení, Riešené úlohy k 1.-3. lekciu Dart, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii Dart kurzu, Riešené úlohy k 1.-3. lekciu Dart , sme si ukázali základné dátové typy. Boli to int, String a double. Teraz sa na dátové typy pozrieme viac zblízka a vysvetlíme si, kedy aký použiť. Dnešná lekcia bude veľa teoretická, ale o to viac bude praktická tá budúci. Na konci si vytvoríme pár jednoduchých ukážok.

Väčšina programovacích jazykov rozoznáva 2 druhy dátových typov a to hodnotové a referenčné. Všetko v Dart je tzv. Objekt s čím ruka v ruke ide to, že typy v Dart sú referenčnej. K referenčným typom sa dostaneme podrobnejšie až u objektovo orientovaného programovania, kde si tiež všetko dopodrobna vysvetlíme.

Dátové typy Dart

Dart má podporu pre niekoľko dátových typov: čísla, reťazce, logické hodnoty, zoznamy, mapy, runy a symboly. Poslednými 3 sa nebudeme v tomto prvom kurze zaoberať.

Čísla

V Dart rozlišujeme 2 typy čísel, a to síce čísla celá a desatinné. Pre celé čísla sa používa dátový typ int, pre desatinné čísla dátový typ double. Typy int i double sú podtypy typu num.

V rámci typu num sú definované základné operátormi +, -, / a * a taktiež základné metódy ako abs(), ceil(), floor() a mnoho ďalších. Bitové operátormi, ako napríklad bitový posun vpravo >>, sú definované v rámci typu int. Ďalšie matematické metódy môžete nájsť aj v knižnici dart:math.

Aj cez to, že Dart (Dart VM) podporuje ľubovoľnú presnosť celých čísel, čísla by mala byť v rozsahu -2 53 až 2 53, najmä ak používate Dart v prehliadači, kde platia obmedzenia JavaScriptu.

Desatinné čísla sú reprezentované ako 64bitová čísla s dvojitou presnosťou, ako je špecifikované v štandarde IEEE 754.

int a = 5;
double b = 3.14;
num c = 6;
num d = 12.8

Logická hodnota

Pre logické hodnoty sa používa dátový typ bool a môže nadobúdať dvoch hodnôt: true (pravda) alebo false (nepravda). Budeme ho používať najmä vtedy, až sa dostaneme k podmienkam. Do premennej typu bool možno uložiť ako priamo hodnotu true / false, tak i logický výraz. Skúsme si jednoduchý príklad:

bool b = false;
bool vyraz = 15 > 5;
print(b);
print(vyraz);

Výstup programu:

Konzolová aplikácia
false
true

Vidíme, že výraz nadobúda hodnoty true (pravda), pretože 15 je naozaj väčší ako 5. Od výrazov je to len krok k podmienkam, na ne sa pozrieme nabudúce.

Reťazca

Pre reťazca v Dart sa používa dátový typ String a sú to sekvencie znakov v UTF-16. Pre reťazca môžete použiť apostrofy aj úvodzovky, obe možnosti sú v Dart ekvivalentné.

print('Vítám tě, čtenáři!');
print("Dart je skvělý jazyk.");
print('A ty\'s skvělým čtenářem ITnetwork.');
print("Život je prostě \"ňuňu\".");

Okrem toho v Dart existujú aj viacriadkové reťazce, ktoré sa označujú trojitými apostrofy alebo úvodzovkami. Pozor si možno musíme dávať na medzery na začiatkoch riadkov a odriadkovanie pred / po trojitým apostrofom / uvozovce.

print('''
Jsem na
více
řádek!''');

print("""
Tady mi pak
nějaká "uvozovka" v uvozovce
nikde už nevadí.
""");

Výstup v konzole potom bude vyzerať nejako takto:

Konzolová aplikácia
Vítám tě, čtenáři!
Dart je skvělý jazyk.
A ty's skvělým čtenářem ITnetwork.
Život je prostě "ňuňu".
Jsem na
více
řádek!
Tady mi pak
jedna "uvozovka" nikde už nevadí.

String má na sebe rad naozaj užitočných metód. Niektoré si teraz preberieme a vyskúšame:

StartsWith (), endsWith () a contains ()

Môžeme sa jednoducho opýtať, či reťazec začína, končí alebo či obsahuje určitý podreťazec (substring). Podreťazcom myslíme časť pôvodného reťazca. Všetky tieto metódy budú ako parameter brať samozrejme podreťazec a vracať hodnoty typu bool (true / false). Zatiaľ na výstup nevieme reagovať, ale poďme si ho aspoň vypísať:

String s = 'Krokonosohroch';
print(s.startsWith('krok'));
print(s.endsWith('hroch'));
print(s.contains('nos'));
print(s.contains('roh'));

Výstup programu:

Konzolová aplikácia
false
true
true
false

Vidíme, že všetko funguje podľa očakávania. Prvý výraz samozrejme neprešiel vďaka tomu, že reťazec v skutočnosti začína veľkým písmenom.

ToUpperCase () a toLowerCase ()

Rozlišovanie veľkých a malých písmen môže byť niekedy na obtiaž. Veľakrát sa budeme potrebovať opýtať na prítomnosť podreťazca tak, aby nezáležalo na veľkosti písmen. Situáciu môžeme vyriešiť pomocou metód toUpperCase() a toLowerCase(), ktoré vracia reťazec vo veľkých a v malých písmenách. Uveďme si reálnejšie príklad ako je Krokonosohroch. Budeme mať v premennej riadok konfiguračného súboru, ktorý písal užívateľ. Keďže sa na vstupy od užívateľov nemožno spoľahnúť, musíme sa snažiť eliminovať možné chyby, tu napr. S veľkými písmenami.

String konfig = 'Fullscreen shaDows autosave';
konfig = konfig.toLowerCase();
print('Poběží hra ve fullscreenu?');
print(konfig.contains('fullscreen'));
print('Budou zapnuté stíny?');
print(konfig.contains('shadows'));
print('Přeje si hráč vypnout zvuk?');
print(konfig.contains('nosound'));
print('Přeje si hráč hru automaticky ukládat?');
print(konfig.contains('autosave'));

Výstup programu:

Konzolová aplikácia
Poběží hra ve fullscreenu?
true
Budou zapnuté stíny?
true
Přeje si hráč vypnout zvuk?
false
Přeje si hráč hru automaticky ukládat?
true

Vidíme, že sme schopní zistiť prítomnosť jednotlivých slov v reťazci tak, že si najprv reťazec prevedieme celý na malé písmená (alebo na veľké) a potom kontrolujeme prítomnosť slová len malými (alebo veľkými) písmenami. Takto by mimochodom mohlo naozaj vyzerať jednoduché spracovanie nejakého konfiguračného skriptu.

Trim (), trimLeft () a trimRight ()

Problémom vo vstupoch od užívateľa môže byť aj diakritika, ale Dart našťastie pracuje plne v UTF-16. Nestane sa nám teda, že by sa diakritika nejako skomolila. Ďalšou nástrahou môžu byť medzery a všeobecne všetky tzv. Biele znaky, ktoré nie sú vidieť, ale môžu nám uškodiť. Vo všeobecnosti môže byť dobré trimovať všetky vstupy od užívateľa, môžeme trimovať buď celý reťazec alebo len biele znaky pred ním a za ním. Prezradím, že pri parsovacích funkciách Dart trimuje zadaný reťazec automaticky, než s ním začne pracovať. Skúste si v nasledujúcej aplikácii pred číslo a za číslo zadať niekoľko medzier:

print('Zadejte číslo:');
String s = stdin.readLineSync(encoding: UTF8);
print('Zadal jste text: "$s"');
print('Text po funkci trim: "${s.trim()}"');
int a = int.parse(s);
print('Převedl jsem zadaný text na číslo parsováním, zadal jste: $a');

ReplaceAll ()

Asi najdôležitejšie metódou na stringu je nahradenie určitej jeho časti iným textom. Ako parametre zadáme dva podreťazca, jeden čo chceme nahrádzať a druhý ten, ktorým to chceme nahradiť. Metóda vráti nový string, v ktorom prebehlo nahradenie. Keď daný podreťazec metóda nenájde, vráti pôvodnú reťazec. Skúsme si to:

String s = "Java je nejlepší!";
s = s.replaceAll("Java", "Dart");
print(s);

Výstup programu:

Konzolová aplikácia
Dart je nejlepší!

PadLeft () a padRight ()

Ako posledný si spomenieme metódy, ktoré nám k textu naopak medzery pridajú.:) K čomu to je dobré? Predstavte si, že máme 100 premenných a budeme ich chcieť usporiadať do tabuľky. Text upravíme pomocou metódy padRight() s parametrom šírky stĺpca, teda napr. 20 znakov. Pokiaľ bude mať text len 12 znakov, vypíše sa pred neho 8 medzier, aby mal veľkosť 20. Obdobne metóda padLeft() by vypísala 8 medzier za neho. Keďže nemáme znalosti na vytvorenie takej tabuľky, budeme si metódy len pamätať a vyskúšame si ich ďalej v seriáli.

Length

Posledný, ale najdôležitejšie vlastnosť (pozor, nie metóda) je length, teda dĺžka. Vracia celé číslo, ktoré predstavuje počet znakov v reťazci. Za vlastnosti nepíšeme zátvorky, pretože nemajú parametre.

print('Zadejte vaše jméno:');
String jmeno = stdin.readLineSync(encoding: UTF8);
print('Délka vašeho jména je: ${jmeno.length}');

Je toho ešte veľa k vysvetľovaniu a sú ďalšie dátové typy, ktoré sme neprebrali. Aby sme však stále nepreberala len teóriu, ukážeme si už v nasledujúcej lekcii, Riešené úlohy k 4. lekcii Dart , podmienky a neskôr cykly. Potom bude naša programátorská výbava dostatočne veľká na to, aby sme tvorili zaujímavé programy.:)

V nasledujúcom cvičení, Riešené úlohy k 4. lekcii Dart, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Riešené úlohy k 1.-3. lekciu Dart
Všetky články v sekcii
Základné konštrukcie jazyka Dart
Preskočiť článok
(neodporúčame)
Riešené úlohy k 4. lekcii Dart
Článok pre vás napísal Honza Bittner
Avatar
Užívateľské hodnotenie:
2 hlasov
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Aktivity