#Delphi Starter Edition チュートリアルシリーズ シーズン2 第3回 「条件とループ」
2017年1月23日より 「Delphi / C++Builder Starter チュートリアルシリーズ」 シーズン2、全9回、3月27日まで、毎週月曜日、Delphiパートが 17時00分~17時20分、 リアルタイム放送スペシャルコンテンツが5分~10分、C++Builderパートが 17時30分~17時50分の時間割でお送りしています。
無料でダウンロード & 利用できる開発環境のDelphi / C++Builder Starter エディションを使用して、プログラミング言語のDelphi (Object Pascal ), C++の基礎を学ぶオンラインセッションです。
##使用したスライドなどの情報を掲載します。
###Webセミナースライド
当セミナーのスライドは下記アドレスよりご参照いただけます。
http://www.slideshare.net/ssuser194f49/delphi-cbuilder-starter-2-delphi-2-71796636
###アジェンダ
- ねらい
- 条件によって行う処理を変える方法を知る
- 一定条件のもと繰り返し処理を行う方法を知る
- 実施内容
- 一般的な文の基本
- 条件文の使い方を学ぶ
- ループ文の使い方を学ぶ
- ループ文の制御を学ぶ
###開発環境インストール
Delphi / C++Builder Starter チュートリアルシリーズ シーズン1 第1回 ‟無料で始めよう アプリ作成„をご参考になり、開発環境をインストールしてください。
##以下、Delphi Webセミナーの本筋
###一般的な文 (Statements)
- 左から右に読んで、上から下に進む
- 複数行をまとめる場合、begin で始まり end; で終わる
- 文はセミコロン[ ; ] により次の文へと分けられる
- 条件文やループ文により、分岐、繰り返し処理を行う
// 一般的な object Pascal の文 (Statements)の例
procedure TForm1.Button1Click(Sender: TObject);
var
iA, iB: Integer;
begin
iA := 1;
iB := iA * 2;
end;
###if 条件文
- 条件・判定により、実行する/しない処理を変えることができる
- 値が
True
/真であればthen
以降を処理 - 値が
False
/偽であればthen
以降は処理しない。else
があればelse
以降を処理 -
else
を使う場合にはelse
の前にセミコロンは付けない(文の終わりとしない)
//if構文
if 条件判定式 then
値がTrue/真の時に実行される処理
else
値がFalse/偽の時に実行される処理;
//if 文の例
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
if CheckBox1.isChecked then //チェックボックスの"isChecked"プロパティを判定
ShowMessage('チェックボックスON') // IsChecked プロパティの値が True. セミコロンなし
else
ShowMessage('チェックボックスOFF'); // IsChecked プロパティの値が False
end;
###if 条件の比較、複合条件 、複合文
- 条件の判定に比較演算子を使用 : '= , <> , < , <=, > , >= , !'
- 複数の条件を合わせて判定する場合、論理演算子を使用:
and , or , xor
- 否定(反転)の場合も論理演算子:
not
例 :if not(CheckBox1.isChecked) then // Trueではなければ
- 複数の文をまとめて実行するには
begin
とend
でくくる - 条件判定後
False
/偽ののち、さらに条件判定を行うときはelse if
がある
意味 | 比較演算子 |
---|---|
等しい | = |
等しくない | <> |
左辺が小さい | < |
以下 | <_= |
左辺がより大きい | > |
以上 | >= |
//if 複合文、比較演算子使用の例
begin
if RadioButton1.isChecked and CheckBox1.isChecked then // and で複数条件確認
begin // begin - endで複数文をまとめる
i := i + 1; // begin – end でまとめた文のそれぞれは ; (セミコロン) を付けて一文を区切る
ShowMessage('チェックボックスON');
end //else前に、複数分をまとめるために使ったbegin-endの endの後ろには、セミコロンを付けない
else if i <= 10 then // else ifでさらに条件判定
ShowMessage('チェックボックスOFFでiが10以下')
else
ShowMessage('チェックボックスOFFでiが10より大きい');
end;
###case ~ of …文
- より多くの選択肢があるような場合、変数の値によって処理内容を選択
- 変数のデータ型は順序型であること
- 整数値
Integer
, 文字Char
, 論理型Boolean
, - 列挙型や部分範囲型
type typeName=(red, blue,…)
- 処理条件に当てはまらない場合の処理として
else
を使用可能 (省略も可能) -
case
文の終わりはend;
で閉じる
//case文の構文
case 評価される変数 of
値1: 評価される変数が値1と等しいときに実行される処理; //セミコロン必要
値2: 評価される変数が値2と等しいときに実行される処理; //セミコロン必要
値3: …;
else //elseとその処理は省略可能
変数がいずれの値にも合致しないときに実行される処理;
end;
###case ~ of … 列挙型の使用例
評価される変数として列挙型の変数も使用可能
//case~of 列挙型変数の使用例
type
TColor = (Red, Green, Blue); //列挙型の定義
var
myColor: TColor = Red; //列挙型の変数宣言
procedure TForm1.Button1Click(Sender: TObject);
var
strColor: string;
begin
case myColor of //列挙型変数の値による case of
Red: strColor := 'Red'; //変数myColorの値がRedなら実行
Green: strColor := 'Green'; //変数myColorの値がGreenなら実行
Blue: strColor := 'Blue'; //変数myColorの値がBlueなら実行
end;
if strColor <> '' then
ShowMessage(strColor);
end;
###case ~ of … 値の使用例と複合文
- 値は定数のほか、部分範囲も指定可能
- 複数の文をまとめて実行するには
begin
とend;
でくくる
//値に部分範囲を使用した例、およびbigin end; で複数処理をまとめた例
case aChar of //Char型の変数によるCase文
'+': str := 'プラス記号'; //定数一文字の値
'-': str := 'マイナス記号'; //定数一文字の値
'0'..'9': str := '数字'; //値指定として部分範囲。数値の0~9
'A'..'X': str := '英語大文字'; //値指定として部分範囲。数値の0~9
'a'..'x':
begin //複数の処理を行う場合begin endでくくる
str := '英語小文字';
i := i+1;
end; //case内で複数分をまとめる場合にbegin-end;を使用。endの後ろには;(セミコロン)
else //いずれの値にも当てはまらない場合の処理
str := 'それ以外の文字';
end;
###for ループ 文
-
カウンタ(変数)の値が任意の初期値から一定の値になるまでループ
- カウンタは1づつ増加(もしくは減少)
- カウンタは整数型
Integer
だけではなく、文字型Char
や列挙型も使用可能 -
for ~ to ~ do
//カウンタを1ずつ増加 -
for ~ downto ~ do
//downtoの場合、カウンタは1ずつ減少
//forの構文
for カウンタ(変数) := 初期値 to この値に達した後ループ終了 do
ループで実行される処理;
//for文の例
var
I, iTotal : Integer;
begin
iTotal := 0;
for I := 1 to 10 do
begin
iTotal := iTotal + I;
end;
###for ループ 文 (使用例)
//Char型の使用例
var
aChar : Char;
begin
for aChar := 'a' to 'z' do
ShowMessage(aChar);
//列挙型の使用例
type
TColor = (Red, Blue, Green, Yellow, Black);
var
aColor : TColor;
begin
for aColor := Low(TColor) to High(TColor) do
begin
//省略
end;
###for ~ in ~ do ループ 文
-
文字列、配列、リスト、レコードなどに代入されている内容分ループ
- 順に要素にアクセスしていき、データの最後で終了
- 配列、リスト、レコードは後日のセミナーで紹介
- 順に要素にアクセスしていき、データの最後で終了
//for in do 構文
for 現在の要素(変数) in 集合や文字列の変数 do
ループで実行される処理;
//for in do 使用例
var
Str : String;
Ch : Char;
begin
Str := 'Hello Delphi World';
for Ch in Str do
ShowMessage(Ch);
参考DocWiki: for 文を使用するコンテナの繰り返し
###while と repeat ループ
-
設定した条件によりループを繰り返す
-
while ~ do
は ループ冒頭で判定。判定がTrue
の間ループ -
repeat ~ until
はループ終端で判定。判定がTrue
になるまでループ
-
//while構文
while 条件式 do //条件が満たされている間、ループ(do以下のブロックを実行)
begin
I := I + 1; //ループしたい処理
end;
//repeat構文
repeat
I := I + 1; //ループしたい処理
until 条件式; //条件が満たされるまでの間、ループ(repeatに戻る)
###while と repeat ループ 使用例
- 以下の例では、どちらも表示される
ShowMessage
は 101 -
repeat
文の場合、少なくとも1回は処理が実行される
//while使用例
I := 0;
while I <= 100 do //条件が満たされている間ループ(do以下のブロックを実行)
begin
I := I + 1;
end;
ShowMessage(I.ToString);
//repeat 使用例
I := 0;
repeat
I := I + 1;
until I > 100; //条件が満たされるまでの間ループ(repeatに戻る)
ShowMessage(I.ToString);
###Break, Continue,によるループ制御
-
Break;
- ループを中断し、ループを抜ける(ループの直後の文に移行)
-
Continue;
- ループの条件判定(forカウンタ, while条件判定, until条件判定)までジャンプ
- ループを抜けるかどうかは、カウンタ達成か、条件判定に依る
//break使用例
for aChar := Low(Char) to High(Char) do
begin
if aChar = 'A' then
begin
ShowMessage('見つけた! ');
Break; //ループから抜ける
end;
end;
ShowMessage(aChar);
##おわりに
第3回、2月6日分の Delphiパート 「条件とループ」は以上です。