Go Iota (Japanese)

"Iota" from golang wiki

Go公式WikiのIotaの日本語意訳になります。
(元記事の最終更新日: 2015/11/08 rev.4)

定数宣言で使用するiotaについての説明が載っています。


Iota

概要

Go言語のiotaは、数値のインクリメント定義を簡単に行うためのconst宣言で使われる識別子です。iotaは式として使われるため、単純な列挙よりも一般性を提供します。

iotaの値は、予約語constがソースコードに現れたとき(例: 各constブロック)はいつでも数値のゼロにリセットし、各定数仕様(例: 各行ごと)の後に1つずつインクリメントします。
これは簡略定数表記(定数名の右側に置かれる値や型の省略)と組み合わせて、関連した定数をとても簡潔に定義できます。

公式仕様に良い例が2つ載っています。

http://golang.org/doc/go_spec.html#Iota

以下はEffective Goから抜粋したものになります。

type ByteSize float64

const (
	_           = iota // ブランク識別子へ代入し、最初の値は無視する
	KB ByteSize = 1 << (10 * iota)
	MB
	GB
	TB
	PB
	EB
	ZB
	YB
)

訳注: 公式仕様に載っている例も以下に掲載します。

const ( // (各constブロックごとに)iota は 0 にリセットします
	c0 = iota  // c0 == 0
	c1 = iota  // c1 == 1
	c2 = iota  // c2 == 2
)

const ( // (各constブロックごとに)iota は 0 にリセットします
	a = 1 << iota  // a == 1
	b = 1 << iota  // b == 2
	c = 3          // c == 3  (iotaは使われていませんが、インクリメントは続いています)
	d = 1 << iota  // d == 8
)

const ( // (各constブロックごとに)iota は 0 にリセットします
	u         = iota * 42  // u == 0     (*1 型付けされていない整数型)
	v float64 = iota * 42  // v == 42.0  (float64型)
	w         = iota * 42  // w == 84    (*1 型付けされていない整数型)
)

const x = iota  // x == 0  (iotaで0にリセット)
const y = iota  // y == 0  (iotaで0にリセット)
const (
	bit0, mask0 = 1 << iota, 1<<iota - 1  // bit0 == 1, mask0 == 0
	bit1, mask1                           // bit1 == 2, mask1 == 1
	_, _                                  // (iota == 2 をスキップ)
	bit3, mask3                           // bit3 == 8, mask3 == 7
)

訳注: *1 型付けされていない定数については公式ブログの記事を確認してみてください。
簡単な振る舞いについてはGo PlayGroundで確認できます。

 
comments powered by Disqus