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

演習1-2

演習1-1の関数SayHelloを,switch文を使って書き直せ.

解答例

  1. package main
  2. import "fmt"

  3. func SayHello(lang int) (s string) {
  4.     switch lang {
  5.     case 0:
  6.         s = "Hello, World!"
  7.     case 1:
  8.         s = "こんにちは世界。"
  9.     case 2:
  10.         s = "Bonan tagon"
  11.     default:
  12.     s = "何語で言えばいいの?"
  13.     }
  14. return
  15. }

  16. func main() {
  17.     fmt.Printf(SayHello(0)+"\n")
  18.     fmt.Printf(SayHello(1)+"\n")
  19.     fmt.Printf(SayHello(2)+"\n")
  20.     fmt.Printf(SayHello(100)+"\n")
  21. }

解説

5行目~14行目
  • Go言語のswitch文には式switchと型switchの2種類があります.ここでは,式switchを使っています.
  • 式switchでは,switchの式が評価されたあと,case式が評価され,switch式と等しい最初のcaseが見つかるとその文が実行されます.
  • そのとき,それ以外のcaseはスキップされます.C言語と異なり,それより下のcase式は評価されません.
  • 一致するcaseがないときにdefaultケースがあれば,その文が実行されます.
  • switch文の詳細は言語仕様を参照してください.
  • switchの式にtrueと書くと(または式を省略すると)case式だけが評価され,case式がtrueとなる最初の文が実行されます.したがって,解答例(2)のように書いても同じ結果を得ることができます.

解答例(2)

  1. package main
  2. import "fmt"

  3. func SayHello(lang int) (s string) {
  4.     switch {
  5.     case lang == 0:
  6.         s = "Hello, World!"
  7.     case lang == 1:
  8.         s = "こんにちは世界。"
  9.     case lang == 2:
  10.         s = "Bonan tagon"
  11.     default:
  12.        s = "何語で言えばいいの?"
  13.     }
  14.     return
  15. }

  16. func main() {
  17.     fmt.Printf(SayHello(0)+"\n")
  18.     fmt.Printf(SayHello(1)+"\n")
  19.     fmt.Printf(SayHello(2)+"\n")
  20.     fmt.Printf(SayHello(100)+"\n")
  21. }
ċ
1-2-1-hello.go
(0k)
Tetsuo Tanaka,
2012/04/29 5:29
ċ
1-2-2-hello.go
(0k)
Tetsuo Tanaka,
2012/04/29 5:29
Comments