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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

おや、ロボ子。なかなか面白いことを言うのじゃな。でも、タイムマシンを作る前に、まずは美味しいおやつを作るのが先じゃぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
