2004-02-03 (Tue) [長年日記]
_ マクロ
人が書いたCのコードをいじっていて
if (foo) Error("foo");
みたいなコードを入れたら、なぜかfooが真じゃない時まで上記のところで プログラムが止まってしまった。
Errorの定義を見ると、
#define Error(s) printf("E:%s:%d:%s\n",__FILE__,__LINE__,(s));exit(1)
のようになっていた。ぐは、そりゃ止まるよな。
_ Being a end-hater
うわ、マジで返されてしまった。 ごめんなさい、endはダメダメです。
とか言いつつ反論。
まず、生産性。明らかに括弧の方が生産性は高いですね?文字数
も短いし、 end を使う方式で短いイテレータを一行にまとめようと思う
と';'を補わなきゃいけないのも生産性に負のバイアスを与えてると思い
ます。
個人的には、かならずしも、文字数が短ければよいとは思わないんですけど、
if (x) { }
より
if x end
の方が短いですね。(まあ、普通はthenがあるんですけど。)
あと、endはシフトを押さなくてもいいという利点と、日本語キーボード と英語キーボードで同じように打てるという利点があります。 (ちょっとくるしいか…)
次に理解のしやすさも括弧の方がわかりやすいです。とくに非
英語文化圏の人間にとっては「英単語和訳」という作業がない分括弧は
理解が簡単。
括弧自体には(ブロックの範囲を特定する以上の)意味はないので「理解 が簡単」というよりも、そもそも理解を必要とするような情報がないだ けじゃないでしょうか? (まあ、endにもたいした意味はないですけど。)
あと、 ruby の場合だと end に対応する単語が一意に定まらな
いので、パッと見ただけで対応が分かりづらいと思います。インデント
してあれば分かりますけど、それは括弧でも同じなんだから差っ引いて
考えるべきですよね
私にとっては、インデントがないと、括弧でも対応関係は見づらいです。 正しいインデント(?)は可読性の高いコードを書く上では必須だと思いま す。(やっぱPythonか。)
ちなみに、Rubyはcaseさえ綺麗に書ければ{ ... }スタイルの文法になっ ていたかもしれないそうですので、まつもとさん的にはendにはそれほど 拘泥はないのかも。 mputさんの説得次第では、Ruby2は{ ... }スタイルになったりして。
_ end
というか、ちょっと仕事がいそがしくて日記見るのさぼってたうちに、 まつもとさんの反応も あったり、さらにmputさんの反応 もあったりしていたらしい。日記界(?)はスピードが早いな。
結果的に他の多くの言語が「end」を避けている
ということだけど、なぜか自分の気に入った言語はたいていendを採用し ているな。CLUとかSatherとか。 どっちも(Pascal的な)beginはないのがポイント。
あ、待てよ、自分の気に入った言語はたいていCLUとかの影響を受けてるっ てだけの話かも。
_ defに対応するendがわからない
というのは、リファクタリングしてメソッド定義が十分短くなれば解決、 とかそういう話ではないですか。 (というかリファクタリングせねば… > 自分)
then を一度も書いたことがない私は普通じゃないですか。
あ、Ruby以外の普通のend系の言語はthenがある、ってことです。<br>私もけっしてthenは書きません。<br><br>一行で書く時は、if x then a else b endの方がif x; a else b endより気分がいいかもしれないけど、そもそもifを一行で書かないし。