本ページはDartについて学習した内容を記録したものです。

if, else

やっと制御文まできた。

まずはコードをみよう。

1
2
3
4
5
6
7
8
void main() {
  int number = 10;
  if (number % 2 == 0) {
    print('$numberは偶数です。');
  } else {
    print('$numberは奇数です。');
  }
}
1
10は偶数です。

他の言語と一緒だな。else ifも同じだ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() {
  int tensu = 69;
  if (tensu > 90) {
    print('エリート!');
  } else if (tensu > 80) {
    print('まあまあ優秀です!');
  } else if (tensu > 70) {
    print('普通かな!');
  } else if (tensu > 60) {
    print('勉強しなさい');
  } else {
    print('大丈夫!やればできる!');
  }
}
1
勉強しなさい

swich

とにかくコードみよう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main() {
  String colorHex = '';
  int number = 10;
  switch(number % 3) {
    case 0:
      colorHex = '#FF0000';
      break;
    case 1:
      colorHex = '#00FF00';
      break;
    default:
      colorHex = '#0000FF';
  }
  print(colorHex);
}
1
#00FF00

switchの条件に「number % 3」を指定したので結果は0、1、2のどちらだ。

値は10なので結果は1である。各case文であり得る値を指定して該当するcaseが実施される。今回は1なのでcolorHexには’#00FF00’が設定される。

breakを書かないとその次のcaseまで実施されると思ったら、思ったのと違った。

1
2
3
4
5
6
7
8
9
10
11
12
13
void main() {
  String colorHex = '';
  int number = 9;
  switch(number % 3) {
    case 0:
      colorHex = '#FF0000';
    case 1:
      colorHex = '#00FF00';
    default:
      colorHex = '#0000FF';
  }
  print(colorHex);
}
1
#FF0000

Javaとかだと結果は’#0000FF’である。公式ドキュメントをみると該当case実行が終わったら、最後にジャンプするとなっているので明示的にbreakを書くのは要らない。

公式ドキュメント

for

forは代表的なループ文で初期値、条件、増減の3つを指定するのが一般的な使い方だ。

1
2
3
4
5
6
7
8
void main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  int total = 0;
  for (var i = 0; i < numbers.length; i++) {
    total += numbers[i];
  }
  print(total);
}
1
55

一般的な使い方は3つの内容を指定するものであるが、Listは違うやり方もできる。

1
2
3
4
5
6
void main() {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  for (int number in numbers) {
    print(number);
  }
}
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

while

whileの場合は条件のみ指定する。条件がtrueの間に反復されるので常にtrueになる条件にすると無限に終わらない。

1
2
3
4
5
6
7
8
9
10
11
void main() {
  int count = 1;
  int total = 0;
  
  while(count <= 10) {
    print(count);
    total += count;
    count++;
  }
  print(total);
}
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
55

do-while

whileと似ているが、whileは条件チェック後、実施になるが、do-whileはまずは実施してから条件をチェックする。

1
2
3
4
5
6
7
8
9
10
11
void main() {
  int count = 1;
  int total = 0;
  
  do {
    print(count);
    total += count;
    count++;
  } while(count <= 10);
  print(total);
}
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
55

break, continue

breakもcontinueもループで使えるものだ。breakはループを終了したい時、continueはループの中で今回はスキップしたいときに使う。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() {
  int number = 0;
  
  while(number < 100) {
    number++;
    if (number % 2 == 0) {
      continue;
    }
    print(number);
    if (number > 10) {
      break;
    }
  }
}
1
2
3
4
5
6
1
3
5
7
9
11

enum

enumはタイピングミスなどを防ぎ、ぱっと見コードの内容がわかりやすくなる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enum Status {
  approved,
  pending,
  rejected,
}
void main() {
  Status status = Status.pending;
  switch(status) {
    case Status.pending:
      print('保留中です。');
    case Status.rejected:
      print('却下されました。');
    case Status.approved:
      print('承認されました。');
  }
}
1
保留中です。

Function

ファンクションは他の言語と同じな感じかな。代表的な使い方は同じだ。

まずは2つのパラメータをもらい、2つのパラメータを合算した結果が偶数ならtrue、奇数ならfalseを返却するファンクションを作成してみよう。

1
2
3
4
5
6
7
8
9
void main() {
  var result = isEven(2, 4);
  print(result);
}

bool isEven(int num1, int num2) {
  var total = num1 + num2;
  return total % 2 == 0;
}
1
true

最初に返却値を指定してファンクション名を宣言し、その次にパラメータ、それと処理。他の言語と差はないように見える。

上のファンクションのパラメータの方式は位置指定である。パラメータの位置でどんなパラメータか決められることになる。

1番目はnum1であり、2番目はnum2である。呼び出す側で勝手に変えることはできない。それに呼び出すときに何番目に何を指定するかわかっていないといけない。

通常はそうだろうけど、Dartではもうちょっと使いやすくできる。パラメータの名前を指定できることだ。

1
2
3
4
5
6
7
8
9
void main() {
  var result = isEven(first: 2, second: 4);
  print(result);
}

bool isEven({int? first, int? second}) {
  var total = first! + second!;
  return total % 2 == 0;
}
1
true

{}を使うことで呼び出す側でパラメータ名を指定して渡すことができる。名前を指定するので順序は関係ない。

上のコードで変なのが見つかるかもしれない。パラメータ宣言のはてなと使うところのびっくりマークだ。

あれがないと怒られるのでつけている。理由は上記のままであると名前指定はパラメータを渡さない可能性も出てくるのでnullの可能性があるからnullを許容しないと怒られる。

Example

また、使うところでもこれはnullの可能性はないよと伝えないと怒られる。

上記のように使い方ではなく、明示的にする方法が2つある。1つ目は必須にすること、2つ目はデフォルト値を指定することだ。

1
2
3
4
5
6
7
8
9
void main() {
  var result = isEven(first: 2, second: 4);
  print(result);
}

bool isEven({required int first, int second = 0}) {
  var total = first + second;
  return total % 2 == 0;
}

結果は先と一緒であるがrequiredが必須項目にすることで呼び出す側で指定しないとエラーになる。

二つ目のパラメータはデフォルト値を指定することで呼び出す側でパラメータを指定しなくてもnullになる心配はなくなる。

アローファンクション

簡単に返却する機能ならアローファンクションが使える。

1
2
3
4
5
6
7
8
void main() {
  int num1 = 10;
  int num2 = 20;
  int num3 = total(num1, num2);
  print(num3);
}

int total(int x, int y) => x + y;
1
30

typedef

typedefはタイプを定義できるものである。

typedefの面白い使い方があるので記録を残しておく。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
typedef Operation = int Function(int x, int y);

int add(int x, int y) => x + y;

int subtract(int x, int y) => x - y;

int calc(int x, int y, Operation operation) => operation(x, y);

void main() {
  int x = 100;
  int y = 50;
  
  Operation op = add;
  int result = op(x, y);
  print(result);
  
  op = subtract;
  result = op(x, y);
  print(result);
  
  result = calc(x, y, add);
  print(result);
  
  result = calc(x, y, subtract);
  print(result);
}
1
2
3
4
150
50
150
50

タグ:

カテゴリー:

更新日時:

コメントする