面白い記事を見つけたので。
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 であるということの意味が実感できるかもしれない。
-
:=
で構成される statement は short variable declarations と呼ばれる「宣言」(代入ではない)を構成するもので,その右辺は Expression (のリスト)でなければならない。したがって statement は記述できない。 ↩