動機
Dart完全に理解したから
(訳:全然わからんから)
前提
当記事は詳細事項は記述していません。
できるだけ簡単な言葉で手短に表現していますので、詳しく知りたい方は公式ドキュメントを参考にしてください。
型
・int(整数)
・double(小数)
・String(文字列)
・bool(真偽値)
・List(配列)
・Map(連想配列)
・Set(順番がないユニークな配列)
Null許容
Dartでは、nullを許容するか否かを明示できます。
int?
のように、?
が付いていればnullable
付いていなければnot nullです。
String? hoge = null //OK!
String hoge = null //エラー
変数 宣言
宣言の仕方は下記です。
String hoge = "こんにちは";
int huga = 1;
varとは、型推論してくれる変数宣言方法です。
何の型でも入れてOKなやつです。
ただ、varを多様すると重くなるので注意。
定数
・const
・final
共通項は
・再代入ができないこと
・型推論してくれること。
違いは、「いつ、その定数を見られるか」です。
constは、コンパイル時に見られるため、コンパイル時には値が確定しておく必要があります。
finalは、コンパイル後に見られるため、コンパイル後でも値を格納できます。
const hoge = "もう変更できないよ";
final huga;
//↓コンパイル後
huga = DateTime.now();
参照範囲制限
Dartでは、頭に_
を付けると参照範囲の制限を行うことができます。
そのクラスやライブラリのみでしか参照できない ということです。
String _hoge = "サンプル";
そのプロジェクトに同じ名前の変数が複数ある場合などに、間違えて使用しないために制限します。
文法
〜条件分岐〜
if文
if(条件式){
//処理
}else if{
//処理
}
switch文
switch (式(変数)) {
case A:
//式が値Aに当てはまる場合に実行される処理
break;
case B:
//式が値Bに当てはまる場合に実行される処理
break;
case C:
//式が値Cに当てはまる場合に実行される処理
break;
}
三項演算子
print(result == true ? 'A' : 'B');
result
がtrue
の場合Aを出力
false
の場合はBを出力
〜ループ処理〜
for文
for (var i = 0; i < 10; i++) {
print(i);
}
左)変数 i を定義
中)i が10より小さければ繰り返す条件式
右)1回回るごとに値を1加算
for-in文
final _words = ['A', 'B', 'C', 'D'];
for (final word in _words) {
print(word)
}
//出力結果:A B C D
定数_words
を、変数word
に取り出し、出力している。
forEach文
List words = ['A', 'B', 'C'];
words.forEach((word) {
print(word);
});
// 省略して下記のようにも書ける。
words.forEach((word) => print(word));
// さらに省略することもできる。
words.forEach(print);
変数words
をword
に分解して、個数分回しています。
ただし、Map型の場合は少し違います。
Map map = {
'apple': 'リンゴ',
'orange': 'オレンジ',
'banana': 'バナナ'
};
map.forEach((var key, var value) {
print('$key : $value');
});
//出力結果:apple:リンゴ orange:オレンジ banana:バナナ
Map型の場合は、引数にKeyとValueの二つを指定し、型も明示しなくてはいけません。
※ KeyかValueの片方のみ、取り出したい場合は、別の記載方法になる。
while文
var i = 0;
while (i < 10) {
print(i);
i++;
}
処理内容は、for文のものと同じです。
do-while文
do{
//処理
}while(条件式)
do-while文は、処理実行後にループするか否か判断します。
int num = 0;
do {
print(num);
num++;
} while (num < 3);
print('ループ終了!');
//出力結果:0 1 2 ループ終了!
async-await文(非同期処理)
async-await文は、理解するまでにかなり時間がかかりました。
例文法は記載しますが、詳しく解説しているサイトを参考にした方がいいと思います。
【追記】気が向いたので解説します。
・async - 「この関数は全て非同期で行うよ」 という宣言
・await - 「でも、ワイが終わるまでは待っといてな」 という意味
void main() {
print('ステップ1');
step2();
print('ステップ3');
}
Future<void> step2() async {
print('ステップ2-1');
await Future.delayed(Duration(seconds: 3));
print('ステップ2-2');
}
//出力結果:
//ステップ1
//ステップ2-1
//ステップ3
//ステップ2-2
① ステップ1が出力
② step2()が発動し、ステップ2-1が出力される
③ awaitさん登場、「ワイが終わるまで(3秒間)待ってくれ」
④ ステップ3が出力
⑤ 「③」が終わり、ステップ2-2が出力
恐らく下記疑問が湧いたと思います。
・await
さんが「待って」と言ってるのに、なぜステップ3が出力されたんや?
・Future<void>
←これなんなん?
実はコレ、二つとも関係があるんです。
まず、Future<void>
は、非同期関数を宣言する際に書くものです。(そういう決まり事)
関数自体が非同期扱いされるので、例えstep2()
が終わってなくても次の処理に進んでしまうのです。
await
さんが「待って」と言えるのは、その関数の中の処理に対してだけなんです。
所感
最後までお読み頂き、ありがとうございます。
ずっとPHPしか触っていなかったので、とても新鮮な印象がありました。
一応、基礎中の基礎は書きましたが、まだ記載していない文法等もあるので、随時更新していきます。
誤記などありましたらコメント頂けると助かります。