Go練習問題3-04:無名関数を理解しよう

記事内に商品プロモーションを含む場合があります

Go言語の初心者向け問題3-4:無名関数を理解しよう

この問題を解くために必要な知識:
レベル1~2の知識関数の定義と呼び出し関数の戻り値と複数の戻り値関数の可変長引数無名関数(匿名関数)クロージャ構造体の定義とコンストラクタ関数構造体の埋め込みメソッドの定義とレシーバインターフェース型アサーション型スイッチ

<<前の問題 問題集Top 次の問題>>

Go言語の文法「無名関数(匿名関数)」とは





ここでは無名関数(匿名関数)の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。

Go言語における無名関数(匿名関数)とは、その名の通り名前を持たない関数のことです。

通常、関数は名前を付けて定義しますが、無名関数はその場で定義してすぐに使うことができます。

無名関数は、一度しか使わないロジックや、関数内で使う特定の処理を簡潔に記述したいときに役立ちます。

基本的な使い方

無名関数は、func キーワードを使って定義します。以下に、無名関数を使ってメッセージを出力する基本的な例を示します。

package main

import "fmt"

func main() {
    // 無名関数を定義してすぐに実行
    func() {
        fmt.Println("Hello, Go!")
    }()
}

このコードでは、func() { fmt.Println("Hello, Go!") }() という形で無名関数を定義し、すぐに実行しています。最後の () は、この無名関数を呼び出すためのものです。

無名関数の使い道

無名関数は以下のような場面で役立ちます。

  1. 即時実行: 上記の例のように、関数を定義すると同時に実行したい場合に使用します。
  2. コールバック関数: 無名関数を引数として別の関数に渡し、特定のタイミングで実行させることができます。Goでは、無名関数を使って関数の動的な動作を定義できます。
  3. クロージャ: 無名関数は外部の変数にアクセスでき、これをクロージャと呼びます。クロージャを使うことで、外部のスコープにある変数の状態を保持しながら関数を実行できます。

まとめ

無名関数は、名前のない関数をその場で定義し、即時に実行したり、他の関数に渡したりできる便利な機能です。Go言語では、簡潔に記述したいロジックや、コールバック関数、クロージャの実装に利用されます。

初めて学ぶ際には、無名関数の使い方とその利便性を理解することが重要です。 ​

Go練習問題3-4:無名関数を使ったメッセージ表示と計算を実装しよう

無名関数を使ってメッセージを表示し、さらに計算を行うプログラムを作成します。無名関数をその場で定義し、即座に実行する方法を理解することが目標です。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • fmtパッケージを使用して、標準出力を扱うこと。
  • 無名関数を定義し、メッセージを表示するコードを記述すること。
  • もう一つの無名関数を定義し、二つの整数の合計を計算するコードを記述すること。
  • 上記の無名関数を変数に代入し、任意の二つの整数を使って計算を行い、その結果を表示すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

こんにちは、Go言語の無名関数の世界へようこそ!
10 + 20 の合計は: 30

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.パッケージの宣言
2.import文の使用
3.main関数の定義
 3-1. 無名関数を定義して即時実行
  3-1-1. fmt.Printlnを使用してメッセージを表示
 3-2. 数値の合計を計算する無名関数の定義と変数への代入
 3-3. 無名関数を使用して二つの整数の合計を計算し結果を表示

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

package main

import "fmt"

func main() {
    // メッセージを表示するための無名関数を作成して実行
    /*【穴埋め問題1】ここに無名関数を定義し、メッセージを表示するコードを書いてください。*/
    }()

    // 数値の合計を計算する無名関数を変数に代入して使用
    /*【穴埋め問題2】ここに無名関数を定義して二つの整数を合計するコードを書いてください。*/

    result := sum(10, 20)
    fmt.Println("10 + 20 の合計は:", result)
}

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

package main

import "fmt"

func main() {
    // メッセージを表示するための無名関数を作成して実行
    func() {
        fmt.Println("こんにちは、Go言語の無名関数の世界へようこそ!")
    }()

    // 数値の合計を計算する無名関数を変数に代入して使用
    sum := func(a int, b int) int {
        return a + b
    }

    result := sum(10, 20)
    fmt.Println("10 + 20 の合計は:", result)
}

正解コードの解説

この解説では、コードをブロックごとに分割し、それぞれの文法や機能について説明します。特に、「無名関数(匿名関数)」の部分を強調して解説します。

パッケージの宣言とimport文の使用

package main

import "fmt"
  • package main: Goプログラムのエントリーポイントを定義するパッケージです。Goでは、mainパッケージは、プログラムが開始する場所を指定します。
  • import "fmt": fmtパッケージは、標準入力や標準出力を扱うために使用します。ここでは、コンソールにメッセージを表示するために使用します。

main関数の定義

func main() {
    // メッセージを表示するための無名関数を作成して実行
    func() {
        fmt.Println("こんにちは、Go言語の無名関数の世界へようこそ!")
    }()
  • func main(): Go言語では、プログラムのエントリーポイントは常に main 関数です。この関数内でコードが実行されます。
  • 無名関数の定義と即時実行: func() { fmt.Println("こんにちは、Go言語の無名関数の世界へようこそ!") }() というコードは、無名関数を定義し、即座に実行しています。無名関数とは、名前を持たない関数で、定義したその場で実行するために使用されます。この例では、プログラムが実行されると、指定されたメッセージがすぐに表示されます。

数値の合計を計算する無名関数の定義

    // 数値の合計を計算する無名関数を変数に代入して使用
    sum := func(a int, b int) int {
        return a + b
    }
  • 変数への無名関数の代入: ここでは、sum という変数に無名関数を代入しています。この無名関数は、二つの整数を引数に取り、その合計を返します。無名関数はこのように変数に代入することで、後から呼び出すことができます。

無名関数の呼び出しと結果の表示

    result := sum(10, 20)
    fmt.Println("10 + 20 の合計は:", result)
}
  • 無名関数の呼び出し: sum(10, 20) として無名関数を呼び出し、二つの整数 1020 を渡しています。無名関数はこれらの値を受け取り、合計を計算します。
  • 結果の表示: 計算された結果は fmt.Println を使ってコンソールに表示されます。この例では、「10 + 20 の合計は: 30」という出力が得られます。

まとめ

このコードでは、Go言語の「無名関数(匿名関数)」の基本的な使い方を学びました。無名関数を使うことで、簡単な処理をその場で定義して実行することができます。

また、無名関数を変数に代入することで、後から再利用することも可能です。Go言語の柔軟な関数の使い方を理解する上で重要なポイントとなります。 ​

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Go練習問題集へ戻る
    トップページへ戻る