萌えハッカーニュースリーダー

2025/03/15 15:11 Were multiple return values Go's biggest mistake?

出典: https://herecomesthemoon.net/2025/03/multiple-return-values-in-go/
hakase
博士

ロボ子、今日のITニュースはGo言語の複数の戻り値についてじゃ。

roboko
ロボ子

複数の戻り値ですか。Go言語では一般的な機能ですよね。

hakase
博士

そうなんじゃ。でも、この記事によると、それが色々な問題を引き起こしているらしいぞ。「複数の戻り値を言語機能として持っているが、これが他の機能との相性が悪く、言語を複雑にしている」とのことじゃ。

roboko
ロボ子

具体的にはどのような問題があるのでしょうか?

hakase
博士

まず、Goにはタプル型がないからの。複数の戻り値をリストやチャネルで扱うには、構造体を定義する必要があるんじゃ。

roboko
ロボ子

確かに、それは少し面倒ですね。タプル型があればもっと簡単に扱えます。

hakase
博士

じゃろ?さらに、Go 1.23で関数に対するrange処理が導入されたけど、複数の戻り値を返す関数を扱う場合、APIが複雑になるらしいぞ。

roboko
ロボ子

range処理との組み合わせですか。それは想像以上に複雑になりそうですね。

hakase
博士

そして、エラー処理にも影響があるらしい。「Goのエラー処理は複数の戻り値を利用しているが、Result型のようなより良いエラー処理の発展を妨げた可能性がある」とのことじゃ。

roboko
ロボ子

Result型のような、より明確なエラー処理の仕組みがあれば、もっと安全なコードが書けたかもしれませんね。

hakase
博士

じゃろ?複数の戻り値を本格的な型に昇格させ、ジェネリクスを適用できるようにすることが提案されているけど、後方互換性の問題があるからの、難しいところじゃ。

roboko
ロボ子

後方互換性は非常に重要ですからね。変更を加えるのは慎重にならざるを得ません。

hakase
博士

あと、複数の戻り値をvariadic関数に渡す際の挙動に曖昧さがあるらしいぞ。細かいけど、こういうところが言語の使い勝手を悪くするんじゃ。

roboko
ロボ子

些細なことでも、積み重なると大きな問題になりますからね。

hakase
博士

この記事によると、「Go言語は初期の設計決定に苦労しており、特に型を真剣に受け止めなかったことが問題の一因である」とのことじゃ。

roboko
ロボ子

初期の設計が後々まで影響を及ぼすというのは、よくある話ですね。

hakase
博士

「Goの複数の戻り値は、言語をシンプルに保つために型として独立させなかったが、これは悪い決定だった」とも書いてあるぞ。

roboko
ロボ子

シンプルさを追求した結果が、複雑さを生んでしまったというのは皮肉ですね。

hakase
博士

まあ、Goはツールに関しては現代のゴールドスタンダードを確立したからの、そこは評価できるんじゃけどな。

roboko
ロボ子

そうですね。ツールの充実度は開発効率に大きく影響しますから。

hakase
博士

しかし、複数の戻り値問題、どうしたら良かったんじゃろうな?

roboko
ロボ子

もし私がGo言語の設計者だったら、タイムマシンで過去に戻って、博士に相談しますね!

hakase
博士

おや、ロボ子。なかなか面白いことを言うのじゃな。でも、タイムマシンを作る前に、まずは美味しいおやつを作るのが先じゃぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search