演習1-1

整数型の引数を一つとり,引数が0のとき英語で”Hello, World!”,1のとき日本語で”こんにちは、世界。”,2のときエスペラントで” Bonan tagon”という文字列を返す関数SayHelloを,if文を使って定義せよ.

解答例(1)

引数が0,1,2以外のときは "何語で言えばいいの?" という文字列を返すものとする.

  1. package main
  2. import "fmt"
  3. func SayHello(lang int) string {
  4. if lang == 0 {
  5. return "Hello, World!"
  6. } else if lang == 1 {
  7. return "こんにちは世界。"
  8. } else if lang == 2 {
  9. return "Bonan tagon"
  10. }
  11. return "何語で言えばいいの?"
  12. }
  13. func main() {
  14. fmt.Printf(SayHello(0)+"\n")
  15. fmt.Printf(SayHello(1)+"\n")
  16. fmt.Printf(SayHello(2)+"\n")
  17. fmt.Printf(SayHello(3)+"\n")
  18. }

解説(1)

4行目

  • 関数は次のような形をしています. func 関数名(引数のリスト) (戻り値のリスト) { 関数本体 }
  • 引数のリストは引数名と型の組をカンマで区切って並べて宣言します.例では引数は一つで,引数名がlang,型がintです.
  • 戻り値のリストでは,戻り値の型を指定します.戻り値のリストでは,解答例(2)に示すように,戻り値の名前を指定できます.また,戻り値を複数指定することができます(後報).
  • 関数の詳細は言語仕様の関数型関数の宣言を参照してください.

5行目

  • if文の条件節には,C言語のような括弧'( )"は不要です.
  • if文の詳細は言語資料を参照してください.
  • 開き中括弧'{'はこの行になければなりません.次の行に書くと,ifの条件節のあとにセミコロン';'が自動的に挿入されるため,コンパイルエラーとなってしまいます.

16行目

  • 関数の呼び出しはC言語と同様に,関数名を引数を指定して呼び出します.

解答例(2)

  1. package main
  2. import "fmt"
  3. func SayHello(lang int) (s string) {
  4. if lang == 0 {
  5. s = "Hello, World!"
  6. } else if lang == 1 {
  7. s = "こんにちは世界。"
  8. } else if lang == 2 {
  9. s = "Bonan tagon"
  10. } else {
  11. s = "何語で言えばいいの?"
  12. }
  13. return
  14. }
  15. func main() {
  16. fmt.Printf(SayHello(0)+"\n")
  17. fmt.Printf(SayHello(1)+"\n")
  18. fmt.Printf(SayHello(2)+"\n")
  19. fmt.Printf(SayHello(3)+"\n")
  20. }

解説(2)

4行目

  • 戻り値のリストでは,解答例(2)に示すように,戻り値の名前を指定することもできます.この例ではstring型のsという名前の戻り値を宣言しています.

6行目,8行目,10行目,12行目

  • 戻り値sに値を代入しています.

14行目

  • return文が実行された時点のsの値が関数の値として返ります.
  • return s としても同じ結果となります.