Go言語-条件分岐

# 条件分岐
プログラミング基本からGoの理解を文字におこして行こうと思います！
[Go言語の基本❶はこちら](https://qiita.com/coxcoa/items/01cd4e30e965bcebb3ee)
[Go言語の基本❷はこちら](https://qiita.com/coxcoa/items/55e126bcbf67cf7505bc)

### 条件分岐とは
ある条件に当てはまるかどうかによって処理を分ける
例えば、明日の天気(条件)によって傘を持っていくか(処理)を変える

### if文
```go
package main
func main(){
  score := 100
  if score > 60 {
    println("合格") //条件が成り立つ時の処理
  }
}

//コンソール
合格
```
if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能

### if文の条件式
```go
package main
func main(){
  score := 100
  if score >= 60 {
    println("合格") //scoreが60より大きい時、もしくは等しい時に成り立つ
  }
}

//コンソール
合格
```
if文は、if 条件式 { 処理 } というように記述

### 真偽値
```go
package main
func main(){
  score := 70
  println(score>60)
  println(score>80)
}

//コンソール
true
false
```
「真偽値型」には「true」と「false」という2つの値が存在

比較演算子を用いた条件式は、成り立つときは「true」
成り立たないときは「false」という値

### 比較演算子
```go
package main
func main(){
  score := １００
  if score == 100 { //scoreが100の時true
  }
}
```
```
x == y  左右の値が等しい時 true
x != y  左右の値が等しくない時 true
```
比較演算子→等しいか調べる

### 代表的な比較演算子
```
//等しいか調べる
x == y  左右の値が等しい時 true
x != y  左右の値が等しくない時 true

//大小を比べる
x < y   右辺の方が大きい時 true
x > y   右辺の方が小さい時 true
x =< y  右辺の方が大きい、等しい時 true
x >= y  右辺の方が小さい、等しい時 true
```

### else(条件に一致しない場合の処理)
```go
package main
func main(){
  score := 50
  if score > 80 { 
    println("合格")
  } else {
      println("失格") //条件式の結果がfalseの時に実行
  }
}

//コンソール
失格
```
if文に「else」を組み合わせることで
「もし○○ならば●●を行う、そうでなければ▲▲を行う」という条件分岐ができる

### else if(条件に一致しない場合、さらに条件分岐したい場合)
```go
package main
func main(){
  score := 50
  if score == 100 { 
      println("卒業")
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
　}
}

//コンソール
追試
```
else ifを用いると
「もし○○ならば●●を行う、△△ならば▲▲を行う、
どちらでもなければ□□を行う」という処理ができる

### else if(2)
```go
package main
func main(){
  score := 100
  if score == 100 { 
      println("卒業") //以降の処理は実行されない
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
　}
}

//コンソール
卒業
```
「else if」はいくつでもつなげて書くことができる

上から順に条件が成り立つか判断され
最初に条件に合致した部分の処理だけが行われる

### else if(2)
```go
package main
func main(){
  score := 100
  if score == 100 { 
      println("卒業") //以降の処理は実行されない
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
　}
}

//コンソール
卒業
```

### かつ(&&)
```go
package main
func main(){
  time := 12
  if time > 10 && time < 19 {
    println("仕事開始")
  }
}
```
&&を用いて複数の条件式を組み合わせると
全ての条件式がtrueの場合のみ全体としてtrueになる

```
//論理演算子
true && true      true
true && false     false
false && true     false
false && false    false
```

### または(||)
```go
package main
func main(){
  time := 15
  if time == 10 || time == 15 {
    println("おやつタイム")
  }
}
```
||を用いて複数の条件式を組み合わせると
複数の条件式のうち1つでもtrueであれば全体がtrueになる

```
//論理演算子
true  || true     true
true  || false    true
false || true     true
false || false    false
```

### 否定(!)
```go
package main
func main(){
  time := 15
  if !(time == 16) {
    println("おやつタイムではない")
  }
}
```
!(条件式)とすると
条件式が「true」であれば「false」に、「false」であれば「true」

### switch文
```
swich 条件の値 {
  case 値1:
    //処理
  case 値2:
    //処理
  case 値2:
    //処理
}
```
条件分岐にはif文のほかに、switch文という構文もある
条件の値がcaseの値と一致するとき、処理が実行

caseの後ろのコロン（:）などは忘れがちなので注意

### if文とswitch文
```go
//if文
x := 8
if x % 2 == 0 {
    println("偶数です")
} else if x % 2 == 1 {
    println("奇数です")
}
```
```go
//switch文
x := 8
switch x % 2 {
  case 0: //一致
    println("偶数") //実行
  case 1:
    println("奇数")
}
```
switch文は「とある値（今回はx % 2）が何であるか」で処理を分けたいとき
（特にその分岐が多いとき）、if文よりシンプルに書ける場合がある

### 複数の値を指定する
```go
//if文
year := 1994
if year == 1994 || year == 2005 {　//1994がtrue
  println("私が産まれた年")
}else if year == 2000 {
   println("弟が産まれた年")
}
```
```go
//switch文
year := 1994
switch year {
  case 1994,2005: //1994に一致
    println("私が産まれた年") //実行 
  case 2000:
    println("弟が産まれた年")
}
```
caseのあとの値は、コンマ（,）を用いて複数指定することができる

コンマで複数の値を指定すると
switchの値がいずれかに一致すれば、そのcaseの処理が実行

### default
```go
//if文
if rank == 1 {
     println("優勝")
} else if rank == 2 {
     println("準優勝")
} else if rank == 3 {
     println("3位")
} else {
     println("最下位")
}
```
```go
//switch文
switch rank {
  case 1:
    println("優勝")
  case 2:
    println("準優勝")
  case 3:
    println("3位")
  default:
    println("最下位")
```
どのcaseとも一致しなかったときに実行する処理を、defaultに指定できる
if文のelseに似ている