演習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. }