こんにちは､ そしてようこそ｡ 新しいセクションが始まり､
コントロールの話を始めます｡ フロー制御の流れは､
基本的に条件文､ ステートメント､
if文､ プログラムの中で判断を下すことと､ ループというコードの繰り返しを扱います｡
ですから､ ここは重要なセクションであり､ これらはほとんどの言語で使用される基本的なプログラミング技術なのです｡
cに特化しているのかについてお話します｡
しかし､ 構文の話や例題に発散する前に､
概要を説明します｡
制御の流れとは何か､ プログラムの観点からお伝えしたいと思います｡
つまり､ ソースファイル内の文は､ 一般的に上から下へ順番に実行される､
これをシーケンシャルと呼びます｡
これだけの文言があるんですね｡ 文の中の表現とか､ 外の表現とか習いましたが､
最初から最後まで行くんですね｡
それが､ これまでの成果です｡
飛び跳ねたことはありません｡ 最初から最後まで自動で繰り返すようなことはしたことがないんです｡
しかし､ 制御フロー文は､ 意思決定､ 本質的な質問､ コードの繰り返し､
ループや分岐といったものを追加することで､ この実行の流れを断ち切ります｡
これにより､ プログラムが特定のコードブロックを条件付きで実行できるようになります｡
だから､ 主機能の先頭から下に行くだけではダメなんです｡
今は､ 行ったり来たりしているかもしれませんね｡
枝分かれしているかもしれませんし､ コードのブロックに飛び込んでいるかもしれません｡
そのため､
プログラム内のコードが少し複雑になります｡
つまり､ 制御の流れや意思決定の記述について話しているのです｡
これは､
基本的に質問をして､ その答え､ 真偽の答えを受け取るというものです｡
cでサポートされているのは､ if判定文､
if else､ そしてswitch文とgo
to文です｡
これらはすべて､ 意思決定に関する記述です｡ Go toは､ cに存在するので､
ここに入れました｡
使いたいとは思わないでしょう｡ 簡単にお話しします｡
本当はプログラマーがラベルにハードコードするものなんです｡
また､ c言語でサポートされているループ文もあります｡
4キーワード､ whileキーワード､ do whileキーワードです｡
以上､ 3種類のループをご紹介しました｡ ループはコードの繰り返しになります｡
それから､ 分岐文も似ていますね｡ 通常､ ループの中やデシジョンの中で使用されます｡
これらは､ ブレイク・コンティニュアス・リターンのようなものです｡
そこで､ このセクションでは､ ディシジョンとループの具体的なレクチャーに焦点を当て､ さらにブレイキングコンティニューについても少し触れてみたいと思います｡
今回も､ とても重要な講義でした｡
だから意思決定｡ これは､ プログラムの内部で実際にどのような意味を持つのでしょうか？
繰り返しになりますが､ 今までは基本的に変数を作り､ 宣言し､ 計算を行うという流れでした｡
でも､ 具体的にロジックを決めたことはないんです｡
つまり､ 意思決定のコンセプトは､ プログラムが評価またはテストする1つまたは複数の条件をプログラマが指定することが必要になります｡
本質的に起こっていることは､ プログラムの中で質問をしている､ そういうロジックです｡
そして､ その条件や答えが真であれば､ いくつかのコードやステートメントを実行することになります｡
その答えがfalseなら､
他のステートメントを実行してもいいし､ 何もしなくてもいい｡
そこで､ プログラムにおける意思決定の概念を示す､ 小さなデータフロー図をご紹介します｡
こんな状態なんですね｡
その条件に対する答え､ つまりtrueかfalseかによって､
コードを実行するかしないかを決めるのです｡
それは人それぞれです｡ もう少し複雑になりますが､ これがプログラムでの意思決定の基本的な構造です｡
つまり､ ソースコードの内部では､ 質問に対する答えによって､ それが真か偽かによって､
いくつかのコードをスキップしている可能性があるということです｡
つまり､ cで対応している文は､ if文です｡
if文には､ 特別なキーワードというものがあります｡
詳しく話して例を挙げるならともかく､ この文は本質的なことを問うているつもりです｡
括弧の中は､ ブール式になります｡
ブール式が何であるかは分かっている｡
基本的に真か偽の値を返すことができ､
その式以外では真か偽の値を返す文であり､
if文の本体の中に1つ以上の文を持つことができるのである｡
また､ if elseもありますね｡
つまり､ これはif文の後にオプションでelseを付けることができるのです｡
本当なら､ こうしてください｡ もし偽なら､ 他のことをする｡
そして､ if文の入れ子になっています｡
これは､ if文の中に別のif文がある場合です｡
だから､ 複数の質問をすることがあります｡
そしてまた､ これは具体的な例と構文で詳しく説明されることになります｡
現時点では概要を説明するのが精一杯です｡
コードの繰り返しについては､ これもまた制御フローの仕組みの一つで､ もはや順次実行されるものではありません｡
リピーターコードでは､ 同じコードを何度も実行することになります｡
そのため､ あるコードブロックを何度も実行する必要がある場合､ ステートメントは順番に実行され､
関数内の最初のステートメントが最初に実行され､
次に2番目のステートメントが実行されるというような状況があります｡
それはすべて､ 次第です｡ これは､ ループ本体のコードのブロックのようなものです｡
つまり､ loop文を使えば､ 実際に各文をそれほど何度も繰り返させることなく､
ある文や文のグループを複数回実行することができるのです｡
ループ制御文は､ 通常のシーケンスから実行を変更します｡
実行がスコープを離れると､ そのスコープで作成された自動オブジェクトはすべて破棄される｡
これは変数に関するスコープの話で､
基本的には､ ループの本体にローカル変数がある場合､
ループの外からその変数にアクセスすることはできない､
ということです｡
ループは､ ある条件が一度も偽にならない場合､ 無限ループになります｡
つまり､ 何度も何度もコードを実行し､ 実際に終了することがないため､
プログラムがハングアップしてしまうのです｡
実際にそうする必要が出てくることもあります｡
何かをモニターしているとき､ 何かを聴いているとき｡
実際に実装して見るには､ forループを使うのが一般的ですが､ whileループを使うこともできます｡
無限ループについては､ なぜ無限ループが必要になるのか､ その意味については､ 後の講義でお話しします｡
つまり､ 実際のループのデータの流れは次のようなものです｡
条件を確認するのです｡ そして､ もし条件が真であれば､
何らかのコードを実行し､ 条件がfalseに評価されるまで何度も何度もそれを繰り返すのです｡
条件が false と評価されたら､ ループを抜ける｡
cでサポートされているループは､ whileループ､ forループ､ do whileループです｡
特別なキーワード
whileループは､ 与えられた条件が真である間､
文または文のグループを繰り返す｡ だから､ 条件は一番上の野括弧の中にあるんです｡
条件は､ ループ本体を実行する前に､ 先頭でテストされます｡
3種類のループがサポートされているとはいえ､ 1つのループをより多く使用することもあるでしょう｡
whileループとforループはほとんど同じですが､
構文が違うだけです｡ そして､ もっといろいろなことができるようになるのです｡
do whileループは､ 実際にテストが一番下にあるため､
異なります｡ つまり､ ループの本体を少なくとも1回は必ず実行することが保証されているわけです｡
でも､ また､ このような話をするんです｡ Forループ､ 特殊キーワード､ シーケンス文を複数回実行する｡
ただ､
基本的に構文が簡単なんです｡ ループ制御変数と条件をすべて1つの文で初期化することができます｡
それから､ do a whileループは､ 先ほど言ったように､
テスト後のループ､ 出口制御ループなので､ 少なくとも一度はループ本体に入ることが保証されているという点で少し違います｡
そして､ ネストされたループについても説明します｡ これもまたループの中のループで､
入れ子になったfor if文がif文の中のif文であるように､ ループにも同じことが言えます｡
さまざまな制御フローのメカニズムについて､ ハイレベルな概要と､
それを実際に実装するためにcがサポートしているキーワードのいくつかを紹介します｡
では次に､ いくつかの例を挙げて､ 意思決定の話を始めましょう｡
ありがとうございます｡