1. ホーム
  2. スクリプト・コラム
  3. ゴラン

囲碁言語の基本的な列挙の使い方と例

2022-01-06 03:30:47

概要

変数の値を1つずつリストアップし、変数はリストアップされた値の範囲に限定される

Goには列挙データ型はありませんが、iotaパターンでconstを使って実装することができます

I. 一般的な列挙

const (
	 cpp = 0
	 java = 1
	 python = 2
	 golang = 3
)


II. 自己増殖型列挙

iotaは定数を含む式でのみ使用可能です。

fmt.Println(iota) //undefined: iota


デフォルトでは0から始まり、constで1行増えるごとに1ずつ加算されます。

const (
        a = iota //0
        c //1
        d //2
    )


const が現れるたびに iota を 0 に初期化する。

const d = iota // a=0
const (
	  e = iota // b=0
	  f // c=1
)


iotaが中断された場合、明示的に再開する必要があります!!!

const ( 
    Low = iota //0
    Medium //1
    High = 100 //100
    Super //100
    Band = iota //4
)


同じ行であれば、値は同じです

const (
i = iota
j1, j2, j3 = iota, iota, iota
k = iota
)


スキップ可能な値

const (
		k1 = iota // 0
		k2 // 1
		_ // 2
		_ // 3
		k3 // 4
	)


中間に値を挿入する

const (
	Sun = iota // Sun = 0
	Mon // Mon = 1
	Tue = 7 // 7
	Thu = iota // 3
	Fri // 4
)


備考

  • iota は const と共に使用する必要があります、さもなければ未定義です: iota
  • const が現れるたびに iota を 0 に初期化する。
  • 同じ行であれば、値は同じになる

コード

package main
import "fmt"
func main() {
	//general enumeration
	const (
		cpp = 0
		java = 1
		python = 2
	)
	fmt.Printf("cpp=%d java=%d python=%d\n", cpp, java, python) //a=0 b=1 c=2
	//1.iota can only be used in expressions with constants
	//fmt.Println(iota) //undefined: iota
	//2. It starts at 0 by default and adds 1 for each additional line in const
	const (
		a = iota //0
		b //1
		c //2
	)
	fmt.Printf("a=%d b=%d c=%d\n", a, b, c) //a=0 b=1 c=2
	// 3. Initialize iota to 0 each time const appears
	const d = iota // a=0
	const (
		e = iota //b=0
		f // c=1
	)
	fmt.Printf("d=%d e=%d f=%d\n", d, e, f) //d=0 e=0 f=1
	//4. If iota is interrupted, it must be explicitly restored!!!
	const (
		Low = iota //0
		Medium //1
		High = 100 //100
		Super //100
		Band = iota //4
	)
	//Low=0 Medium=1 High=100 Super=100 Band=4
	fmt.Printf("Low=%d Medium=%d High=%d Super=%d Band=%d\n", Low, Medium, High, Super, Band)
	//5. If it is the same line, the values are the same
	const (
		i = iota
		j1, j2, j3 = iota, iota, iota
		k = iota
	)
	//i=0 j1=1 j2=1 j3=1 k=2
	fmt.Printf("i=%d j1=%d j2=%d j3=%d k=%d \n", i, j1, j2, j3, k)
	//6. skippable values
	const (
		k1 = iota // 0
		k2 // 1
		_ // 2
		_ // 3
		k3 // 4
	)
	// k1=0 k2=1 k3=4
	fmt.Printf("k1=%d k2=%d k3=%d \n", k1, k2, k3)
	//7. Insert a value in the middle
	const (
		Sun = iota // Sun = 0
		Mon // Mon = 1
		Tue = 7 //7
		Thu = iota // 3
		Fri // 4
	)
	// Sun=0 Mon=1 Tue=7 Thu=3 Fri=4
	fmt.Printf("Sun=%d Mon=%d Tue=%d Thu=%d Fri=%d\n", Sun, Mon, Tue, Thu, Fri)

}


以上、Go言語の基本的な列挙の使い方と例について詳しく説明しました。