もう鎮火した騒ぎの中から、ネタを拾ってくる。
http://d.hatena.ne.jp/pmoky/20060514
pmokyさんの意見は、極端に言えば「C#は例外使ったら良いんだから、関数のOutputをout属性の変数にするのは邪道だ!」という感じの話。
エラー値と戻り値1つだけのときはそれでも良い。でも、プログラムの関数は数学の関数とは違う。戻り値が無いこともあれば、複数あることだってある。そのとき、JavaやC#流の代表的な回答は、「戻り値のセットを一つのクラスとする」だと思う。
でも、僕はPythonのように複数の戻り値を許容する*1方が、綺麗さと簡潔さのバランスがとれていて好きだ。
#複数の戻り値を返す。 a, b, c = foobar( x, y, z )
*1:実際には、タプルというリストのようなモノに入れて返すんだけど