Bearbeiten von „Dart“
Zur Navigation springen
Zur Suche springen
Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 5: | Zeile 5: | ||
* https://codingwithjoe.com/dart-fundamentals-async-await | * https://codingwithjoe.com/dart-fundamentals-async-await | ||
* https://dartpad.dev | * https://dartpad.dev | ||
= Statements = | = Statements = | ||
< | <source lang=dart>for (var ix in list) { print(ix); } | ||
for (var entry in list.entries) { print(entry.key + entry.value); } | for (var entry in list.entries) { print(entry.key + entry.value); } | ||
for (int ix = 0; ix < 10; ix++) {} | for (int ix = 0; ix < 10; ix++) {} | ||
Zeile 21: | Zeile 20: | ||
} | } | ||
assert(str.isEmpty(), "String muss leer sein"); // nur im Debug aktiv. | assert(str.isEmpty(), "String muss leer sein"); // nur im Debug aktiv. | ||
</ | </source> | ||
== Exception == | == Exception == | ||
< | <source lang=dart> | ||
try { | try { | ||
breedMoreLlamas(); | breedMoreLlamas(); | ||
Zeile 41: | Zeile 40: | ||
MyException(this.message); | MyException(this.message); | ||
} | } | ||
</ | </source> | ||
= Class = | = Class = | ||
< | <source lang=dart>abstract class BaseLogger { | ||
int _errors = 0; | int _errors = 0; | ||
int _level; | int _level; | ||
Zeile 69: | Zeile 68: | ||
const logger2 = BaseLogger.lastInstance(); | const logger2 = BaseLogger.lastInstance(); | ||
var isSilent = logger.isSilent; | var isSilent = logger.isSilent; | ||
</ | </source> | ||
=== Enum === | === Enum === | ||
< | <source lang=dart>enum DataType { bool, int, string, customType } // Schlüsselwörter erlaubt! | ||
DataType.values.forEach((v) => print('value: $v, index: ${v.index}')); | DataType.values.forEach((v) => print('value: $v, index: ${v.index}')); | ||
</ | </source> | ||
== Interface == | == Interface == | ||
* Jede Klasse kann Interface sein. Dann muss jede Methode überschrieben werden | * Jede Klasse kann Interface sein. Dann muss jede Methode überschrieben werden | ||
< | <source lang=dart> | ||
class D implements A, B, C { | class D implements A, B, C { | ||
@override | @override | ||
Zeile 126: | Zeile 84: | ||
} | } | ||
} | } | ||
</ | </source> | ||
== Generator == | == Generator == | ||
< | <source lang=dart>Iterable<int> naturalsTo(int n) sync* { | ||
int k = 0; | int k = 0; | ||
while (k < n) yield k++; | while (k < n) yield k++; | ||
} | } | ||
</ | </source> | ||
* ... und mit Rekursion: | * ... und mit Rekursion: | ||
< | <source lang=dart>Iterable<int> naturalsDownFrom(int n) sync* { | ||
if (n > 0) { | if (n > 0) { | ||
yield n; | yield n; | ||
Zeile 141: | Zeile 99: | ||
} | } | ||
} | } | ||
</ | </source> | ||
= Typen = | = Typen = | ||
* Casting: | * Casting: | ||
< | <source lang=dart> | ||
final x = y as String; | final x = y as String; | ||
</ | </source> | ||
== typedef == | == typedef == | ||
Definiert eine Methodensignatur oder einen Typ-Alias: | Definiert eine Methodensignatur oder einen Typ-Alias: | ||
< | <source lang=dart> | ||
typedef IntList = List<int>; | typedef IntList = List<int>; | ||
typedef Compare<T> = int Function(T a, T b); | typedef Compare<T> = int Function(T a, T b); | ||
Zeile 158: | Zeile 116: | ||
if (validator(input)) doIt(); | if (validator(input)) doIt(); | ||
} | } | ||
</ | </source> | ||
== Map == | == Map == | ||
< | <source lang=dart>final map = <String, int>{ 'John': 1, 'Eve': 2 }; | ||
final knowsEve = map.containsKey('Eve') && map.containsValue(2); | final knowsEve = map.containsKey('Eve') && map.containsValue(2); | ||
map.remove('John'); | map.remove('John'); | ||
Zeile 168: | Zeile 126: | ||
map.forEach((k, v) { print('{ key: $k, value: $v }'); }); | map.forEach((k, v) { print('{ key: $k, value: $v }'); }); | ||
map.entries.forEach((e) { print('{ key: ${e.key}, value: ${e.value} }'); }); | map.entries.forEach((e) { print('{ key: ${e.key}, value: ${e.value} }'); }); | ||
</ | </source> | ||
== List == | == List == | ||
* Indizes: start: inklusiv end: exklusiv | * Indizes: start: inklusiv end: exklusiv | ||
< | <source lang=dart>final names = <String>['adam', 'bob', 'charly', 'eve']; | ||
names.add('fred'); names.insert(3, 'chris'); | names.add('fred'); names.insert(3, 'chris'); | ||
ix = names.indexOf('bob'); ix2 = names.indexWhere((item) => item.startsWith('b'), start); | ix = names.indexOf('bob'); ix2 = names.indexWhere((item) => item.startsWith('b'), start); | ||
Zeile 186: | Zeile 143: | ||
names.followedBy(name2); // liefert names und die Iterables name2 | names.followedBy(name2); // liefert names und die Iterables name2 | ||
names.any((item) => item.length < 3); // irgend ein Element mit der Bedingung | names.any((item) => item.length < 3); // irgend ein Element mit der Bedingung | ||
names.every((item) => item.length < 3); // alle Elemente mit der Bedingung | |||
final summary = names.fold('names:', (prevValue, item) => prevValue += ' ' + item); | final summary = names.fold('names:', (prevValue, item) => prevValue += ' ' + item); | ||
// fold(), reduce(), shuffle(), removeWhere(), | // fold(), reduce(), shuffle(), removeWhere(), | ||
// foreach(), join(), contains() | // foreach(), join(), contains() | ||
</ | </source> | ||
== DateTime == | == DateTime == | ||
< | <source lang=dart> | ||
// Für DateFormat | // Für DateFormat | ||
import 'package:intl/intl.dart'; | import 'package:intl/intl.dart'; | ||
Zeile 208: | Zeile 163: | ||
var linuxTime = now.millisecondsSinceEpoch ~/ 1000; | var linuxTime = now.millisecondsSinceEpoch ~/ 1000; | ||
var formatter = DateFormat('yyyy.MM.dd HH:mm:ss dayOfWeek: E'); | var formatter = DateFormat('yyyy.MM.dd HH:mm:ss dayOfWeek: E'); | ||
String formatted = formatter.format(now); | String formatted = formatter.format(now); | ||
</ | </source> | ||
== RegExpr == | == RegExpr == | ||
< | <source lang=dart>final regExpr = RegExp(r'(\w+)\s*=\s*(\d+)'); | ||
final matcher = reDisks.firstMatch(line); | |||
if (matcher != null){ | if (matcher != null){ | ||
vars[matcher | vars[matcher.group(1)] = int.parse(matcher.group(2)); | ||
} | } | ||
</ | </source> | ||
== String == | == String == | ||
< | <source lang=dart> | ||
const limit = 3; | const limit = 3; | ||
var interpreted = "Limit: $limit Time: ${time()}"; | var interpreted = "Limit: $limit Time: ${time()}"; | ||
</source> | |||
</ | |||
=== Konversion === | === Konversion === | ||
< | <source lang=dart>final count = int.parse("123"); | ||
</ | </source> | ||
=== Formatierung === | === Formatierung === | ||
< | <source lang=dart>import 'package:sprintf/sprintf.dart'; | ||
sprintf("%02d %s", [1, "Hi"]); | sprintf("%02d %s", [1, "Hi"]); | ||
print("${new DateTime.now().toString()}: $message\n"); | print("${new DateTime.now().toString()}: $message\n"); | ||
</ | </source> | ||
= Json = | = Json = | ||
< | <source lang=dart>class Photo { | ||
final int id; | final int id; | ||
final String title; | final String title; | ||
Zeile 274: | Zeile 207: | ||
} | } | ||
} | } | ||
</ | </source> | ||
= Besonderheiten = | = Besonderheiten = | ||
* entweder optionale Positionsparameter oder optionale Namensparameter, nicht beide. | * entweder optionale Positionsparameter oder optionale Namensparameter, nicht beide. | ||
< | <source lang=dart>String substr(String str, int pos, [int length, bool uppercase]){ ... } | ||
String substr2(String str, int pos, {int length, bool uppercase, Logger logger}){ ... } | String substr2(String str, int pos, {int length, bool uppercase, Logger logger}){ ... } | ||
x = substr('Hi world', 3, 2); | x = substr('Hi world', 3, 2); | ||
Zeile 288: | Zeile 221: | ||
x ~/ 5 // Ganzzahlige Division | x ~/ 5 // Ganzzahlige Division | ||
logger?.log() // Aufruf von log nur, wenn logger!=null | logger?.log() // Aufruf von log nur, wenn logger!=null | ||
</ | </source> | ||
== Reflection, Runtime-Info == | == Reflection, Runtime-Info == | ||
< | <source lang=dart>if (a.runtimeType == int || a.runtimeType == String){...} | ||
if (a is String || or a is Map || a is! List){...} | if (a is String || or a is Map || a is! List){...} | ||
</ | </source> | ||
== UnitTest == | == UnitTest == | ||
< | <source lang=dart>import 'import 'package:test/test.dart'; | ||
void main() { | void main() { | ||
group('Validators', () { | group('Validators', () { | ||
Zeile 308: | Zeile 241: | ||
}); | }); | ||
</ | </source> | ||
[https://dartdoc.takyam.com/articles/dart-unit-tests/#matchers Matcher]: | [https://dartdoc.takyam.com/articles/dart-unit-tests/#matchers Matcher]: | ||
isTrue | isTrue | ||
equals(string) | equals(string) | ||
Zeile 321: | Zeile 254: | ||
greaterThanOrEqualTo(v) | greaterThanOrEqualTo(v) | ||
lessThan(v) | lessThan(v) | ||