if 条件 > 0 then
begin
条件あり
end
else
begin
それ以外。
end;
Delphiでは、こうなるのですがなぜ{}を使わないのでしょうか?
{}はコメントになるけど、//でも/* */ でもいいじゃないですか。
それに比べて、begin - end って面倒じゃないですか?
何かの本でif文が多いのは汚いプログラムだ、と読んだのですが、当時はPerl,PHPしか知らなかったので、それほど汚くないじゃん。と思ったのですが、Delphiを使ってみると、やっぱりif文が汚く感じます。
もちろん、コンパイルするので、書き方は開発者の自由なのは分かりますが、{}ではいけない明確な理由があるんでしょうか?
豆知識を持っている方、プログラム経験上分かった方、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
いけない理由は無いですね。
DelphiはPascalの一種ですが、Pascalという言語を設計した人がそう決めたというだけです。「なぜwhenじゃなくてifなんだ」という疑問と同じです。なぜ { } でないかというのを豆知識的に言うと当時のコンピューターは文字セットがメーカーごとに違い、必ずしも { } が存在しないという理由もあったでしょう。その場合、(* *) が代わりに使われました。
そうするとあなたの疑問は、「なぜ (* *) じゃなくてbegin endなんだ?」ということになります。
さらにbegin endはPascalが参考にしたAlgol60という言語から来ています。ということで、あなたの疑問は、「なぜAlgol60ではbegin endを使い、(* *) を使わなかったんだ」というところに帰着しますが、理由は冒頭に書いたとおり、「言語設計者がそうしたから」です。
begin,end.{,}等不要で、
if 条件 then
真のときの文1;
真のときの文2
else
偽のときの文1;
偽のときの文2
fi
と書ける言語もあります。
やっぱり、豆知識を持っている方はいるんですねー。
正直、回答はなしか、開発者のかって、というのが予想でした。
プログラム的な制約や利点ではなくって、昔はパソコンの文字セットに{}がない場合というのがあったんですねー。それは予想外です。
if(条件)(* 処理 *)
となっていれば、見栄えもよくすんだのに。>w<。クー
begin-end直感的に分かりにくいと思うのは私だけ?
勝手な想像ですが、他のプログラムと差別化したかったのかなー、と。
例は、Linux等のシェルスクリプトですねー。
生き字引のような豆知識ありがとうございました。
No.3
- 回答日時:
#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日は待つようにしているんですが、今回はそれで当たりでした。
さらなる豆知識ありがとうございます。
No.1
- 回答日時:
Delphiの発売元のBorlandは昔、pascal(パスカル)という言語を作っていました。
Delphiはこのpascalを元に作られているので文法などを引き継いでいるのです。
この回答への補足
元がpascalなのも知ってます。
が、なんでbegin - endなんですか?
毎回書くの面倒じゃないですか。{}の方が簡単なのに。
あ、それに昔はもっとメモリーにシビアで、バイト数も極力少ない方がコンパイルとかも楽だったのでは?
開発者の方が、
if(条件){処理}
else{処理2}
と作成してくれれば、毎回書く事もなかったのに、と思ったのですが。^^
仕組みが違うのは分かりますが、Perl,PHPでは普通にできているので、コンパイルするプログラムではなにか、、、
Javaでも
if(条件){処理} ですよねー。
ふと、そんな事を思ったのですが。
たまにDelphiではなく、ObjectPascalという書籍も見かけます。
その名残なんですねー。
回答ありがとうございますねー。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
パスカルケースの由来。
-
vbaとc言語の関連性について
-
VBSとWSHは読み方が違うだけで...
-
UNITY Float型の接尾辞fって
-
Transitional/ENとは
-
C++における継続行
-
新しいプログラムには、何故COB...
-
COBOLでのNOT = の AND条件
-
プログラム言語について c言語...
-
ホームページを作成する際に良...
-
C言語の使い道
-
VRMLってなんですか??
-
クオンツに必要なプログラミン...
-
昔、MZ-2000やX1でBASICを書い...
-
プログラミング言語について
-
緑色の箱の「Visual Studio 200...
-
Javaの勉強をしているんですがJ...
-
ゲームってC++でしか作れないの...
-
何をすればいいのかわかりません!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
今ってプログラミング言語は何...
-
C言語、C+、C++、C#の違い
-
プログラミング言語について
-
COBOLでのNOT = の AND条件
-
近年誕生したプログラミング言語
-
UNITY Float型の接尾辞fって
-
C言語とhtmlの違いを どな...
-
vbaとc言語の関連性について
-
C++における継続行
-
プログラムに書かれる"%"記号の...
-
COBOLで文字タイプを数字...
-
VBSでDim、Private、Publicの違い
-
TO_CHARで小数点以下がある場合...
-
VBSとWSHは読み方が違うだけで...
-
Excel VBAで文字化けする (英語...
-
VCとVC++
-
HTMLとC++で、どんなホームペー...
-
C++ ってなんて読む?
-
UWSCはどのプログラミング言語?
-
会計システムをつくるために必...
おすすめ情報