演習2-3
演習2-2の言語を表すマジックナンバー0,1,2にEnglish, Japanese, Esperantoという名前を付けよ.
解答例
解答例
- package main
- import "fmt"
- const English = 0
- const Japanese = 1
- const Esperanto = 2
- type HelloWorld struct {
- hello string
- }
- func (h *HelloWorld) SayHello() {
- fmt.Printf(h.hello+"\n")
- }
- func (h *HelloWorld) SetHello(hello string) {
- h.hello = hello
- }
- type MultilingalHello struct {
- HelloWorld
- lang int
- }
- func (m *MultilingalHello) SetLanguage(lang int) {
- m.lang = lang
- switch lang {
- case English:
- m.hello = "Hello, World!"
- case Japanese:
- m.hello = "こんにちは、世界。"
- case Esperanto:
- m.hello = "Bonan tagon"
- }
- }
- func main() {
- m := new(MultilingalHello)
- m.SayHello()
- m.SetHello("Hello, World!")
- m.SayHello()
- m.SetLanguage(Japanese)
- m.SayHello()
- m.SetLanguage(English)
- m.SayHello()
- m.SetLanguage(Esperanto)
- m.SayHello()
- m.HelloWorld.SayHello()
- }
解説
解説
const
- 定数は,次のように宣言します.(4行目から6行目)const 定数名 型 = 式
- 4行目から6行目は,次のように書くこともできます.const English, Japanese, Esperantp = 0, 1, 2
- また,次のように書くこともできます.const ( English = 0 Japanese = 1 Esperanto = 2)
- 定数の宣言に関する詳細は,言語仕様の定数の宣言を参照してください.
iota
- 4行目から6行目は更に,次のように書くこともできます.
- const(
- English =iota // English = 0
- Japanese = iota // Japanese = 1
- Esperanto = iota // Esperanto = 2
- )
- iotaは定数の宣言で使用され,連続した型を持たない整数定数値を生成します.したがって,各定数は右のコメントのような値となります.
- さらに,const内で初期化式が省略されたときは前の式が再利用されるので,上記コードは次のように書くことができます.
- const(
- English =iota
- Japanese
- Esperanto
- )
- iotaの詳細は,言語仕様を参照してください,