「returnも嫌いな理由」に、Danさんとコサキさんからトラックバックいただきました。
印象として、手続きやオブジェクトをベースとするプログラミング言語でも、ラムダ式や高階関数を採り入れる傾向があるなぁーと思っていたのですが、Perl 5→6 もその事例なんですね。まー、これはけっこうなことですけど。
余談ですが、僕は関数・演算子のオーバーロードは大好きなんです(危険性はありますけどね)。さらに言うと、オーバーロードの延長(?)として、引数パターンごとに定義をわけて書けるのも好き。このときもreturnはイヤな感じですよ:
function fact(0) {return 1}
| fact(n) {return n * fact(n - 1)}
// n < 0 は知らん。
次なら短い。
function fact(0) {1}
| fact(n) {n * fact(n - 1)}
「返ってくれ ウルトラマン」でのけぞって、その後読むのを忘れるところだったよ。
つまり、僕は檜山さんの意見じゃなくてメイヤーセンセのごイケンに賛成できないものを感じていたのね。
これらのごイケンは「いずれもイマイチ説得力に欠けます」と書いたとおり、納得しがたいですねぇ、確かに。あのエントリーのコメント欄のほうでは、出口が5個ある書き方を擁護していますし、僕。しかしですね、メイヤー先生ってば、“物議を醸す”ことを平気で言う、言いまくる態度がステキなんです。で、まー、こんな変なことでも自信満々(ほんとは自信なかったかもしれない)で言っている例として取り上げました。
かの有名なprintfの型宣言はこう
「かの有名」ってアンタ、printfなんて知らねーよ -- と昨今の若者は言うかもしれない。
オイラはラムダ式以外では最終評価結果を返す仕様はあんまり好きじゃないなぁ・・・
しかし、ラムダ式だけは例外とするのも困難でしょう。確かに、returnなしだと戻り値がどこで確定しているのか分かりにくいのだけど、書きたくないところにもreturnを要求されるのはとてもイヤッ。落ち着くところは、「returnなしも許す」じゃないかと。(“必要にかられたgotoとしてのbreak”を許すのであれば、returnも入れないと不公平に感じるので、returnを完全排除せよ、とは言いません。)