[Golang] if文

2021-10-07 hit count image

Golangでif文を使う方法について説明します。

概要

今回のブログポストではGolangでif文を使う方法について説明します。このブログポストで紹介するコードは次のリンクで確認できます。

if文

Golangでは次のようにif文を使うことができます。if文を使って条件を検査し、条件に合う場合はその処理を実行することができます。

if 条件 {
  コードブログ
} else if 条件 {
  コードブログ
} else {
  コードブログ
}

if文を使う方法を確認するため、main.goファイルを生成して次のように作成します。

package main

import "fmt"

func main() {
  v := 89

  if v > 90 {
    fmt.Println("B")
  } else if v > 80 {
    fmt.Println("B")
  } else if v > 70 {
    fmt.Println("C")
  } else {
    fmt.Println("F")
  }
}

作成したプログラムを実行すると次のような結果が出ます。

# go run main.go
B

ショートサーキット

Golangでは条件式を実行するとき、ショートサーキット(Short circuit)が使えます。

false && 条件

論理演算を実行する時、前の条件が実行した後、後ろの条件を実行することになります。&&演算は2つの条件が全てtrueになるとtrueになります。したがって、上のように前の条件がfalseの場合、後ろの条件を実行してもtrueにはならないので、後ろの条件を実行しなくて、結果でfalseをリターンします。

true || 条件

上の条件も同じく、前の条件がすでにtrueで、or演算は2つ中で1つだけtrueになるとtrueをリターンするので、後ろの演算を実行する必要がありません。

Golangではこのようにショートサーキットが使えます。これを確認するためmain.goを次のように修正して確認します。

package main

import "fmt"

func first(result bool) bool {
  fmt.Println("first condition is called!")
  return result
}

func second() bool {
  fmt.Println("Second condition is called!")
  return true
}

func main() {
  fmt.Println("ex 1")
  if first(false) && second() {
  }

  fmt.Println("ex 2")
  if first(true) && second() {
  }

  fmt.Println("ex 3")
  if first(true) || second() {
  }

  fmt.Println("ex 4")
  if first(false) || second() {
  }
}

作成したプログラムを実行すると下記のような結果が出ます。

ex 1
first condition is called!
ex 2
first condition is called!
Second condition is called!
ex 3
first condition is called!
ex 4
first condition is called!
Second condition is called!

これでショートサーキットが使えて2番目の条件が実行されないことが確認できます。

条件文の初期化文

他の言語とは違ってGolangではif文で初期化文(Initialization statement)を使えます。

if 初期化文; 条件文 {
  コードブログ
}

初期化文で割り当てた変数は、条件文中で使えますし、条件文中のコードブログでも使えます。

func testFunc() (int, bool) {
  return 1, true
}

func main() {
  if v, success := testFunc(); success {
   fmt.Println(v)
  }

  fmt.Println(v) // ERROR
}

初期化文で宣言した変数は、外部では使えないので、上のように外部で使うとコンパイルエラーになります。

完了

これでGolangでif文を使う方法についてみてみました。またGolangの特有な文法である条件文の初期化分についてもみてみました。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

Posts