「はじめてのDart言語[基礎文法1]」 ~私文男子の格闘第6話~

#はじめに
(2020/5/15投稿)
最近iPad Proを購入し、非常に作業効率や勉強体験が変わって満足しています、私文男子です。

本日は前回紹介した**Dart Padを使って、簡単なコードを走らせてみる**ということをやってみたいと思います！
プログラミングの基礎中の基礎である

・Hello World
・算術演算
・変数/代入
・if文
・for文
・おまけのfizzbuzz

を紹介したいと思っています。

Dart言語とは?や、Dart Padって何？という部分は

[はじめてのDart言語(0) ~私文男子の格闘第5話~](https://qiita.com/shibundanshi/items/0e5cb02b25da9dc8a2cf)

を参考にしてもらえるとお分かりいただけるかと思います。
それではやっていきましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629658/92182c6c-5c01-c99f-2ff1-05f8593d70dc.png)

#Hello World!
プログラミングにおける1丁目1番地とも言える「Hello World」
Hello WorldとはコンソールにHello Worldという文字列を出力します。その場合にはprintという指令を出します。
1回やってみましょう！

```dart
void main() {
  print("Hello World");
}
-----------------------------
///出力
Hello World
```
出力できたでしょうか？
ポイントとしては
・文字の出力には**print()**を使う
・文字列を扱うときは**ダブルクオーテーション**で囲う("文字列")
・指令の**最後にはセミコロン**をつける(;)
でしたー！

#算術演算

###演算子に慣れる
プログラムにおいては簡単な計算もできます。
実際の数学と記号が違うことがあるので、違いを意識しながら学びましょう。

```dart

void main() {
  print(2+3); ///3+2=5(足し算)
  print(3-2); ///3-2=1(引き算)
  print(3*2); ///3×2=6(かけ算)
  print(6/2); ///6÷2=3(割り算)
  print(7%3); ///8÷3=2,,,1(剰余算)
}
-----------------------------
///出力
5
1
6
3
1
````
演算子を使ってうまくできましたでしょうか？
ポイントとしては
・実際の数学での**×と÷**を**＊と/**に置き換える必要がある。
・**割ったあまりを出力する演算子**として**%**を用いる

###優先順位

実際に計算するときはもっと複雑な場合が想定されます。
そこで演算子の優先順位や、かっこの扱いについて確認しておきます。

```dart
void main() {
  print(2 * 3 + 4 + 5); ///複数の演算子を使えるよ
  print(4 + 2 * 3 + 5); ///かけ算が優先されるよ
  print(4 + 5 + (2 + 1) * 2); ///カッコ内が先に計算されるよ
 }
------------------------------
///出力
15
15
15
```
ポイントとしては、
・複数の演算しを使うことができる
・演算の優先順位は**＊ = / = % > + = -**で考える
・計算の順序を変えたい場合は()を使って囲む
・カッコの中に同じカッコがあっても問題ない
といったところでしょうか。

#変数/代入
プログラミング言語では、数字や文字列・論理値(truefalse)など(値と呼ぶ)を名前をつけた**変数に"代入"**することができます。
これも見た方が早いので書いてみましょう。

```dart
void main() {
//ageという数値型の変数を作り数字を代入する
int age = 21;
//nameという文字型の変数を作り文字列を代入する
String name = "ダート太郎";
//出力する
print("年齢: $age名前: $name");
}
-------------------------------
///出力
年齢: 21 名前: ダート太郎
```
ポイントとしては、
・**[変数の種類][変数名]=[代入する値];**
のように、変数を宣言するときは String(文字型)やint(整数型)を最初に書き、変数名をその後に書く。

・最後の行に関しては、文字列の中(""の中)では、$ドルマークの後ろに変数の名前を付けたものを書くとその変数の中身を文字に変換して出力してくれる

といったところです。

#条件分岐( if文 )
Dart言語でも、「if文」を使って条件によって異なる動作をすることができます。
習うよりまず、「年齢を入力して馬券が買えるか判断する」コードをみてみましょう。

```dart
void main() {
///年齢の変数ageに年齢を代入
  int age = 19;
///条件式
  if(age < 20) { ///もしageの値が20未満だったら
    print("$age歳は馬券買えません");
  }
  else { ///そのほかの条件だったら
    print("$age歳は馬券買えます");
  }
}

------------------------------
//出力
19歳は馬券買えません
```

いよいよプログラムチックになってきました。
この条件式では
20歳未満かどうか判断(ifの部分)→20歳未満なら馬券買えません
↓
20歳以上なら馬券買えます(elseの部分)
というフローになっています。条件が面倒になってくるとフローチャートを書いておくと良いみたいです。

ポイントとしては、
・**if([条件式]){[条件式がtrueだったときの処理]}
　else{[条件式がfalseだったときの処理]}**
という形で書く。

・条件によって結果を3種類以上に分けたい場合は**else if([条件式2]){...}**といった具合に続ける。
else ifの意味としては、それじゃなければ...という感じでしょうか。

あとは、条件式について整理しておきます。

```dart
==: ///左右が同じ値
!=: ///左右が違う値
>: ///左のほうが大きい
<: ///左のほうが小さい
>=: ///左右同じか左のほうが大きい
<=: ///左右同じか左のほうが小さい
```
=(イコール)がひとつの時とふたつの時で意味が変わってくるので注意ですね！

#繰り返し文( for文 )
繰り返しは、同じ処理を入力する数字を変えて行うことです。
今回はn回目の誕生日を20回まで行い、最後に「成人おめでとう」と出力するプログラムを書いてみます。

```dart
void main() {
  for(int i = 1; i <= 20 ; i = i + 1){
    print("$i回目の誕生日");
  }
  print("成人おめでとう！");
}
----------------------------
///出力
1回目の誕生日
2回目の誕生日
///...(省略)....
19回目の誕生日
20回目の誕生日
成人おめでとう！
```
分かりにくいかと思いますが、書き方の形としては
**for([初期化式];[条件式];[更新式]){
[繰り返しやる処理];
}**
となっています。
今回は
初期化式...i=1 →変数iは1からはじまるよ
条件式...i<=20 →変数iは20以下までだよ
更新式...i = i+1 →変数iで処理し終わった後、次にする処理はi+1の処理だよ
という意味を持っています。
上から処理を行っていくので、繰り返し文の次の中カッコに「成人おめでとう」を書いておくと最後に出力されます。

#おまけ (fizzbuzz )
プログラムの特徴を比べる時によくfizzbuzzというプログラムが用いられます。
3で割れる数字をfizz / 5で割れる数をbuzz / どちらもわれる数(15で割れる数)をfizzbuzzと返します。
今回は1番シンプルなfor文で20まで回して、if文で分類していくプログラムで実装していきます。

```dart
void main(){
  for(int i = 1; i <= 20 ; i = i + 1){
    if(i % 15 == 0){
    print("fizzbuzz");
  }
    else if(i % 5 == 0){
      print("buzz");
    }
    else if(i % 3 == 0){
      print("fizz");
    }
    else{
      print(i);
    }
  }
}
-----------------------------------
///出力
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
16
17
fizz
19
buzz
```

fizzbuzzまでとりあえず習得できました！！

#感想
最初の方は余裕と思っていたのですが、実際に書く言語と近い部分遠い部分があることが分かりました。

たくさんエラーが出ましたが、それでも試しに試すとなんとかいくものということもわかり、今後の自信にもなりました。
文法もう少しちゃんとやらないと無理そうなのでしばらく文法シリーズ続きます！