A Tour of Go をやる! – その8 「Named return values」 お前は戻り値だ… 【Go言語/A Tour of Go】

2018年9月11日Go言語のお勉強A Tour of Go,function,Goのお勉強,Go言語,戻り値Go言語のお勉強,function,Goのお勉強,Go言語,戻り値

記事ヘッダー_Named_return_values

「A Tour of Go をやる!」シリーズの第8回目。

少しシツコイですが、またまたまた「Function」絡みで戻り値な記事。
どれだけ似たような内容が続いても、私は「A Tour of Go」のレールを走ります…!(脱線しなければな…)

今回進めるページ「Named return values」

ページへのリンクはこちら。

タイトルの「Named return values」とは?

「戻り値には名前をつけられるよ~」という事のようです。
次の項で詳しく見てみます。

戻り値のパラメータに関する言語仕様を見てみる

言語仕様の該当箇所はこちら。

3. The expression list may be empty if the function’s result type specifies names for its result parameters. The result parameters act as ordinary local variables and the function may assign values to them as necessary. The “return" statement returns the values of these variables.

関数の結果タイプが結果パラメーターの名前を指定している場合、式リストは空になる可能性があります。結果パラメータは通常のローカル変数として機能し、関数は必要に応じてそれらに値を割り当てることができます。 「return」ステートメントは、これらの変数の値を返します。(by Google Translated.)

https://golang.org/ref/spec#Return_statements
func complexF3() (re float64, im float64) {
	re = 7.0
	im = 4.0
	return
}

func (devnull) Write(p []byte) (n int, _ error) {
	n = len(p)
	return
}

翻訳がやや残念な感じで内容が飲み込み難いんですが、つまり…

  • 戻り値のパラメータ(変数名と型の定義)が指定されていれば、それらを変数としてファンクション内で扱えるよ~
  • 戻り値のパラメータが指定されているときは、return ステートメントの Expression List が省略できるよ~
  • return ステートメントの Expression List が省略されたときは、戻り値のパラメータに指定された変数が返却されるよ~

って書いてあるようです。(私の意訳ですが…)

まっ「A Tour of Go」のページで同様の説明がされてますがね。|д゚)カイテアルヨ

サンプルプログラムを見てみる

今回のサンプルプログラムはこちら。要所にコメント書いてみました。

戻り値のパラメータに書かれた変数の定義

コメントにも書きましたが6行目の最後らへん (x, y int) ですね。
こいつらは通常の変数として扱えるようです。(8~9行目のように…)

リターンステートメントの式を省略

リターンステートメントの Expression List ですが、次の部分になります。

return (返却する変数等が書かれるココの事)

サンプルプログラムではこれが省略されているので、戻り値のパラメータに定義された変数がそのまま返される形となります。

もしも return が無かったら?

勢い余って(?) return すら省略しちゃうと…、こんなエラーメッセージが出力されました。

missing return at end of function

「(リターンパラメータは指定してるくせに)何でリターンが無いねん??」ってことでしょうか…(・ω・`;

さいごに

戻り値の省略パターンをラーニングした。(`・ω・´)

というわけで今回ラーニングした手法は「naked return」と言うらしく、なるべく短いファンクションで使うようにと、注意書きがありました。長いファンクションで使うと読みやすさに悪影響があるとのこと。

そんなわけで今回はここまで。また次回~。_(┐「ε:)_

Go言語のお勉強 記事一覧

  1. うっしー「Go」に手を出す…
  2. 「A Tour of Go」をやる! シリーズ
    1. その1 「Hello, 世界」
    2. その2 「Packages」だってさ~
    3. その3 「Imports」いんぽーっ!
    4. その4 「Exported names」見えますか?
    5. その5 「Functions」 これは機能です。
    6. その6 「Functions continued」(?) 型しょ~略っ!
    7. その7 「Multiple results」 一粒で二度美味しい?
    8. その8 「Named return values」 お前は戻り値だ…
    9. その9 「Variables」入れ物!
    10. その10 「Variables with initializers」砂でも詰めるか…
    11. その11 「Short variable declarations」 略パート2!
    12. その12 「Basic types」 型抜きってあったな…
    13. その13 「Zero values」 生まれ持った中身は?
    14. その14 「Type conversions」 1は1.0になれる!

「A Tour of Go」記事は現在書き直し中…。_(┐「ε:)_
サボったりサボったり…で尻切れシリーズになっていましたが、最近続きを書く気になりました。が、これまでの記事を改めて見返すと記事のデータ・フォーマットが古く、この際だからと最初の記事から書き直しております。