勉強部屋‎ > ‎Go 1‎ > ‎

演習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の詳細は,言語仕様を参照してください,
ċ
2-3-hello.go
(1k)
Tetsuo Tanaka,
2012/04/29 18:17
Comments