- ベストアンサー
if文がbegin - endな訳は?
if 条件 > 0 then begin 条件あり end else begin それ以外。 end; Delphiでは、こうなるのですがなぜ{}を使わないのでしょうか? {}はコメントになるけど、//でも/* */ でもいいじゃないですか。 それに比べて、begin - end って面倒じゃないですか? 何かの本でif文が多いのは汚いプログラムだ、と読んだのですが、当時はPerl,PHPしか知らなかったので、それほど汚くないじゃん。と思ったのですが、Delphiを使ってみると、やっぱりif文が汚く感じます。 もちろん、コンパイルするので、書き方は開発者の自由なのは分かりますが、{}ではいけない明確な理由があるんでしょうか? 豆知識を持っている方、プログラム経験上分かった方、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いけない理由は無いですね。DelphiはPascalの一種ですが、Pascalという言語を設計した人がそう決めたというだけです。「なぜwhenじゃなくてifなんだ」という疑問と同じです。 なぜ { } でないかというのを豆知識的に言うと当時のコンピューターは文字セットがメーカーごとに違い、必ずしも { } が存在しないという理由もあったでしょう。その場合、(* *) が代わりに使われました。 そうするとあなたの疑問は、「なぜ (* *) じゃなくてbegin endなんだ?」ということになります。 さらにbegin endはPascalが参考にしたAlgol60という言語から来ています。ということで、あなたの疑問は、「なぜAlgol60ではbegin endを使い、(* *) を使わなかったんだ」というところに帰着しますが、理由は冒頭に書いたとおり、「言語設計者がそうしたから」です。 begin,end.{,}等不要で、 if 条件 then 真のときの文1; 真のときの文2 else 偽のときの文1; 偽のときの文2 fi と書ける言語もあります。
その他の回答 (2)
- ultraCS
- ベストアンサー率44% (3956/8947)
#2の回答の補足になります 要はNicklaus Wirth先生の趣味と言うことになります。 ALgolもPascalもModula-2もwirthの貢献無しには誕生しませんでした。 で、もし、Wirthなかりせば、Cの登場も遅れ(無かったかも)、主力言語は未だに非構造化言語であるFORTRAN66やCOBOL74でとどまっていたかもしれません。 ひょっとすると、C&RやDjykstraも世に出ていない。 システム記述もアセンブラのまま、UNISYSは未だにUNIVACとBurroughsのままだったかも、というより、Burroughsなかったかも。 と、まあそのくらい、陰では影響のあった人です。 そういう意味では、begin-endくらいはご愛敬のうちでしょうね。この先生は、シンタックスやデータ型にも厳しい人で、宣言しないで変数を使うのも大嫌いです(BASICやFORTRANで宣言しなくても変数が使えるのは許せなかったのでしょう)、おそらくは、手続きの単位の前後をbegin-endと掻かないと気が済まなかったのでしょうね。 なお、{}が無いのはPCではなく、ホストやミニコン、オフコンでEBCDICやBCD(6ビットの文字コード)の場合です。FACOMだと(*、*)だったような(記憶が薄れているので)。
お礼
>要はNicklaus Wirth先生の趣味と言うことになります。 さすがに知らないプログラム言語が出てきましたが、根源は偉大なWirth先生ですか。(w 確かに、Delphiは型に厳格ですね。 時間の計算等をさせると、関数にしたくなるほど一行に収まりません。 PHPではグローバル変数や、宣言無しの変数は使わないようにしていたので、そういう考え自体は嫌いではないのですが、。 でも、せっかく開発の効率がいいのに書くのが面倒だし、なにより見栄えがよくない。 ifの中のifとか、ループ中のifも逆にどこからどこまでかが、文字同士なので埋もれてしまって。 回答が出ても1日は待つようにしているんですが、今回はそれで当たりでした。 さらなる豆知識ありがとうございます。
- hiru-an-don
- ベストアンサー率13% (40/300)
Delphiの発売元のBorlandは昔、pascal(パスカル)という言語を作っていました。 Delphiはこのpascalを元に作られているので文法などを引き継いでいるのです。
お礼
たまにDelphiではなく、ObjectPascalという書籍も見かけます。 その名残なんですねー。 回答ありがとうございますねー。
補足
元がpascalなのも知ってます。 が、なんでbegin - endなんですか? 毎回書くの面倒じゃないですか。{}の方が簡単なのに。 あ、それに昔はもっとメモリーにシビアで、バイト数も極力少ない方がコンパイルとかも楽だったのでは? 開発者の方が、 if(条件){処理} else{処理2} と作成してくれれば、毎回書く事もなかったのに、と思ったのですが。^^ 仕組みが違うのは分かりますが、Perl,PHPでは普通にできているので、コンパイルするプログラムではなにか、、、 Javaでも if(条件){処理} ですよねー。 ふと、そんな事を思ったのですが。
お礼
やっぱり、豆知識を持っている方はいるんですねー。 正直、回答はなしか、開発者のかって、というのが予想でした。 プログラム的な制約や利点ではなくって、昔はパソコンの文字セットに{}がない場合というのがあったんですねー。それは予想外です。 if(条件)(* 処理 *) となっていれば、見栄えもよくすんだのに。>w<。クー begin-end直感的に分かりにくいと思うのは私だけ? 勝手な想像ですが、他のプログラムと差別化したかったのかなー、と。 例は、Linux等のシェルスクリプトですねー。 生き字引のような豆知識ありがとうございました。