Go練習問題3-02:関数の戻り値と複数の戻り値を理解しよう

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

Go言語の初心者向け問題3-2:関数の戻り値と複数の戻り値を理解しよう

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

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

Go言語の文法「関数の戻り値」と「複数の戻り値」とは





ここでは「関数の戻り値」と「複数の戻り値」の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。

Go言語では関数が戻り値を持つことができます。戻り値とは関数が実行された後に外部へ返す結果です。

関数に戻り値を持たせることで、計算結果や処理結果を呼び出し元に返すことができます。

さらに、Go言語では複数の戻り値を返すことができ、これにより柔軟なプログラムが書けるようになります。

関数の戻り値の基本

Go言語での関数の基本的な構文は以下の通りです。

func 関数名(引数のリスト) 戻り値の型 {
    // 関数内の処理
    return 戻り値
}

例えば、2つの整数を足し合わせる関数を考えてみましょう。

func add(x int, y int) int {
    return x + y
}

この関数は、2つの整数を受け取り、その合計を返します。戻り値の型は int です。呼び出し元でこの結果を受け取り、利用できます。

複数の戻り値

Go言語では、1つの関数から複数の戻り値を返すことができます。例えば、2つの整数を交換する関数を次のように定義できます。

func swap(a, b int) (int, int) {
    return b, a
}

この swap 関数は、2つの整数を受け取り、それらを入れ替えた値を返します。戻り値の型を複数指定することで、関数から複数の結果を同時に返すことができます。

まとめ

Go言語における関数の戻り値の概念を理解することは、より複雑なプログラムを構築する際に非常に重要です。

特に、複数の戻り値を利用することで、効率的にデータを処理し、返すことができます。

初心者の方は、まず基本的な関数の戻り値から始め、次第に複数の戻り値を活用したコードを書けるようになりましょう。 ​

Go練習問題3-1:関数の戻り値を使った計算結果の取得

2つの整数を受け取り、それらを加算した結果と、結果が正の数かどうかを返す関数を作成しましょう。

この問題の要件

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

  • 2つの整数を受け取り、それらを加算し、結果を返す関数 addAndCheck を定義すること。
  • addAndCheck 関数は、加算結果(整数型)とその結果が正の数かどうか(ブール型)を戻り値として返すこと。
  • メイン関数で addAndCheck 関数を呼び出し、結果と正負判定を受け取ること。
  • メイン関数で受け取った結果と正負判定を、フォーマットした文字列で標準出力に表示すること。

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

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

結果: 2, 正の数: true

この問題を解くヒント

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

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

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

1.import文の使用
2.mainパッケージの宣言
3.関数addAndCheckの定義
 3-1. 引数として整数型のaとbを受け取る
 3-2. 変数sumにaとbの合計を格納
 3-3. sumが正の数かどうかを判定し、結果を変数isPositiveに格納
 3-4. sumとisPositiveを戻り値として返す
4.main関数の定義
 4-1. 関数addAndCheckを呼び出し、結果を変数resultとpositiveに格納
 4-2. fmt.Printfで結果を表示

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

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

package main

import "fmt"

// 2つの整数を加算し、その結果と加算が行われたかどうかを返す関数
func addAndCheck(a int, b int) (int, bool) {
    /* 【穴埋め問題1】
    ここにaとbを加算し、その結果をsumに格納するコードを書いてください。
    ここにsumが正の数かどうかを判定し、その結果をisPositiveに格納するコードを書いてください。
    */
    return sum, isPositive
}

func main() {
    // 2つの整数を加算し、結果と判定を受け取る
    result, positive := addAndCheck(5, -3)

    // 結果を出力
    fmt.Printf("結果: %d, 正の数: %t\n", result, positive)
}

 

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

解答例と解説

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

正解コードの例

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

package main

import "fmt"

// 2つの整数を加算し、その結果と加算が行われたかどうかを返す関数
func addAndCheck(a int, b int) (int, bool) {
    sum := a + b
    isPositive := sum > 0 // 結果が正かどうかを判定
    return sum, isPositive
}

func main() {
    // 2つの整数を加算し、結果と判定を受け取る
    result, positive := addAndCheck(5, -3)

    // 結果を出力
    fmt.Printf("結果: %d, 正の数: %t\n", result, positive)
}

正解コードの解説

この解説では、先ほどのGoコードの各部分を初心者向けに説明します。特に、関数の戻り値と複数の戻り値に焦点を当て、コードがどのように動作するのかを理解できるように解説します。

import文の使用

import "fmt"

fmtパッケージは、Go言語の標準ライブラリに含まれており、文字列のフォーマットや出力を行うために使用します。このコードでは、fmt.Printfを使用して、フォーマットされた文字列をコンソールに表示します。

関数の定義:addAndCheck

func addAndCheck(a int, b int) (int, bool) {
    sum := a + b
    isPositive := sum > 0
    return sum, isPositive
}

この部分は、2つの整数を受け取り、それらを加算した結果と、その結果が正の数かどうかを判断する関数addAndCheckを定義しています。

この関数は、戻り値として2つの値を返します。最初の戻り値は加算結果の整数、2つ目の戻り値はその結果が正であるかどうかを示すブール値です。

Go言語では、1つの関数から複数の戻り値を簡単に返すことができ、これにより複雑なロジックをシンプルに記述できます。

main関数

func main() {
    result, positive := addAndCheck(5, -3)
    fmt.Printf("結果: %d, 正の数: %t\n", result, positive)
}

main関数は、Goプログラムのエントリーポイントです。この関数では、addAndCheck関数を呼び出し、結果として2つの戻り値を受け取っています。

resultには加算結果、positiveにはその結果が正の数かどうかが格納されます。そして、その結果をfmt.Printfを使って表示します。

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

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

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

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






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