ここにある Tips は "他のサイトのネタとカブらない" ものを気まぐれで載せています。よく躓きそうなものでも、"FAQ サイトではない" という前提に則って掲載されていません。本当に気まぐれですね。
...とはいえ、たまには普通の事も書いてみたいと思います。本当に気まぐれですね (w
Delphi...というか Pascal の文法を覚える上で最初に覚えるべきはコレです。まずは単純文を。
|
a という変数に 1 を代入しているだけですね。Pascal での代入演算子は ":=" です。では、単純文を複数書いてみましょう。
|
"; (セミコロン)" は文の区切りを表しています。最後の行にセミコロンがありませんが、これはこう解釈します。
|
カンマ区切りテキスト (CSV) みたいな感じですね。次は複合文です。
|
複数の単純文を begin ~ end で括ってあるだけです。
|
単純文の 3 つめの最後にセミコロンを書いてもエラーにはなりません。4 つ目に "空の単純文" があると思えばエラーにならない事が理解できると思います。CSV で考えると
|
こうなります。単純文だろうが複合文だろうが "文" である という事を頭に入れておいて下さい。単に "文" と言ったら、単純文または複合文を指します。
"文" が理解できればこの後は簡単です。まずは if 文です。if 文の文法はこうです。
|
評価式 は Boolean です。評価式の結果が True であるなら "文" を実行します。
|
a が 1 の時、 b に 1 を代入しています。C 言語等とは異なり、複数の評価式を組み合わせない限り、評価式を () で括る必要はありません。もちろん括っても構いません。評価式が False の時にも "文" を実行したいのなら else を使います。
|
評価式が True の時に "文1" が実行され、False の時に "文2" が実行されます。
|
さて、"Pascal はセミコロンを付ける法則が理解できない" とよく言われるのですが、それは以下のような構文です。
|
あなたがコンパイラになったつもりで考えると理解できます。こう考えてみましょう。
|
緑の箇所は "文1" で、赤の箇所は "文2" です。改行をやめてみると?
|
規則性が見えてくると思います。ややこしいように見えるのは、"単純文と複合文" の所で書いた "空の単純文" を使う事が多いからです。
|
if 文の後ろにもセミコロンがありますね。これは "単純文" だろうが "複合文" だろうが "if 文" だろうが、"構造化文" を区切る場合にはセミコロンが必要 というルールです。
|
構造化文で改行するとこのような解釈になります。通常のコードでは "空の単純文" がふんだんに存在するために規則性を見いだせないだけです。では何故わざわざ "空の単純文" を使うのでしょうか?それは、
|
このようなソースコードで 1 行追加したい場合、2 つめの単純文の後ろに最初からセミコロンがあれば、コピー&ペーストが非常に楽だからです。HTML のスタイルシートを引き合いにしてみると、
|
本来は "background-color" の後のセミコロンは必要ありませんが、大抵付けますよね?それは後から追加するのが簡単になるからです。以上の事から、Pascal では "構造化文" で "インデント (字下げ)" を行うと構造が把握しやすい 事が解ります。
|
インデントしないと...
|
何がなんだか判りません。Pascal 初心者の方は begin でインデントをするクセを付けておくといいと思います。それから、中にはこのようなコードを書くヒトもいらっしゃいます。
|
アナタは "C / C++ 使い" だと認定されました。オメデトウゴザイマス (^^;A かくいう私も、MS-DOS の頃は "Turbo C++ / Borland C++ / MS C" 使ってましたから気持ちはよーく解ります。
長々と説明しましたが、要は...
セレクタですね。
|
または、
|
...となります。ちょっとややこしいのですが、ケースセレクタ ("ケースラベル: 文") も else 部の "文" もセミコロン区切りです。考え方的には、
|
...なので、
|
とか、
|
という事になります。また、
|
else 部に begin は不要です。これでお解りの通り、begin ~ end がワンセットになっている訳ではないので、C / C++ で {} の数を数えるような感じでネストを調べる事はできません。
ループ構文です。先に文を実行してから条件を判定します。評価式が True になるまで繰り返します。文はセミコロン区切りです。
|
以下のコードは変数 a が 9 以上になるまで繰り返されます。
|
ループ構文です。評価式を判定してから文を実行します。評価式が True の間繰り返します。
|
repeat とはちょっと違います。
|
または、
|
と、なります。while ループで複数の文を実行するには、複合文を使います。while ~ end ではありません。while ~ wend でもありません。
ループ構文です。カウンタ変数が初期値~終了値の分だけ繰り返します。"初期値 = 終了値" の場合でも 1 回はループするという事です。
|
なので、
|
または、
|
と、なります。Pascal の for ループは融通が利かず、"初期値 <= 終了値" である必要があります。よって
|
このようなコードは正しく実行されません。ループをカウントダウンで使いたい場合には、
|
downto を指定します。文法は同じです。なお、step は用意されていません。
|
お約束ですが、ループ終了後のカウンタ変数の値は不定となります。
簡単な紹介だけに留めます。詳細はヘルプで調べて下さい。
|
オブジェクトの区切りはカンマです。オブジェクトをカンマで区切った with 文は、以下の with と同等となります。
|
"for in do の活用 (Delphi 2005 以降)" を参考にして下さい。
例外処理です。例外が発生した時のみ行う処理を指定できます。
|
"例外監視対象処理 / 例外時処理" 共にセミコロン区切りの文です。
|
例外処理です。例外が発生しても行う処理を指定できます。
|
"例外監視対象処理 / 例外時処理" 共にセミコロン区切りの文です。
|
ざっと構造化文を紹介しましたが、Delphi に慣れている方でも 「文法なんて、そんなの知って...ぇ?」と思うような点があったかもしれませんね。ヘルプやマニュアルでもう一度 Delphi の構文をチェックしてみると、今までに気付かなかった便利な構文があるかも。
See Also:
BACK |