golangの日記

Go言語を中心にプログラミングについてのブログ

Go言語(golang) if文の使い方

golang.png


Go言語のif文(条件分岐)の使い方

if [条件式] {
    // 何らかの処理
} else if [条件式] {
    // 何らかの処理
} else {
    // 何らかの処理
}





目次



条件式


以下の比較演算子と論理演算子を使ってif文の条件式を書きます。


比較演算子


==  左辺と右辺が等しい
!=  左辺と右辺が等しくない
<   左辺が右辺より小さい
<=  左辺が右辺と等しいか小さい
>   左辺が右辺より大きい
>=  左辺が右辺と等しいか大きい


bool型は、正しいか否か(true/false)を表す。
比較演算子を使うとbool型の値になる。

package main

func main() {
    a := 1 == 1
    println(a) // true

    b := 1 == 2
    println(b) // false

    c := 1 != 1
    println(c) // false

    d := 1 != 2
    println(d) // true

    e := 1 < 1
    println(e) // false

    f := 1 < 2
    println(f) // true

    g := 1 <= 1
    println(g) // true

    h := 1 <= 2
    println(h) // true

    i := 1 > 1
    println(i) // false

    j := 2 > 1
    println(j) // true

    k := 1 >= 1
    println(k) // true

    l := 2 >= 1
    println(l) // true
}



論理演算子


&&  AND
||  OR
!   NOT 否定


論理演算子を使うと比較演算子を使った比較を繋げることができる。

package main

func main() {
    a := 1 == 1 && 2 > 1
    println(a) // true

    b := 100 == 1 && 2 > 1
    println(b) // false

    c := 1 == 1 || 2 > 1
    println(c) // true

    d := 100 == 1 || 2 > 1
    println(d) // true

    e := 100 == 1 || 100 < 1
    println(e) // false

    f := 1 == 1 && (2 > 1 || 1 < 2)
    println(f) // true

    g := 1 != 1
    println(g) // false

    h := 100 != 1
    println(h) // true

    i := !(1 == 1)
    println(i) // false
}



if文の基本的な使い方


条件式が true であれば そのあとの {} 内の処理が実行される

package main

func main() {
    n := 10

    if n == 10 {
        println("n is 10") // n is 10
    }
}



if ... else if


else if で複数の条件を書くことができる。
上に書いた条件が true の場合は、その後の条件で true でも実行されない。
つまり、先に true になった条件の {} 内の処理が実行される。

package main

func main() {
    s := "baz"

    if s == "foo" {
        // 実行されない
        println(s)
    } else if s == "bar" {
        // 実行されない
        println(s)
    } else if s == "baz" {
        // 実行される
        println(s) // baz
    }
}



if ... else


else で条件式がどれも false だったら実行する処理。

package main

func main() {
    s := "baz"

    if s == "foo" {
        println(s)
    } else {
        // 実行される
        println(s) // baz
    }


    if s == "foo" {
        // 実行されない
        println(s)
    } else if s == "bar" {
        // 実行されない
        println(s)
    } else if s == "baz" {
        // 実行される
        println(s) // baz
    } else {
        // 実行されない
        println(s)
    }
}



シンプルステートメント


if文のみで使用する変数は以下のように書くこともできる

if [変数名] := [変数の値]; [条件式] {

}


package main

func main() {
    // 変数に代入
    if n := 10; n > 100 {
        println(n)
    } else if n > 10 {
        println(n)
    } else {
        println(n) // 10
    }

    // 変数 n は if文のスコープ内でのみ使用できるので以下はエラー
    println(n) // error
}


関数の戻り値を変数に受け取る

package main

func integer() (int, bool) {
    return 10, true
}

func main() {
    if n, ok := integer(); ok && n == 10 {
        println(n) // 10
    } else {
        println(n)
    }
}



条件式について


以下のように論理演算子を使って、いくつも条件を繋げると読みづらい。
なので、脱落方式で読みやすく書いたほうがいい

if i > 10 && i < 20 && i%2 == 0 && i/3 > 5 {


package main

func main() {
    for i := 0; i < 30; i++ {
        if i <= 10 || i >= 20 {
            continue
        }

        if i%2 != 0 {
            continue
        }

        if i/3 <= 5 {
            continue
        }

        println(i)
    }
}


package main

func isEighteen(i int) bool {
    if i <= 10 || i >= 20 {
        return false
    }

    if i%2 != 0 {
        return false
    }

    if i/3 <= 5 {
        return false
    }

    return true
}

func main() {
    for i := 0; i < 30; i++ {
        if isEighteen(i) {
            println(i)
        }
    }
}