1. Qiita
  2. 投稿
  3. Go

Go 言語の `++` や `--` は演算子ではない

  • 3
    いいね
  • 0
    コメント

面白い記事を見つけたので。

Go 言語にも ++-- はあるが,実はこれは演算子ではなく statement である。

IncDecStmt = Expression ( "++" | "--" ) .

故に,うっかり

package main

import "fmt"

func main() {
    i := 1
    a := i++
    fmt.Println(a)
}

などと書いてコンパイル・実行しようとすると

syntax error: unexpected ++ at end of statement

とか言われて怒られる1。この場合は素直に

package main

import "fmt"

func main() {
    i := 1
    i++
    a := i
    fmt.Println(a)
}

と書くか

package main

import "fmt"

func main() {
    i := 1
    a := i
    i++
    fmt.Println(a)
}

と書けばよい。「ポストインクリメント」「プレインクリメント」みたいなことを考える必要はないのだ。

ちなみに ++-- は以下の assignment statements と同義である。

IncDec statement Assignment
x++ x += 1
x-- x -= 1

当然ながら

package main

import "fmt"

func main() {
    i := 1
    a := i += 1
    fmt.Println(a)
}

も以下のエラーを吐いて怒られる。

syntax error: unexpected += at end of statement

最初のコードと比較すれば ++-- が statement であるということの意味が実感できるかもしれない。


  1. := で構成される statement は short variable declarations と呼ばれる「宣言」(代入ではない)を構成するもので,その右辺は Expression (のリスト)でなければならない。したがって statement は記述できない。