#pragma twice

KAB-studio > プログラミング > #pragma twice > 019 Version 2.8 もしももしもがあったなら

#pragma twice 019 Version 2.8 もしももしもがあったなら

前のページへ 表紙・目次へ 次のページへ

 Version 2.8
もしももしもがあったなら

while の仲間は全部で6つくらいあるんだけど、今回はそのひとつを紹介
します。その名は if 
いふ、訳すと〈もしも〉、うわタイトルそのまんま!
そ。まず使ってみようか

void CCalcDlg::OnBEqual() 
{
    if( 1 )
    {
        TRACE( "いちです\n" );
    }
    else
    {
        TRACE( "それいがいです\n" );
    }
}

あ、while に似てるね。でもその次の else ってよく分かんない
とりあえず試してみれば?
はーい。ビルドして実行、と。あれ?

いちです

だって。次の表示されないね
じゃ、今度はこれ試してみて

void CCalcDlg::OnBEqual() 
{
    if( 0 )
    {
        TRACE( "ぜろです\n" );
    }
    else
    {
        TRACE( "それいがいです\n" );
    }
}

ビルドして実行。あ、今度は

それいがいです

だって。ってことはやっぱ、 while みたいに〈ゼロかそれ以外か〉って
こと?
そういうこと。まず if は、ゼロ以外だとすぐ下の中カッコの中を実行し
ます。実行したあとは、その下の else とそれにくっついた中カッコを飛び
越します
だから最初の例だと〈それいがいです〉が表示されないんだ
そういうこと。無視されちゃうんだよね。で if がゼロだと、if にくっ
ついた中カッコを飛び越して、次の else に行きます
だからふたつめの例は〈ぜろです〉がでなかったと。で、 else って?
else は〈そのほか〉って意味で、 else に出遭あっちゃったら必ず中
カッコの中を実行します
〈えるす〉って、サムエルのエル?
うんまあ、そうだけど……ま、そんなわけで〈それいがいです〉が表示さ
れるわけだね
〈出遭う〉って、いまいちよく分かんないかなー
実は、こんなふうにさらに if を足せるんだよ

void CCalcDlg::OnBEqual() 
{
    if( 0 )
    {
        TRACE( "ぜろです\n" );
    }
    else if( 1 )
    {
        TRACE( "いちです\n" );
    }
    else
    {
        TRACE( "それいがいです\n" );
    }
}

 else if がそう?
そう。とりあえず
ビルドしてじっこー

いちです

ん? なんか予想と違うかも……
じゃ、解説。まず最初の if はゼロ
だから最初の中カッコは無視ね
で、次の else if は1
だから実行。そしたらあとは無視、なんだっけ
そう。ひとつでも中カッコを実行したら残りの else if と else は無視
されます。これ試してみれば分かるかな?

void CCalcDlg::OnBEqual() 
{
    if( 1 )
    {
        TRACE( "いちです(1)\n" );
    }
    else if( 1 )
    {
        TRACE( "いちです(2)\n" );
    }
    else
    {
        TRACE( "それいがいです\n" );
    }
}

ビルドして実行、と

いちです(1)

あ、つまり中カッコの中をひとつでも実行しちゃったら、そのあとの else 
if( 1 ) も無視されちゃうわけねー
そういうことだね
質問!
はい、火美ちゃん
 if と else if ってどう違うの?
 if のあとに if を加えるときには、この else if を使わなきゃダメ、
ってこと
なんで?
これ試してみれば?

void CCalcDlg::OnBEqual() 
{
    if( 1 )
    {
        TRACE( "いちです(1)\n" );
    }
    if( 1 )
    {
        TRACE( "いちです(2)\n" );
    }
    else
    {
        TRACE( "それいがいです\n" );
    }
}

びるじー

いちです(1)
いちです(2)

あ、両方実行されちゃった
つまり、 if は〈if と else if と else のグループがここから始まりま
すよ〉っていうことを言ってるわけ
if から始まる、ってことなのね。もひとつ質問! こーゆーのって、こ
う書いてもいいんだよね

void CCalcDlg::OnBEqual() 
{
    if( 1 )
        TRACE( "いちです(1)\n" );
    else if( 1 )
        TRACE( "いちです(2)\n" );
    else
        TRACE( "それいがいです\n" );
}

そうだよ。前回言ったのだよね
水希ちゃんがそうしない理由は?
そうだねー、たとえば、 else だけ2行に増えたりして……

void CCalcDlg::OnBEqual() 
{
    if( 1 )
        TRACE( "いちです\n" );
    else
    {
        TRACE( "それいがいです\n" );
        TRACE( "たぶん\n" );
    }
}

みたいなのはちょっと汚いかな、と
汚いって、それが基準なの?
えっと……あと、行間が空いてないと分かりにくいっていうか……
他には?
あと、インデントし忘れると分かりにくいとか
でも if の次とか分かるんだからいいんじゃない?
う”
なによ、この前はあんな威張り腐ったこと言ってたのにさー、プロのプロ
グラマーって言ってもこんなもんよね
あう〜、いじめられてる〜
こんなときじゃないといじめらんないもん
で、火美ちゃんはどう思う?
げ! え、えっと……
ま、どっちでもあんま変わんないってことだね
なによそれー、そんなテキトーでいーの?
ものによるってこと。〈安全度を高めること〉の中にも、絶対しなきゃダ
メなものから、ま、どうでもいいや、ってレベルのものまであるってこと
で、これはどーでもいーレベル、ってことね
ってゆーか、見やすさって人それぞれだから、自分にとって一番分かりや
すい方法を取るのがいいってことだね
でも人に見せることだってあるんでしょ?
ある程度の人なら、自分の見やすい体裁に書き換えるプログラムくらい、
簡単に作れるから
あ、プログラムってそういうこともできるんだ
もちろん。でも前回の〈1行に詰め込む〉っていうのは慣れててもミスす
ることあるから
これは少し危険度が高いってことなのねー
もうひとつこういうの紹介しておこうか

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    TRACE( "%d\n", iBox );
}

は、

void CCalcDlg::OnBEqual() 
{
    int iBox = 100;
    TRACE( "%d\n", iBox );
}

でも同じだったりします
つまり、変数を作って、そこに数字を入れてるってことね
そういうこと。でもホントはちょっとちがうんだけどね
なにが?
ま、それはもすこし先に見ればいいや。とりあえず今は同じって考えてお
いて
は〜い。でさ、これってどのくらいの危険度?
これは、一緒にした方が安全度高いんじゃないかな
なんで?
なぜだと思う?
うーん……前(Ver 2.3)に〈使う前には必ずなんか数字を入れとかなきゃ
いけない〉って言ってたでしょ。こんなふうに一緒に書いておけば、数字入
れとくの忘れたりしないとか
うん、そういうことだね。作ったばかりの変数にはテキトーな数字が入っ
てるから、それをクリアするの忘れないためにね。結構分かってきたじゃな

そう? アリガト!
ちなみに僕は、こういう書き方が好きかな

void CCalcDlg::OnBEqual() 
{
    int iBox
         = 100;
    TRACE( "%d\n", iBox );
}

なんか変。なんで?
いろんな値試すときに便利だから

void CCalcDlg::OnBEqual() 
{
    int iBox
//       = 100;
         = 200;
//       = 300;

    TRACE( "%d\n", iBox );
}

あ、なるほど
あと書き忘れたけど、 if のチェックには変数や演算子が使えるから
while と同じってことね
そういうこと

/*
    Preview Next Story!
*/
while に if 、次は?
次はいっぺんに3つ!
げげ! いきなりそんな憶えきれないよ〜
大丈夫だよ、似てるのばっかだから
というわけで次回
< Version 2.9 縦横無尽! >
につづく!!
でも忘れちゃいそ
そのときは読み返せばいいんだから
というわけで最近読み始めた人はバックナンバーを見てね!
そーいえば火美ちゃん、記憶は?
思い出すの忘れてた
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。