条件分岐 ( Go入門連載 第3回 )

2 min read読了の目安(約2500字

シリーズの目次

  1. Goの導入 for MacOS
  2. パッケージ
  3. 変数とデータ型
  4. 条件分岐
  5. ループ処理
  6. 配列
  7. 関数

if文

  • if 条件式 {} で処理を分岐できる
  • 条件式の結果が true なら {} 内を処理
  • 条件式は () で囲まなくてOK
func main() {
    animal := "dog"
    if animal == "dog" {
        println("It is equal!!")
    }
}
  • else は if が false の場合に else {} 内の処理を実行する
func main() {
    animal := "cat"
    if animal == "dog" {
        println("It is equal!!")
    } else {
        println("It is not equal!!")
    }
}
  • else if は if が false の場合のみ評価される
  • 式の結果が false であれば else if 条件{} 内を処理
  • else if が false の場合は else {} 内を処理
func main() {
    animal := "cat"
    if animal == "dog" {
        println("It is dog!!")
    } else animal == "cat" {
        println("It is cat!!")
    } else {
        println("It is other animal")
    }
}
  • if で ; を使うと、代入と式を1行で書ける
  • この書き方で宣言した変数のスコープはこの一連のifの中のみである(elseも含む)
func main() {
    if animal := "fox"; animal == "dog" {
        println("It is dog!!")
    } else {
        println("It is other animal")
    }
}

Switch文

  • switch 条件式 {} で条件分岐できる
  • case 値: で式の結果と一致した値の case文は実行される
  • 値は式が返す型と同じ型でなければいけない
func main() {
    name := "dog"
    switch animal {
        case "dog":
	    println("It is dog!!")
	case "cat":
	    println("It is cat!!")
	case "fox":
	    println("It is fox!!")
    }
}
  • case の処理が終わったらそのまあまswitchブロックを抜ける
  • 抜けずにそのまま次の case の処理をしたい場合は fallthrough を使う
func main() {
    name := "dog"
    switch animal {
        case "dog":
	    println("It is dog!!")
	    fallthrough
	case "cat":
	    println("It is cat!!")
    }
}
  • case でも式を使える、その場合 switch の後ろに式を書かない。
  • それぞれの case で違うデータ型を使える
func main() {
    name := "dog"
    switch {
        case 1 == 1:
	    println("1==1")
        case "cat" == "dog":
	    println("cat==dog")
    }
}

演習問題

今回の演習ではこの問題を解いていきましょう!!

https://atcoder.jp/contests/abc082/tasks/abc082_a
回答例(分からなかった場合のみ確認してください)
package main

import "fmt"

func main() {
    var n, a int
    fmt.Scan(&n, &a)
  if n % 500 <= a {
      fmt.Println("Yes")
  } else {
      fmt.Println("No")
  }
}