dポイントプレゼントキャンペーン実施中!

if 条件 > 0 then
 begin
  条件あり
 end
else
 begin
  それ以外。
 end;

Delphiでは、こうなるのですがなぜ{}を使わないのでしょうか?
{}はコメントになるけど、//でも/* */ でもいいじゃないですか。
それに比べて、begin - end って面倒じゃないですか?
何かの本でif文が多いのは汚いプログラムだ、と読んだのですが、当時はPerl,PHPしか知らなかったので、それほど汚くないじゃん。と思ったのですが、Delphiを使ってみると、やっぱりif文が汚く感じます。

もちろん、コンパイルするので、書き方は開発者の自由なのは分かりますが、{}ではいけない明確な理由があるんでしょうか?
豆知識を持っている方、プログラム経験上分かった方、よろしくお願いします。

A 回答 (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

と書ける言語もあります。
    • good
    • 0
この回答へのお礼

やっぱり、豆知識を持っている方はいるんですねー。
正直、回答はなしか、開発者のかって、というのが予想でした。

プログラム的な制約や利点ではなくって、昔はパソコンの文字セットに{}がない場合というのがあったんですねー。それは予想外です。
if(条件)(* 処理 *)
となっていれば、見栄えもよくすんだのに。>w<。クー
begin-end直感的に分かりにくいと思うのは私だけ?
勝手な想像ですが、他のプログラムと差別化したかったのかなー、と。

例は、Linux等のシェルスクリプトですねー。
生き字引のような豆知識ありがとうございました。

お礼日時:2006/03/30 23:04

#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だと(*、*)だったような(記憶が薄れているので)。
    • good
    • 0
この回答へのお礼

>要はNicklaus Wirth先生の趣味と言うことになります。
さすがに知らないプログラム言語が出てきましたが、根源は偉大なWirth先生ですか。(w
確かに、Delphiは型に厳格ですね。
時間の計算等をさせると、関数にしたくなるほど一行に収まりません。
PHPではグローバル変数や、宣言無しの変数は使わないようにしていたので、そういう考え自体は嫌いではないのですが、。
でも、せっかく開発の効率がいいのに書くのが面倒だし、なにより見栄えがよくない。
ifの中のifとか、ループ中のifも逆にどこからどこまでかが、文字同士なので埋もれてしまって。

回答が出ても1日は待つようにしているんですが、今回はそれで当たりでした。
さらなる豆知識ありがとうございます。

お礼日時:2006/03/31 21:12

Delphiの発売元のBorlandは昔、pascal(パスカル)という言語を作っていました。



Delphiはこのpascalを元に作られているので文法などを引き継いでいるのです。

この回答への補足

元がpascalなのも知ってます。
が、なんでbegin - endなんですか?
毎回書くの面倒じゃないですか。{}の方が簡単なのに。
あ、それに昔はもっとメモリーにシビアで、バイト数も極力少ない方がコンパイルとかも楽だったのでは?
開発者の方が、

if(条件){処理}
else{処理2}

と作成してくれれば、毎回書く事もなかったのに、と思ったのですが。^^
仕組みが違うのは分かりますが、Perl,PHPでは普通にできているので、コンパイルするプログラムではなにか、、、
Javaでも
if(条件){処理} ですよねー。
ふと、そんな事を思ったのですが。

補足日時:2006/03/30 22:28
    • good
    • 0
この回答へのお礼

たまにDelphiではなく、ObjectPascalという書籍も見かけます。
その名残なんですねー。
回答ありがとうございますねー。

お礼日時:2006/03/30 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!