演習2-3

演習2-2の言語を表すマジックナンバー0,1,2にEnglish, Japanese, Esperantoという名前を付けよ.

解答例

  1. package main
  2. import "fmt"
  3. const English = 0
  4. const Japanese = 1
  5. const Esperanto = 2
  6. type HelloWorld struct {
  7. hello string
  8. }
  9. func (h *HelloWorld) SayHello() {
  10. fmt.Printf(h.hello+"\n")
  11. }
  12. func (h *HelloWorld) SetHello(hello string) {
  13. h.hello = hello
  14. }
  15. type MultilingalHello struct {
  16. HelloWorld
  17. lang int
  18. }
  19. func (m *MultilingalHello) SetLanguage(lang int) {
  20. m.lang = lang
  21. switch lang {
  22. case English:
  23. m.hello = "Hello, World!"
  24. case Japanese:
  25. m.hello = "こんにちは、世界。"
  26. case Esperanto:
  27. m.hello = "Bonan tagon"
  28. }
  29. }
  30. func main() {
  31. m := new(MultilingalHello)
  32. m.SayHello()
  33. m.SetHello("Hello, World!")
  34. m.SayHello()
  35. m.SetLanguage(Japanese)
  36. m.SayHello()
  37. m.SetLanguage(English)
  38. m.SayHello()
  39. m.SetLanguage(Esperanto)
  40. m.SayHello()
  41. m.HelloWorld.SayHello()
  42. }

解説

const

  • 定数は,次のように宣言します.(4行目から6行目)const 定数名 型 = 式
  • 4行目から6行目は,次のように書くこともできます.const English, Japanese, Esperantp = 0, 1, 2
  • また,次のように書くこともできます.const ( English = 0 Japanese = 1 Esperanto = 2)
  • 定数の宣言に関する詳細は,言語仕様の定数の宣言を参照してください.

iota

  • 4行目から6行目は更に,次のように書くこともできます.
    1. const(
    2. English =iota // English = 0
    3. Japanese = iota // Japanese = 1
    4. Esperanto = iota // Esperanto = 2
    5. )
  • iotaは定数の宣言で使用され,連続した型を持たない整数定数値を生成します.したがって,各定数は右のコメントのような値となります.
  • さらに,const内で初期化式が省略されたときは前の式が再利用されるので,上記コードは次のように書くことができます.
    1. const(
    2. English =iota
    3. Japanese
    4. Esperanto
    5. )
  • iotaの詳細は,言語仕様を参照してください,