Dart復習した覚え書き。
参考:
https://zenn.dev/joo_hashi/books/34fa9e03ab3440/viewer/ada115
関数
複数の値を返す場合
//返り値に二つの型を指定する。
(int, String) getMember(int number, String name) {
return (number, name);
}
void main() {
final gm = getMember(1, 'Taro');
print(gm);// (1, Taro)
}
無名関数
void main() {
final list = [1, 2, 3, 4, 5];
//listの中にある要素itemを引数として受け取り表示
list.forEach((item) {
print(item);
});
}
こっちでもいい
void main() {
final list = [1, 2, 3, 4, 5];
list.forEach((item) => print(item));
}
List
void main() {
//listが格納する値の型を<>の中に指定
List<String> list = ['Hoge', 'Fuga', 'Foo'];
// 2番目の要素を出力
print(list[1]);// Fuga
}
Listに要素を追加していく
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo'];
list.add('Bar');
print(list);//[Hoge, Fuga, Foo, Bar]
}
Listから要素を削除
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo'];
list.add('Bar');
print(list);//[Hoge, Fuga, Foo, Bar]
}
Listの要素のindexを取る
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo', 'Bar', 'Baz'];
print(list.indexOf('Hoge')); // 0
print(list.indexOf('Fuga')); // 1
print(list.indexOf('Foo')); // 2
}
Listの要素を並び替える
void main() {
// Listの要素を並び替える。どういう基準で並び替えられているのはようわからん。
var names = ['山田', '佐藤', '鈴木'];
names.sort();
print(names); // [佐藤, 山田, 鈴木]
// Listの要素を並び替える。並び替える基準を指定する
var ages = [30, 40, 20];
ages.sort((a, b) => 『a.compareTo(b));
print(ages); // [20, 30, 40]
}
数字のsortの挙動をわかりやすくしてみるとこんな感じ。比較して、-1だった場合、入れ替えは発生しない。1だった場合は入れ替えが発生する。入れ替えが発生したら、入れ替えが発生した値でまだ比較されていない値同士を比較という感じだろうか。この辺はアルゴリズムに詳しい人の知見を求む。
void main() {
var ages = [30, 40, 20];
ages.sort((a, b) {
var result = a.compareTo(b);
print(a);
print(b);
print(result);
return result;
});
print(ages);
/*
30
40
-1
40
20
1
30
20
1
[20, 30, 40]
*/
}
条件に一致する要素を抽出
void main() {
// whereメソッドで条件に一致する要素を抽出する
var ages = [20, 30, 40, 50, 60];
var filteredAges = ages.where((age) => age > 30);
print(filteredAges); // (40, 50, 60)
}
要素をシャッフルシャッフルぅ!
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo', 'Bar', 'Baz'];
list.shuffle();
print(list);//毎回並びが違くなる
}
foreachで回して各要素になんらかの処理を施す
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo', 'Bar', 'Baz'];
list.forEach((element) {
print(element.toUpperCase()); //大文字で表示
});
}
配列の要素を全て評価
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo', 'Bar', 'Baz'];
// 文字数が全部3以上だったらtrue、そうでなければfalse
print(list.every((element) => element.length > 3));// false
}
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo', 'Bar', 'Baz'];
// 文字数が全部2以上だったらtrue、そうでなければfalse
print(list.every((element) => element.length > 2));// true
}
map
void main() {
List<String> list = ['Hoge', 'Fuga', 'Foo', 'Bar', 'Baz'];
// 全部大文字にする
final m = list.map((e) => e.toUpperCase());
print(m);// (HOGE, FUGA, FOO, BAR, BAZ)
}
reduce
void main() {
final numbers = <double>[10, 2, 5, 0.5];
//全部足して要素を結合していき、一つにする。
final result = numbers.reduce((value, element) => value + element);
print(result); // 17.5
}