[Goのはじめ方] Part10: 関数定義と引数・戻り値

Go

Go言語の基本、関数をマスターしよう!

これまでのステップで、Goの基本的な文法やデータ型を学んできましたね。いよいよプログラムをより構造化し、再利用可能な部品を作るための重要な要素、「関数」について学びます!関数を使いこなせると、複雑な処理もスッキリと書けるようになりますよ ✨

このセクションでは、Go言語における関数の基本的な定義方法、引数の渡し方、そして処理結果を返すための戻り値について解説します。

関数の基本的な定義方法

Go言語で関数を定義するには、func キーワードを使います。基本的な形は次のようになります。

func 関数名(引数リスト) 戻り値の型リスト {
    // 関数の処理内容
    return 戻り値 // 戻り値がある場合
}

まずは、引数も戻り値もない、最もシンプルな関数を見てみましょう。

package main

import "fmt"

// "Hello, Function!" と表示する関数
func sayHello() {
    fmt.Println("Hello, Function! 👋")
}

func main() {
    // sayHello関数を呼び出す
    sayHello()
}

この例では、sayHello という名前の関数を定義しています。この関数は引数を受け取らず (() の中が空)、何も返しません (戻り値の型リストが省略されている)。main 関数の中で sayHello() と書くことで、定義した関数を呼び出すことができます。

ポイント: func キーワードで関数定義を開始し、関数名の後に () で引数リスト、その後に {} で処理内容を記述します。

引数(パラメータ)で関数に情報を渡す

関数に外部から値(情報)を渡して、その値を使って処理を行わせたい場合があります。そのために使うのが「引数(ひきすう)」です。パラメータとも呼ばれます。

引数は 関数名(引数名 型) のように、引数名と型をセットで記述します。複数ある場合はカンマ , で区切ります。

package main

import "fmt"

// 名前を受け取って挨拶する関数
func greet(name string) {
    fmt.Printf("こんにちは、%sさん!\n", name)
}

// 2つの整数を受け取って合計を表示する関数
func printSum(a int, b int) {
    fmt.Printf("%d + %d = %d\n", a, b, a+b)
}

// 同じ型の引数が続く場合は、最後の引数にだけ型を書けばOK
func printProduct(x, y int) {
    fmt.Printf("%d * %d = %d\n", x, y, x*y)
}


func main() {
    greet("Go太郎") // 文字列 "Go太郎" を引数として渡す
    printSum(5, 3)   // 整数 5 と 3 を引数として渡す
    printProduct(4, 6) // 整数 4 と 6 を引数として渡す
}

greet 関数は string 型の引数 name を1つ受け取ります。printSum 関数は int 型の引数 ab を2つ受け取ります。printProduct のように、連続する引数が同じ型の場合は、最後の引数にだけ型を指定する省略形も使えます。

可変長引数

関数の引数の個数が決まっていない場合、「可変長引数」を使うと便利です。引数名の前に ... をつけます。関数内ではスライスとして扱われます。

package main

import "fmt"

// 任意の数の整数を受け取って合計を計算し表示する関数
func sumAll(numbers ...int) {
    total := 0
    // numbers は []int 型のスライスとして扱われる
    for _, num := range numbers {
        total += num
    }
    fmt.Printf("合計: %d\n", total)
}

func main() {
    sumAll(1, 2, 3)       // 引数3つ
    sumAll(10, 20, 30, 40) // 引数4つ
    sumAll()             // 引数0個でもOK
}
ポイント: 引数を使うことで、関数に動的に情報を与え、より汎用的な処理を行わせることができます。可変長引数 ... も覚えておくと便利です。

戻り値で関数の結果を受け取る

関数で計算した結果や処理結果を、呼び出し元で利用したい場合があります。そのために使うのが「戻り値(もどりち)」です。返り値(かえりち)とも呼ばれます。

戻り値がある場合は、引数リスト () の後に戻り値の型を記述します。関数の中では return 文を使って値を返します。

package main

import "fmt"

// 2つの整数を受け取って、その合計値を返す関数
func add(a int, b int) int { // 戻り値の型として int を指定
    result := a + b
    return result // 計算結果を返す
}

// 文字列を受け取って、メッセージを組み立てて返す関数
func createMessage(name string) string { // 戻り値の型として string を指定
    return "メッセージ: こんにちは、" + name + "さん!"
}

func main() {
    // add関数の戻り値を変数 sumResult に代入
    sumResult := add(10, 25)
    fmt.Println(sumResult) // 35 が表示される

    // createMessage関数の戻り値を変数 msg に代入
    msg := createMessage("Go次郎")
    fmt.Println(msg) // "メッセージ: こんにちは、Go次郎さん!" が表示される

    // 関数の戻り値を直接別の関数の引数に使うこともできる
    fmt.Println(add(100, 50)) // 150 が表示される
}

add 関数は int 型の値を1つ返します。createMessage 関数は string 型の値を1つ返します。return 文が実行されると、関数の処理はその時点で終了し、指定された値が呼び出し元に返されます。

ポイント: 戻り値を使うことで、関数の処理結果を呼び出し元で活用できます。戻り値の型を引数リストの後ろに明記し、return 文で値を返します。

まとめ

今回は、Go言語の関数の基本となる以下の点を学びました。

  • func キーワードを使った基本的な関数の定義方法
  • 関数に値を渡すための「引数」の使い方(型指定、可変長引数)
  • 関数の処理結果を受け取るための「戻り値」の使い方(型指定、return 文)

関数は、プログラムを部品化し、コードの見通しを良くしたり、同じ処理を何度も書かずに済ませたりするための非常に重要な機能です。しっかりマスターして、効率的なGoプログラミングを目指しましょう!💪

次のステップでは、Goの特徴的な機能である「複数戻り値」と、プログラムのエラーを扱うための「エラーハンドリング」について学びます。お楽しみに!

コメント

タイトルとURLをコピーしました