Dart vs. Java
Z MiS
(Rozdíly mezi verzemi)
(Základní obsah - hello, konvence pojmenování, seznamy.) |
(→Práce se seznamy: Spojení prvků ze seznamu do listu.) |
||
| (Není zobrazeno 10 mezilehlých verzí od 1 uživatele.) | |||
| Řádka 7: | Řádka 7: | ||
<div class="Poznamka"> | <div class="Poznamka"> | ||
| − | Syntaxi si můžete vyzkoušet například na: [https://www.tutorialspoint.com/execute_dart_online.php TutorialsPoint.com → Execute Dart Online] | + | Syntaxi si můžete vyzkoušet například na: |
| + | * [https://dartpad.dev/ Dartpad.dev] | ||
| + | * [https://www.tutorialspoint.com/execute_dart_online.php TutorialsPoint.com → Execute Dart Online] | ||
</div> | </div> | ||
| − | |||
== Hello world == | == Hello world == | ||
| Řádka 20: | Řádka 21: | ||
print("Hello, World!"); | print("Hello, World!"); | ||
} | } | ||
| + | |||
| + | == Datové typy == | ||
| + | |||
| + | * Dart nepoužívá primitivní datové typy, všechny typy jsou objektové. | ||
| + | * Dart má vestavěné datové typy, pro které lze vytvářet literály (konkrétní hodnoty) přímo v kódu: | ||
| + | ** Číselné typy: <code>int</code>, <code>double</code> | ||
| + | ** Textové typy: <code>String</code> | ||
| + | ** Logické hodnoty: <code>bool</code> (literály: <code>true</code>, <code>false</code>) | ||
| + | ** Záznamy: <code>(hodnota1, hodnota2)</code> | ||
| + | ** Kolekce: <code>List</code>, <code>Set</code>, <code>Map</code>, <code>Runes</code>, <code>Symbol</code> | ||
| + | ** Prázdnou hodnotu: <code>Null</code> | ||
| + | |||
| + | Více viz: [https://dart.dev/language/built-in-types Dart.dev > Built-in Types]. | ||
| + | |||
| + | == String == | ||
| + | |||
| + | * Textové literály uvozujeme uvozovkami nebo apostrofy (běžněji se využívá apostrof – bohužel pro ty, kdo píší na české klávesnici). | ||
| + | * Víceřádkové texty lze uvozovat třemi apostrofy. | ||
| + | 'Text' | ||
| + | "Text" | ||
| + | """Víceřádkový | ||
| + | text""" | ||
| + | * Spojení (concatenate) textů můžete provádět pomocí operátoru <code>+</code> nebo tím, že je zapíšete za sebe: | ||
| + | String text = 'Dart' 'is' 'fun'; | ||
| + | String text = 'Dart'+'is'+'fun'; | ||
| + | * Pro vložení hodnot do textu můžete využít znak <code>$</code>, který uvozuje vloženou hodnotu. Hodnotu lze ohraničit <code>${...}</code>: | ||
| + | |||
| + | print('Seznam $data má největší prvek ${getMax(data)}'); | ||
| + | |||
| + | Více o textech v Dartu: [https://api.dart.dev/stable/3.5.3/dart-core/String-class.html Dart.dev → String class]. | ||
| Řádka 29: | Řádka 60: | ||
List<int> ids = [1, 2, 3]; | List<int> ids = [1, 2, 3]; | ||
ids.add(6); | ids.add(6); | ||
| + | |||
| + | * Získání prvku ze seznamu: | ||
| + | |||
| + | print(ids[0]); | ||
* Metoda <code>print</code> umí vypsat obsah seznamu. | * Metoda <code>print</code> umí vypsat obsah seznamu. | ||
print(ids); | print(ids); | ||
| + | |||
| + | * Počet prvků seznamu: | ||
| + | |||
| + | print(ids.length) | ||
| + | |||
| + | * Spojení prvků ze seznamu do jednoho textového řetězce: | ||
| + | |||
| + | list.join(delimiter); | ||
| + | ids.join(','); | ||
* Více o práci se seznamy v Dartu viz například: [https://www.codevscolor.com/dart-insert-items-to-list CodeVsColor → Dart insert items to list]. | * Více o práci se seznamy v Dartu viz například: [https://www.codevscolor.com/dart-insert-items-to-list CodeVsColor → Dart insert items to list]. | ||
| + | == Zápis tříd == | ||
| + | |||
| + | * V Dartu můžeme umístit více tříd do jednoho souboru. | ||
| + | |||
| + | |||
| + | === Přístupnost vlastností tříd === | ||
| + | |||
| + | * Dart nepoužívá modifikátory přístupu <code>public</code>, <code>private</code> a <code>protected</code>. | ||
| + | * Všechny vlastnosti (atributy a metody) tříd jsou přístupné v rámci jednoho souboru, případně v rámci jedné knihovny (library). | ||
| + | * Veřejné vlastnosti jsou přístupné i z ostatních knihoven (souborů). | ||
| + | * Privátní vlastnosti se odlišují tak, že jejich název začíná podtržítkem. | ||
| + | * Přístupové metody se označují klíčovými slovy <code>get</code> a <code>set</code>. | ||
| + | |||
| + | class A { | ||
| + | String first; | ||
| + | String _second; | ||
| + | |||
| + | String get second { | ||
| + | return _second; | ||
| + | } | ||
| + | |||
| + | void set second(String second) { | ||
| + | this._second = second; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void main() { | ||
| + | A a = new A(); | ||
| + | a.first = 'x'; | ||
| + | a.second = 'y'; | ||
| + | } | ||
| + | |||
| + | Více viz: [https://www.woolha.com/tutorials/dart-using-access-modifiers-private-public Woolha.com > Dart using Access Modifiers] a [https://www.fluttersolution.com/2023/04/understanding-access-modifiers-in-dart.html FlutterSolution > Understanding Access Modifiers in Dart]. | ||
| + | |||
| + | === Zkrácený zápis metod s návratovou hodnotou === | ||
| + | * Pro krátké metody můžeme využít syntaxi s <code>=></code>: | ||
| + | class Osoba { | ||
| + | String _name = "Karel"; | ||
| + | |||
| + | String get name => _name; | ||
| + | set name(String name) => _name = name; | ||
| + | } | ||
| + | |||
| + | void main() { | ||
| + | Osoba osoba = new Osoba(); | ||
| + | osoba.name = "Ivan"; | ||
| + | print(osoba.name); | ||
| + | } | ||
| + | Místo delšího: | ||
| + | //... | ||
| + | String get getName { | ||
| + | return _name; | ||
| + | } | ||
| + | void set setName(String name) { | ||
| + | _name = name; | ||
| + | } | ||
| + | //... | ||
| + | |||
| + | == Parametry metod == | ||
| + | * Poziční (''position'') parametry metod píšeme stejně jako v Javě: | ||
| + | |||
| + | void metoda(String text, int cislo) { ... } | ||
| + | |||
| + | metoda('Text', 30); | ||
| + | |||
| + | * Lze ale také použít pojmenované parametry (''named''). Potom nezáleží na pořadí argumentů, ale každý z argumentů musí být uvozen názvem: | ||
| + | |||
| + | void metoda({required String text, required int cislo}) { ... } | ||
| + | |||
| + | metoda(cislo: 30, text: 'Text'); | ||
| + | metoda(text: 'Text', cislo: 30); | ||
| + | |||
| + | * Lze také uvést výchozí hodnotu parametru. Pak se jedná o volitelný (''optional'') parametr, který nemusíme uvádět. | ||
| + | |||
| + | Viz také: [https://blog.stackademic.com/dart-function-parameters-in-flutter-positional-vs-named-with-examples-fc475da97f7c StackAcademic.com > Dart Function Parameters in Flutter]. | ||
== Style: konvence pojmenování == | == Style: konvence pojmenování == | ||
Aktuální verze z 16. 3. 2025, 17:28
Obsah |
Dart vs. Java
- Na této stránce shrnujeme základní rozdíly mezi programovacími jazyky Dart a Java.
- Stránka je určena pro čtenáře, kteří již znají Javu a chtějí se rychle zorientovat v jazyce Dart.
Syntaxi si můžete vyzkoušet například na:
Hello world
- Pro metodu
mainnemusíme vytvářet zapouzdřující třídu. - Parametry metody
mainjsou volitelné, pokud je nevyužíváme, nemusíme je uvádět. - Výpis na obrazovku se řeší příkazem
print.
main(){
print("Hello, World!");
}
Datové typy
- Dart nepoužívá primitivní datové typy, všechny typy jsou objektové.
- Dart má vestavěné datové typy, pro které lze vytvářet literály (konkrétní hodnoty) přímo v kódu:
- Číselné typy:
int,double - Textové typy:
String - Logické hodnoty:
bool(literály:true,false) - Záznamy:
(hodnota1, hodnota2) - Kolekce:
List,Set,Map,Runes,Symbol - Prázdnou hodnotu:
Null
- Číselné typy:
Více viz: Dart.dev > Built-in Types.
String
- Textové literály uvozujeme uvozovkami nebo apostrofy (běžněji se využívá apostrof – bohužel pro ty, kdo píší na české klávesnici).
- Víceřádkové texty lze uvozovat třemi apostrofy.
'Text' "Text" """Víceřádkový text"""
- Spojení (concatenate) textů můžete provádět pomocí operátoru
+nebo tím, že je zapíšete za sebe:
String text = 'Dart' 'is' 'fun'; String text = 'Dart'+'is'+'fun';
- Pro vložení hodnot do textu můžete využít znak
$, který uvozuje vloženou hodnotu. Hodnotu lze ohraničit${...}:
print('Seznam $data má největší prvek ${getMax(data)}');
Více o textech v Dartu: Dart.dev → String class.
Práce se seznamy
- Do seznamu v Dartu lze vkládat i prvky primitivních datových typů.
- Lze vytvořit literál seznamu přímo v kódu pomocí znaků
[a].
List<int> ids = [1, 2, 3]; ids.add(6);
- Získání prvku ze seznamu:
print(ids[0]);
- Metoda
printumí vypsat obsah seznamu.
print(ids);
- Počet prvků seznamu:
print(ids.length)
- Spojení prvků ze seznamu do jednoho textového řetězce:
list.join(delimiter);
ids.join(',');
- Více o práci se seznamy v Dartu viz například: CodeVsColor → Dart insert items to list.
Zápis tříd
- V Dartu můžeme umístit více tříd do jednoho souboru.
Přístupnost vlastností tříd
- Dart nepoužívá modifikátory přístupu
public,privateaprotected. - Všechny vlastnosti (atributy a metody) tříd jsou přístupné v rámci jednoho souboru, případně v rámci jedné knihovny (library).
- Veřejné vlastnosti jsou přístupné i z ostatních knihoven (souborů).
- Privátní vlastnosti se odlišují tak, že jejich název začíná podtržítkem.
- Přístupové metody se označují klíčovými slovy
getaset.
class A {
String first;
String _second;
String get second {
return _second;
}
void set second(String second) {
this._second = second;
}
}
void main() {
A a = new A();
a.first = 'x';
a.second = 'y';
}
Více viz: Woolha.com > Dart using Access Modifiers a FlutterSolution > Understanding Access Modifiers in Dart.
Zkrácený zápis metod s návratovou hodnotou
- Pro krátké metody můžeme využít syntaxi s
=>:
class Osoba {
String _name = "Karel";
String get name => _name;
set name(String name) => _name = name;
}
void main() {
Osoba osoba = new Osoba();
osoba.name = "Ivan";
print(osoba.name);
}
Místo delšího:
//...
String get getName {
return _name;
}
void set setName(String name) {
_name = name;
}
//...
Parametry metod
- Poziční (position) parametry metod píšeme stejně jako v Javě:
void metoda(String text, int cislo) { ... }
metoda('Text', 30);
- Lze ale také použít pojmenované parametry (named). Potom nezáleží na pořadí argumentů, ale každý z argumentů musí být uvozen názvem:
void metoda({required String text, required int cislo}) { ... }
metoda(cislo: 30, text: 'Text');
metoda(text: 'Text', cislo: 30);
- Lze také uvést výchozí hodnotu parametru. Pak se jedná o volitelný (optional) parametr, který nemusíme uvádět.
Viz také: StackAcademic.com > Dart Function Parameters in Flutter.
Style: konvence pojmenování
- PascalCase (UpperCamelCase)
- Názvy tříd
- Názvy výčtových typů
class Customer { ... }
- lowercase_with_underscores
- Názvy souborů
- Názvy prefixů pro import
Cílem je zajistit kompatibilitu s různými souborovými systémy, které nemusí rozlišovat velká a malá písmena (case-insensitive).
- camelCase (LowerCamelCase)
- Všechno ostatní ;)
- Na rozdíl od Javy se doporučuje i pro pojmenování konstant. (Z hlediska konzistence s existujícími knihovnami se povoluje i SCREAMING_CASE.)
const defaultTimeout = 1000;
Více o konvencích zápisu kódu viz: Dart.dev → Style.