【本サイトではGoogleアドセンス、または、アフィリエイト広告を利用しています。】
2つの基本構文を覚えればプログラムは書けます
今からプログラミングを始める人は、めちゃくちゃ複雑な暗号を書きまくるような
しんどいイメージをプログラムに持ってないでしょうか?
でも、実は、そんなに気負わなくても大丈夫です!
プログラムには基本的な構文があります。
これからお話する、条件分岐と繰り返しの2種類だけ覚えれば、ほとんどの処理は書けます。
でも、それだけだとダラダラと長いプログラムになるので、
あとは、あなたがこれから学ぶ言語に用意されている
部品や特性をいかに上手に使うかがカギになってくるのですが、
それはもっとスキルが上がってからのお話です。
複雑難解なプログラムでも、蓋を開けて突き詰めると、
構文としては、条件分岐と繰り返し、この2種類なのです。
ということで、プログラマーとして自立するために、
まずは基本を覚えていきましょう!
プログラムを今から始める人は、前回までの記事とあわせて読んでいただくと
より理解が深まると思います!
ifを使った条件分岐
まずは、if文と呼ばれる条件分岐についてです。
条件分岐とは、その名の通り、
条件によって分岐を作って、異なった処理を実行させることです。
例えば、ごはんを食べる時でも、いろんなイベントが起こります。
お腹がいっぱいになったり、喉が渇いたり、
食べ物が気管に入って咳き込むことだってあります。
その時々によって、その後取る行動も変わってきますよね?
この動作を、if文を使って書くと下のような感じになります。
細かなプログラムの書き方は、言語ごとに違うので、ここでは説明しませんが、
まずはifの使い方としてイメージしてください。
if (喉が渇く) { 飲み物を飲む } else if (咳き込む) { 飲み物を飲む } else if (お腹いっぱい) { ごちそうさま } else { 食べる }
下がif文の基本構文です。この書き方は言語共通です。
ifに続けて条件を「()」小括弧で囲みます。
実行する処理は「{}」中括弧で囲みます。
2つ目以降の条件は、先頭にelseをつけます。
最後はelseのみ指定することで、
「その他の場合」という条件として扱うことができます。
最後のelseの条件が不要な場合は、else ifまでで終わってもOKです。
// 1つ目の条件はifで始める if (条件1) { 処理1 } // 2つ目以降の条件からはelseを付ける else if (条件2) { 処理2 } else if (条件3) { 処理3 } // どの条件にも当てはまらない時 else { 処理4 }
また、elseを使わず、以下のように、ifを何個も書くとどうなるでしょう?
一見同じように見えますが、少し動きが変わってきます。
上の例では、条件2を満たした時、処理2を実行して
このプログラムの処理は終わります。
下の例では、条件2を満たした時、処理2を実行して、
次に条件3の判定が行われます。条件3の次は条件4の判定が行われます。
つまり、下の例では、すべての処理を通る可能性を持っています。
if (条件1) { 処理1 } if (条件2) { 処理2 } if (条件3) { 処理3 } if (条件4) { 処理4 }
どれか1つの処理しか通ってはいけないところを、2つ通してしまった、
という不具合を起こしやすい事例です。
微妙な違いを理解して注意しながら使い分けましょう!
switch~caseを使った条件分岐
switch~case文は、if~else if文と意味的には全く同じです。
書き方が違うというイメージです。
この場合は処理1、この場合は処理2、という形で
指定した変数に入っている値に従って条件分岐を行います。
ごはんを食べる時の行動をswitch文で書くとこうなります。
ここでは、条件に使う変数を「体調」としましょう。
switch (体調) { case 喉が渇く: 飲み物を飲む break; case 咳き込む: 飲み物を飲む break; case お腹いっぱい: ごちそうさま break; default: 食べる break; }
下がswitch文の基本構文です。defaultやbreakの指定条件が言語ごとに若干違いますが、
まずはこの形を覚えましょう。
まずは、判定に使う変数をswitchの後ろに書きます。
次に、その変数に入る可能性のある値と、
その値になった時に実行する処理を各caseに並べます。
値の後ろには「:」半角のコロンをつけます。
各処理の最後には「break;」文を書きます。
これは、ここで処理を終了するよ、という意味です。
また、if文の最後に使うelseと同様に、
どの条件にも当てはまらない時のパターンとして、defaultを指定します。
switch (変数) { case 値1: 処理1 break; case 値2: 処理2 break; case 値3: 処理3 break; default: 処理4 break; }
ごはんを食べる行動を書いたswitch文は、
先ほどのif~else文の例と全く同じ処理となりますので、見比べてみてください。
switch文は、ある変数に対して、入る値の種類が前もって決まっている場合、
例えば、処理のステータス(成功、エラー)などに使うと見やすいです。
forを使った繰り返し(ループ処理)
for文とは、同じ処理を何度も実行する為の構文です。
繰り返すので、ループ処理とも呼ばれます。
ごはんを食べる時は、当然、噛んでから飲み込みます。
噛むという処理を10回繰り返して飲み込むと考えると、for文はこうなります。
// 噛む回数 int count = 0; // 10回噛む for (count = 0; count < 10; count++) { 噛む } 飲み込む
下がfor文の基本構文です。
forに続いて、小括弧「()」に繰り返し時に使う条件や処理を記載します。
開始処理には、基本的には、
繰り返す回数をカウントする変数に初期値を入れます。
繰り返し条件には、基本的には、
「カウント変数がこの値になるまで」といった条件を指定します。
各ループの最後に実行する処理には、基本的には、
カウント変数に1を足す処理を指定します。
for (開始処理; 繰り返し条件; 各ループの最後に実行する処理) { 処理 }
この構文を使えば、同じ処理を何度も書く必要がなくなります!
whileを使った繰り返し
while文も繰り返しの構文になりますが、forと違う点としては、
条件が満たされている間は無限に繰り返すという特徴にあります。
例えば、先ほどのごはんを食べる時の例をwhile文で書いてみると、
// 噛む回数 int count = 0; // 10回噛むまで繰り返す while (count < 10) { 噛む // 噛んだ回数を1回増やす count++; } 飲み込む
このような形になります。
変数「count」は0から始まって、ループする度に1ずつ増えていきます。
繰り返し条件は「count < 10」なので、10より変数「count」が小さい間は
ずっと「噛む」という処理が繰り返されます。
下が、whileの基本構文です。
whileに続いて、小括弧「()」に繰り返し時に使う条件を記載します。
実行する処理は「{}」中括弧で囲みます。
while (繰り返し条件) { 処理 }
利用時の注意点として、繰り返し条件が永遠に満たされない処理を書いても、
プログラムは実行できてしまいます。
無限ループと呼ばれる、
プログラムが終了しないバグを生んでしまうので注意しましょう!
アルゴリズム|プログラムの組み立て方
ここまで条件分岐と繰り返し処理についてお話をしましたが、
最後に、プログラムをどのように組み立てるのか、
つまり、アルゴリズムの組み立て方についてお話をします。
- 変数と計算式を書きます。
- 分岐や繰り返しがある場合は構文を組み込みます。
- 関数やクラスを使って、処理を整理します。
たったこれだけで、プログラムは完成します。
しかし、期待する動作までには、この中に無限の組合せがあります。
例えば、同じ足し算の処理を10回繰り返す場合、
10行足し算を書く人、for文の中に足し算を書いて使う人、
足し算を関数にしてfor文を使う人、この3つのパターンが出てきます。
答えを出すという点ではすべて正解ですが、
システムのプログラムとして、何が正しいのか、
メンテナンス性を考えた時どうなのか、処理速度はどうなのか、
いろいろな観点から最適な組み合わせを見つける必要があります。
その為に、言語の特性を理解し、開発するシステムの特性を理解し、
人の書いたプログラムを参考にし、とにかく自分で書いてみることが大切です。
いきなり最適解を出せる人はまずいません。
まずは、基本形で骨組みの処理を作ってみて、少しずつ整理を重ねながら、
効率の良いプログラム、つまり、最適なアルゴリズムに仕上げていきましょう!
まとめ
基本構文を覚えるとプログラムが書けるようになります。
単純に構文を組合せるだけですが、実はそこがあなたの腕の見せ所です。
必要となる動作をアルゴリズムとしてうまくとらえて、
プログラムに上手に落とし込む力、
プログラマーの力はそこで試されます!
その為にも、まずは今回お話した基本の形をマスターしましょう!
次回は、オブジェクト指向についてお話をします!