しがないOLのはじめてのJava(2)プログラムの基本とコメントの記述

ごあいさつ

こんにちは、クニ吉です。
来週から1週間ほどハワイ旅行に行ってきます。初のハワイです。楽しみ!

さて、プログラムの作成前にまずはプログラムの基本部分を書きたいと思います。
ついでにコメントの話も。(今回はあまりJava関係ない・・・。)

はじめに

本ブログの構成

  • プログラムの基本(フロー制御)
  • プログラムの中にコメントを記述する

今回は短めと思ったら、そうでもなかった。

プログラムの基本(フロー制御)

Javaとは離れますがプログラムの基本として、プログラムには3つの基本構造があります。

  • 逐次実行(上から順番に命令を実行する)
  • 繰り返し(ある条件を満たしている間は命令を繰り返し実行する)
  • 条件分岐(ある条件により実行する命令を選択する)

この3つを「フロー制御」と言い、プログラムの流れを調整することができます。
仮にこのようなプログラムを書いたとします。このプログラムはどのように処理されていくのでしょうか。

Public class Sample {
    命令A;
    while(継続条件) {
        命令B;
            if(条件) {
                命令C;
            }
        命令D;
    }
    命令E;
    命令F;
}

このプログラムをわかりやすく図にしたものが下記になります。

フロー制御の例

逐次実行

処理を開始した時、まず最初に書かれている「命令A」が実行されます。その後whileの条件評価を行います。いきなり「命令E」から始まったりしません。このように上から順に実行されていきます。

繰り返し

命令Aが実行された後、whileという記述があります。whileは「指定した条件式を評価した結果に応じて、処理を繰り返す」時に利用します。条件を満たす場合は「命令B」〜「命令D」までを実行しwhileに戻ります。whileに戻ったら再度条件の評価を行い、条件を満たす限り「命令B」〜「命令D」の一連の処理を繰り返し実行します。
条件を満たさない場合は「命令B」〜「命令D」を実行せず、「命令E」→「命令F」の順で実行していきます。

条件分岐

whileの中身を見てみましょう。ifという記述があります。ifは「指定した条件式を評価した結果に応じて、処理を選択したい」時に利用します。条件を満たす場合は「命令C」を実行します。条件を満たさない場合は「命令C」は実行せず、「命令D」を実行します。これは簡単な例ですが、複数の条件を設定することもできます。このプログラムでいえば、whileの条件を満たさなければ「if」条件式の評価もされません。

実践

実際のプログラムを見ながら流れを追っていきたいと思います。
以下はフロー制御以外の補足。

  • 4行目のint num = 0;というのはnumという名前の一時データ保管庫(変数)に0という数字を入れています。(代入演算子)
  • 5行目のSystem.out.println(num)はnum(の中身)を表示することを意味します。前回の「HelloWorld」の時も出てきましたね。HelloWorldの時と違い「"」で囲んでいないので、「num」と表示されません(一応前回との違いだけ説明)
  • 9行目のnum == 2は、numと2が一致することを意味しています。(比較演算子)
    この場合、numが2であるかどうかをifの評価対象としています。
  • 12行目のnum ++;は、numの中に入っている数字に「+1」することを意味しています。(インクリメント演算子)

(あ、今度演算子のことも書いておきたいな。)

public class Sample {

    public static void main(String[] args) {
        int num = 0;
        System.out.println(num);

        while(num < 3) {
            System.out.println(num);
            if(num == 2) {
                System.out.println("if文の中を通りました");
            }
            num ++;
        }
        System.out.println(num);
        System.out.println("これで処理終了");
    }
}


実行結果:
0
1
2
if文の中を通りました
3
これで処理終了

プログラムのバグを探して修正するために「デバッガ」というものがあります。
デバッガの「ステップ実行」機能は、1行1行任意のタイミングで実行できて、どんなフローで処理されているのか、保持している値がどんな状態なのかがわかるので超推奨です。(私もそうしながらちょっとずつ理解を深めているところ)

このように「逐次実行」、「繰り返し」、「条件分岐」の3つを使い、プログラムの流れを制御して様々な処理を実現していきます。

プログラムの中にコメントを記述する

ちょっと長くなってきたし、コメントのこともどっかに書かないといけないと思ったので、この辺りで少々。

まず、コメントってなんぞって話ですが、ここでいうところのコメントは「ソースコードの中で人が覚え書きとして挿入する注釈のこと」です。なぜコメントが必要なの?と思うかもしれませんが、コードがずらずら書かれているだけのものを読むことを想像してみてください。ちゃんと上から読めばもちろんわかるでしょうが、難儀だなと思いませんか?特に見習いの私にはかなり大変です・・; 例えば、テストコードを読む時「setup」「exercise」「verify」といったコメントが挿入されていると、どこで「値の検証」を行っているのか、がわかりやすくなります。(答え:verify)

コメントの記述方法

では、コメントの書き方です。プログラムの中に書きますので、コメントをプログラムとして認識されないようコメント部分を無視してもらわないといけません。もしそのまま文章を書いてしまうとコンパイルエラーになります。
コメントの方法はとっても簡単です。記述したいコメントの前に//と入力するか、コメントを/**/で囲むだけです。 お作法としては///* */の記号とコメントの間は半角空けるそうです。(下記サンプル参照)

  • //の場合は、この記号から改行されるまでをコメントとして扱います。
  • /* */の場合は、終了記号の*/までをすべてコメントとして扱います。(改行可)

下記の例では、コンパイルエラーにならず命令Aと命令Bを実行します。

public class comment {

    // コメントだよ。改行されるまで有効だよ。
    命令A; // ここもコメント。命令Aは実行されるよ。
    /* コメントだよ。
    こちらは改行しても終了の記号までは全部コメントとして扱われるから
    改行しても大丈夫! */
    命令B;
}

実践

ここで前回のプログラムをもう一度見てみましょう。
前回のブログ→しがないOLのはじめてのJava

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

「Hello, World!」と表示されるプログラムですが、このプログラムの本質はSystem.out.println("Hello, World!");の部分になります。この1行が「Hello, World!と表示せよ」という命令文になります。ここを//を使ってコメントアウトし、さらに/* */を使ってコメントを追加してプログラムを実行してみましょう。

public class HelloWorld {
    public static void main(String[] args) {
        /* ここはコメントなので無視されるはず。
        どうかな? */
        // System.out.println("Hello, World!");
    }
}

プログラムを実行すると、前回表示されたはずの「Hello, World!」は表示されず、何も起こらないはずです。

おわりに

あんまりJavaJavaしてなかったですが、こんなところで。
今はSpringで色々試しているところです。