Dartの基礎を勉強しました(2)

<h1>前置き</h1>
<h2>前回の続き</h2>
前回は、[Hello World!]の出力と変数について学んだことを記載しましたね。
なので、今回は条件分岐の方を勉強したので、まとめていきたいと思います。

自分的には、早くDartの基礎を押さえて、Android、iOSに人工知能を搭載したものを作成したいですね。
意思や感情といった、人間が持つものをAndroid、iOS端末のアプリに組み込んだ時何が起こるか…
さて、自分の目標はここまでにして、条件分岐について記載していきましょう。

<h1>条件分岐</h1>
<h2>if文</h2>
では、まずは「if文」ですね。
どの言語にでもあるif文ですが、まぁ、基本的なものを勉強しているので記載しておきましょう。

```dart
void main() {
  
  var a = 0;
  
  if(a < 1){
    print("犬");
  }else if (a < 2){
    print("猫");
  }else{
    print("鳥");
  }
}
```
こんな感じですね。
演算子の補足も後でしましょうか。
先にプログラムの内容からいきましょう。

このif文は、
varを使用していることから、型推論型で数値を入れてif文を回しています。
条件式ですが、
上から順々にやっていきましょう。

```dart
//a が 1より小さい場合は 犬 を出力する
if(a < 1){print("犬");} 
```

```dart
//a が 1より小さい場合は 犬 を出力する
//そうでない場合、もし　a が 2より小さい場合は　猫 を出力する
if(a < 1){print("犬");}
else if (a < 2){print("猫");}
```

```dart
//a が 1より小さい場合は 犬 を出力する
//そうでない場合、もし　a が 2より小さい場合は　猫 を出力する
//全ての条件に当てはまらな場合は、 鳥 を出力する
if(a < 1){print("犬");}
else if (a < 2){print("猫");}
else{print("鳥");}
```
今回は簡単にこんな感じの構造をしています。
ifは　*もし 条件式1 が成立する場合は　〜　を*
elseは ifは　*条件式1が成立しない場合、もし　条件式2が成立する場合は　〜　を*
else　*全てが成り立たない場合は　〜　を*
という風に表すと簡単に理解できるかもしれませんね。

では、演算子の補足をしましょうか。

<h3>補足:演算子</h3>
プログラム言語ごとに、演算子は異なる部分があるかもしれません
[&&]で[〜かつ〜]と表現する場合や[||]で[〜または〜]と表現する場合もありますね。
まぁ、そんなに違いはないと思いますが…
それぞれの言語で一応、使用する演算子はチェックしておくといいでしょう。
とりあえず、まとめておきましょうか

|演算子|意味|備考|
|:---:|:---:|:---:|
|a < b|a より bの方が小さい|含まない|
|a > b|a より bの方が大きい|含まない|
|a <= b|a が b以下の場合|含む|
|a >= b|a が b以上の場合|含む|
|a == b|a が bと等しい場合|-|
|a = b|a が bと等しい場合|-|
|a != b|a が bと等しくない場合|-|
|a <> b|a が bと等しくない場合|-|

上記のようのものがありますね。何度も書きますが、
*言語ごとに多少の違いがありますので注意してください。*

さてさて、最後に[swtich-case文]について解説して今回は終わりましょう。

<h2>switch-case文</h2>
switch-case文についてもif文同様に、まずは、プログラムを載せていきましょう。

```dart
void main() {
  
  var a = 0;
  
  switch(a){
    case 0:
      print("犬");
      break;
    case 1:
      print("猫");
      break;
    default:
      print("鳥");
      break;
  }
}
```
こんな感じになりますね。
さて、ここから細かくしていきましょう。

```dart
//switch(式)
switch(a){}
```
この部分で重要になるのは
*何の式を条件分岐に当てはめたいのか*
ですね。(表現は人それぞれなので納得できる人、できない人がいますが、自分はこの表現で納得できるためこの表現を使います。解釈違いでしたら、自分の解釈を見つけてください。)
なので、このswitchの()の部分には条件分岐させたい「式」を当てはめていきましょう。
このswitch以降は条件分岐の式を書いていきましょう。

```dart
case 0:
  print("犬");
  break; //breakでループ終了
case 1:
  print("猫");
  break; //breakでループ終了
```
され、条件分岐の中で中間部分のこちらですね。
これを文字で表してみましょう。


```dart
ケース(式が) 0の場合:
  "犬"を出力する;
  ループ終了;
ケース(式が) 1の場合:
  "猫"を出力する;
  ループ終了;
```
別の表し方をすると

```dart
ケース(式)に入れられる値が一致する場合:
　　"犬"を出力する;
　　ループ終了;
ケース(式)に入れられる値が一致する場合:
　　"猫"を出力する;
　　ループ終了;
```
結構見辛い…ですが！！まぁ、よしとしましょう。
ここでポイントなのは*条件式の最後には、[break]をつける*
breakをつけることで、ループを終了させます。
switch-case文を使用する時は、[break]を忘れずつけましょう。

さて、ここで疑問に思うのは[default]の存在ですね。
defalutは簡単に表すのであれば、*どの条件にも当てはまらない場合は*という感じですね。または*どの条件とも一致しない場合は*という感じです。if文のelseのような役割をしています。

なので、defaultはエラー文なんかにも使えるかもしれません。

再度、コメントを記載して全体をプログラム全体を見てみましょう。

```dart
void main() {
  //型推論で値を定義
  var a = 0;
  
  //条件式(a)を格納
  switch(a){
    //条件式が0の場合
    case 0:
      //"犬"を出力
      print("犬");
      //ループ終了
      break;
    //条件式が2の場合
    case 1:
      //"猫"を出力
      print("猫");
      //ループ終了
      break;
    //条件式がどれにも当てはまらない場合
    default:
      //"鳥"を出力
      print("鳥");
      //ループ終了
      break;
```
または

```dart
void main() {
  //型推論で値を定義
  var a = 0;
  
  //条件式(a)を格納
  switch(a){
    //条件式がcaseの値と一致する場合
    case 0:
      //"犬"を出力
      print("犬");
      //ループ終了
      break;
    //条件式がcaseの値と一致する場合
    case 1:
      //"猫"を出力
      print("猫");
      //ループ終了
      break;
    //条件式がどのcaseの値とも当てはまらない場合
    default:
      //"鳥"を出力
      print("鳥");
      //ループ終了
      break;
```

こんな感じですね。


では、今回if文とswitch-case文について勉強しましたが、これはどの言語にもあるようなものなので、見なくてもわかるという方が多いかもしれません。まだ理解できていないなぁ。という方は実際に手を動かしたり、自分でコードを組み直してトライするのをお勧めします。

いつもの挨拶文を下に書いて終わりにします。
ここまで読んでいただき、ありがとうございました。
では、また次回。

<h1>挨拶</h1>
どうも、組込みエンジニアとして、とある企業におります粉です。

・組込みエンジニアですがAIエンジニア、機械学習エンジニアとして転職したいので、自身でいろいろと勉強を行っております。

・なんでAIエンジニアや機械学習エンジニアになりたいの？と疑問をもたれる方も多いと思いますので、簡単に説明させていただきます。
１、元はAIを作ってみたい、社会問題、労働に関してもっと働きやすい環境が必要なのではないか？と考えたため様々な課題をAIなどの先端技術でアプローチをかけてみたいと思い、AIエンジニアを目指しました。
２、ですが、今やっているのは組込みエンジニアのため、使用する技術、言語が違うといったことから、独学でやってみようと思いまして、最近勉強をはじめました。
３、転職を目指す、自身の夢を叶えたいという願いもありますので、こうやって学んだことを記事しています。

・いろいろとお話ししましたが、まずは、私よりも知識、技術が豊富な先輩方から多くのことを意見、修正点、アドバイスをいただけることを楽しみにしています。

・まだまだ新参者、理解が足りていない部分もあるので記事を書きながら、修正を繰り返して理解を深めれればと思っております。(AIを研究している企業や研究機関に転職したいです。

・こんな手法もあるぞ、やり方はこうだ！！などの意見も募集しております。