A Tour of Go をやる! – その8 「Named return values」 お前は戻り値だ… 【Go言語/A Tour of Go】
2018年9月11日GoA Tour of Go,Goのお勉強,Go言語,ファンクション,戻り値Go,A Tour of Go,Goのお勉強,Go言語,ファンクション,戻り値
「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言語のお勉強」インデックス
- うっしー「Go言語」に手を出す…(準備編)
- 「A Tour of Go」をやる!
- その1 「Hello, 世界」
- その2 「Packages」だってさ~
- その3 「Imports」いんぽーっ!
- その4 「Exported names」見えますか?
- その5 「Functions」 これは機能です。
- その6 「Functions continued」(?) 型しょ~略っ!
- その7 「Multiple results」 一粒で二度美味しい?
- その8 「Named return values」 お前は戻り値だ…
- その9 「Variables」入れ物!
- その10 「Variables with initializers」砂でも詰めるか…
- その11 「Short variable declarations」 略パート2!
- その12 「Basic types」 型抜きってあったな…
- その13 「Zero values」 生まれ持った中身は?
- その14 「Type conversions」 1は1.0になれる!
- その15 「Type inference」 君の型は…?
- その16 「Constants」 変えられねぇよ?
- その17 「Numeric Constants」 型無し野郎?
- その18 「For」 ~いよいよループ!~
- その19 「For continued」 ~ Forの続き! ~
「A Tour of Go」を題材にした記事は現在書き直し中…。_(:3」∠)_
ほとんどサボりが原因で尻切れとなっていたシリーズですが、最近になってようやく続きを書きたくなり再開をしようと思ったんです。が、古い記事を見返すとデータ・フォーマットが古かったり内容が分かり難かったりに気づきまして、、、この際だからと最初の記事から書き直しをすることになりました…
関連記事
A Tour of Go をやる! – その5 「Functions」 これは機能です。 【Go言語/A Tour of Go】
「A Tour of Go をやる!」シリーズの第5回目。 何時も通り低クオリテ ...
A Tour of Go をやる! – その15 「Type inference」 君の型は…?【Go言語/A Tour of Go】
「A Tour of Go をやる!」シリーズの第15回目。 今回も変数でまたし ...
A Tour of Go をやる! – その13 「Zero values」 生まれ持った中身は? 【Go言語/A Tour of Go】
「A Tour of Go をやる!」シリーズの第13回目。 まだまだ続くぞ変数 ...
A Tour of Go をやる! – その6 「Functions continued」(?) 型しょ~略っ! 【Go言語/A Tour of Go】
「A Tour of Go をやる!」シリーズの第6回目。 前回進めた「Func ...
【Go言語】構造体のポインタだったり初期化だったり… – Structs 2
たいしたこと書いてない割には超亀進行なこのシリーズ…。そんなまったり進行なGo言 ...
ディスカッション
コメント一覧
まだ、コメントがありません