📘
Dart基本文法
社内の勉強会用です。
環境
Dart 2.15.1
基本の型
- int: 数値
- double: 浮動小数
- String: 文字列
- bool: 真偽値
- List: 配列
- Set: 順番を持たず、重複を許さないオブジェクト
- Map: key, valueのセット
変数宣言
// 再代入不可
final String name = 'hoge';
name = 'fuga'; // 解析エラー
// 再代入可能
var int point = 50;
point = 100;
// 型推論機能
final name = 'fuga';
// 型が不明なことを明示する場合はdynamicが使える
dynamic hogeFunc(bool result) {
if (result) {
return 100;
} else {
return false;
}
}
final dynamic value = hogeFunc(true);
null safety(ver2.12以降)
// 型に?を付けることでnull許容型となる
String? name;
print(name); // null
// nullの可能性があるため解析エラー
print(name.length);
// 1.nullチェックすることで実行可能
if (name != null) {
print(name.length);
}
// 2. nullの可能性がない場合はforce-unwrapも使用可能。
// 万が一nullの状態で処理が走ってしまうとアプリがクラッシュ
print(name!.length); //
// オプショナルチェインニング
print(name?.length) // nameがnullの場合はnullが出力される
条件分岐
enum Club {
soccer,
baseball,
tennis,
}
if
if (club == Club.soccer) {
print('soccer');
} else if (club == Club.baseball) {
print('baseball');
} else {
print('tennis');
}
三項演算子
print(result == true ? 'hoge' : 'fuga');
switch
switch (club) {
case Club.soccer:
print('soccer');
break;
case Club.baseball:
print('baseball');
break;
case Club.tennis:
print('tennis');
break;
// 条件に一致しない場合
default:
print('not match');
}
ループ処理
for
for (var i = 0; i < 10; i++) {
print(i);
}
for-in
final _fruits = ['apple', 'banana', 'grape', 'orange'];
for (final fruit in _fruits) {
print(fruit)
}
foreach
_fruits.forEach(print);
while
var i = 0;
while (i < 10) {
print(i);
i++;
}
do while
do {
print(i);
i++;
} while (i < 10);
非同期処理
asyncとawaitをセットで使う
void hoge() async {
print('遅延前');
await Future<void>.delayed(const Duration(seconds: 1));
print('遅延後');
}
関数
/*
戻り値の型: void -> 戻り値なし
引数の型: bool
引数名: 無名
*/
void hoge(bool result) {
print(result); // true or false
return 'hoge'; // 解析エラー
}
/*
戻り値の型: String
引数の有無: requiredパラメータがついているため必須
引数の型: String
引数名: userName
*/
String getSelfIntroduction({required String userName}) {
return '私の名前は$userNameです';
}
/*
引数の有無: どちらでも可。引数がなかった場合、デフォルト値の`名前無し`が値として入る。
null許容型ではないため、デフォルト値がないと解析エラー
引数の型: String
*/
String getSelfIntroduction({String userName = '名前なし'}) {
return '私の名前は$userNameです';
}
/*
引数の有無: どちらでも可。引数がなかった場合、nullが値として入る
引数の型: null許容型のString
*/
String getSelfIntroduction({String? userName}) {
return '私の名前は$userNameです';
}
配列
var list<int> = [1, 2, 3];
collection if
var list = [
1,
2,
3,
if (result) 4,
];
シャローコピー
var list2 = list;
print(list2 == list) // true
ディープコピー
var list2 = [...list];
print(list2 == list) // false
Cascade notation
final list = [1, 2, 3]
..shuffle()
..add(4);
print(list) // [3, 1, 2, 4]
Discussion