プログラムの話 ~ifの条件~ | 魔王の憂鬱

魔王の憂鬱

情報通信っぽいことを、分かりやすく述べているつもりです。

レンタルサーバーを借りまして、

ただいま、自作HPを作成中です。


覚えたてのHTMLを使ってみるも、悪戦苦闘しております。

スタイルシートについても調べ、作成してみたのですが・・

やっぱりよく分からないので、HTMLに直に書き込む始末です;


入力したデータを保持したり、掲示板を作成するのは、

HTMLやjavascriptではできないのかな?

検索すると、perlという単語が出てきます。


perlは大学時代に聞いた事があります。

ある先輩が推していました、プログラム言語の一つでしたね。確か。

まぁ、自作HPについては、気長にチマチマやっていくつもりです。



今日は、プログラムについての話です。

プログラムを勉強中の方に向けた話となっております。


プログラムによって記述は違うと思いますが、

if文とは、以下の感じの内容です。


if ( 条件 ) {

    処理;

}


↑<if文というのは>

( )の条件の内容が真(true:正しい)ならば、{ } の処理を行います。

( )の条件の内容が偽(false:正しくない)ならば、{ }はとばします。


記述例を少し挙げます。


例1)

int num = 1;

if ( num >= 0 ) {

    return num;

} else if ( num < 0 )

    return -num;

}


↑<絶対値を返す>

numが正数ならば、そのまま返し、

numが負数ならば、マイナス(-1)をかけて返します。


例2)

int flag = 2;

if ( flag == 1 ) {

    処理1;

} else if ( flag == 2 ) {

    処理2;

} else {

    return error;

}


↑<フラグによる条件分岐>

flagが1ならば、処理1を行い、

flagが2ならば、処理2を行います。

それ以外ならば、エラーを返します。



ここからが本題です。

例1に関しては、以下の記述でも書くことができます


例1’)

if ( num ) {

    return num;

} else {

    return -num;

}


処理内容は同じです。例2に関してですと、、


例2’)

if ( flag != 1 && flag != 2 ) {

    return error;

}

if ( flag == 1 ) {

    処理1;

} else if ( flag == 2 ) {

    処理2;

}


こうしても、同じ処理にはなります。


では質問。

例1と例1’の違いは何でしょうか?

例2と例2’の違いは何でしょうか?


これだけで来週まで引っ張るのも申し訳ないので、

話を続けます。



例1)               例1’)

if ( num >= 0 ) {        if ( num ) {

    return num;           return num;

} else if ( num < 0 ) {      } else {

    return -num;          return -num;

}                   }


敢えて述べていませんでしたが、例1’の( )条件について、

プログラムを知っている人ならば、内容を理解することはできます。

では、numの型は分かりますか?

return -num; だから予想できますかね。


では、例1を見てみましょう。

numが数値型なのが分かりますよね。

else if の( )条件は、書かなくても例1’のように処理はするんですよ。

でも、敢えて書くことによって、処理が分かりやすくなっているように思いませんか?



では、例2にいきます。


例2)               例2’)

if ( flag == 1 ) {         if ( flag != 1 && flag != 2 ) {

    処理1;               return error;

} else if ( flag == 2 ) {     }

    処理2;           if ( flag == 1 ) {

} else {                  処理1;

    return error;       } else if ( flag == 2 ) {

}                      処理2;

                   }


ここで注目なのが、flag が 1 でも 2 でもないとき、

エラーとして、処理を終えているんですよね。

例2では、単純に flag の内容での条件分岐。

例2’では、まずエラー処理をして、

それ以降では、flag は 1 か 2 のどちらかであるという前提での

処理となっています。



ただのif文、されどif文。

自分で記述し、自分だけが使うのであれば、

どの記述でもいいでしょう。


ですが、未来の自分がプログラムを振り返ったとき、

どうなっていると内容が分かりやすいかな?と、考えてみてください。

それを意識するだけで、コメント文が書けるようになるかと思います。


プログラムを丁寧に書くことはいいことですが、

記述が多くなれば、その分だけ処理も時間がかかります。

このような関係を「トレードオフ」といいますが、

どちらも完全に満足させることは非常に難しいです。


例1も例2も、どちらがいいかなんて、

場合によってマチマチなんですよ。



その時々によって、どのように書けばよいのか、

プログラムの難しいところであり、面白いところでもありますね。


あ、もちろん、規約が第一優先ですよ。