Sponsored Link
 
>>  Main > Programing > Primary > 0005

D言語入門 第05章 - 分岐

#01 - if文

今回は…

前回の入力を踏まえて、入力されたものによって違う挙動をさせてみたいと思います。
プログラムを分岐させるには、条件が必要です。
たとえば、「入力したものが"0"であったら」このコードを実行する、というような条件です。

D言語には、このような条件を満たすか満たさないかに関する「型」が存在します。
bool 型です。
bool 型は2つの値しかありません。 true と false です。

このbool型の値を用いて、条件式を書きます。
// hoge が 10 未満だった場合 a は true で、それ以外は false
bool a = hoge < 10;
// hoge が 10 だった場合 b は true で、それ以外は false
bool b = hoge == 10;
// hoge が 10 より大きい場合 c は true で、それ以外は false
bool c = hoge > 10;
条件式は、 hoge < 10 や hoge == 10 、 hoge > 10 というように書かれます。
注意なのは、「等しい」という意味の条件式は = ではなく、 == です。
D言語では、 = は「代入」という意味があります。

この条件式を使って、分岐のための文を書きます。
D言語の分岐のための命令文は、if文があります。
if(hoge < 10){
    // hoge が 10 未満だった場合にのみ、ここに書かれた命令文が実行される。
}

今回のミソ

  • 真偽の型は、 bool
  • bool には truefalse しかない。
  • 条件式では、 < や == 、 > などの記号が使える
  • 分岐はif文を使う。

サンプルコード

// おまじない。
import std.stdio;
import std.conv;
import std.string;

// おまじない
int main(char[][] args)
{
    // 入力を求める旨の内容を書き出す。
    writef("input : ");
    
    // 文字列の入力、改行文字、数値に変換して、
    // 整数型の変数 hoge に代入する。
    // こんな風にして使うこともできます。
    // イメージ的には数学の合成関数ですね。
    int hoge = toInt( chomp( readln() ) );
    
    // if 文で、入力が 10 未満だったときにのみメッセージを表示する
    if (hoge < 10)
    {
        // メッセージを表示する
        writefln("入力は 10 未満");
    }
    
    // おまじない
    return 0;
}

実行結果

input : 50


input : 5
入力は 10 未満

まとめ

今回はif文による分岐でした。
ちなみに、 < や == 、 > 意外にも多くの条件式があります。
特によく使うもの(というかこれ以外を使うことは非常にまれ)としては、
hoge == fuga … hoge は fuga と等しい
hoge < fuga … hoge は fuga より小さい
hoge > fuga … hoge は fuga より大きい
hoge <= fuga … hoge は fuga 以下
hoge >= fuga … hoge は fuga 以上
hoge != fuga … hoge は fuga と等しくない
hoge is fuga … hoge は fuga と同一である
hoge !is fuga … hoge は fuga と同一でない
ですかね。
is や !is は文字列や整数では使わないません。

整数で使えるものは、
hoge == fuga … hoge は fuga と等しい
hoge < fuga … hoge は fuga より小さい
hoge > fuga … hoge は fuga より大きい
hoge <= fuga … hoge は fuga 以下
hoge >= fuga … hoge は fuga 以上
hoge != fuga … hoge は fuga と等しくない

実数で使えるものは、
( hoge == fuga … hoge は fuga と等しい )
( hoge != fuga … hoge は fuga と等しくない )
hoge < fuga … hoge は fuga より小さい
hoge > fuga … hoge は fuga より大きい
※ == と != はあまり使わないほうがいいです。たまに思っていたことと違うことが起こりますので。(何でそうなるかは考えてみるといいです。ヒント:誤差)

文字列で使えるものは
hoge == fuga … hoge は fuga と等しい
hoge != fuga … hoge は fuga と等しくない
( hoge is fuga … hoge は fuga と同一である )
( hoge !is fuga … hoge は fuga と同一でない )

次は、if文で分岐したとき「以外」の場合の処理の仕方です。
お次へどうぞ~

#02 - else文

今回は…

前回の if文で条件を満たさなかった場合にのみ実行したいコードがあったとします。
たとえば、10未満で「10未満です」と表示して、それ以外では「10以上です」と表示する場合を考えてください。
このような場合は、else文を書くと簡単に実現できます。
if(hoge &lt; 10)
{
    writefln("10未満です");
}
else
{
    writefln("10以上です");
}

今回のミソ

  • if文で捕らえられなかった「それ以外」の場合は、else文を使う

サンプルコード

// おまじない。
import std.stdio;
import std.conv;
import std.string;

// おまじない
int main(char[][] args)
{
    // 入力を求める旨の内容を書き出す。
    writef("input : ");
    
    // 変数 hoge に、数値を入力
    int hoge = toInt( chomp( readln() ) );
    
    // if 文で、入力が 10 未満だったときにのみメッセージを表示する
    if(hoge < 10)
    {
        // メッセージを表示する
        writefln("入力は 10 未満");
    }
    else
    {
        // メッセージを表示する
        writefln("入力は 10 以上");
    }
    
    // おまじない
    return 0;
}

実行結果

input : 50
入力は 10 以上


input : 5
入力は 10 未満

まとめ

今回は、if文で捕らえられなかった場合の処理方法、else文をやりました。
これで、プログラムを2つに分岐させることができるようになりました。
if文だけでは、「実行する」「実行しない」の2択でしたが、else文を使うことによって「実行する」「実行しない場合にほかの事をする」「何もしない」の3択になりました。
余談ですが、私の大学では単位制と名乗っておきながら、ある授業を「履修する」「履修しない」という2択しかなかったので、「ほかの授業を履修する」というelse if的な選択肢がほしかったです…
次回は、さらにたくさんの処理に分岐させたい場合の文法をやります。
お次へどうぞ~

#03 - else+if

今回は…

前回までのif文やelse文を使用することによって「実行する場合」「実行しない代わりにほかの事を実行する」「何もしない」の3つに分岐できるようになりましたが、それ以上に「この場合Aを実行する場合」「この場合Bを実行する」「この場合Cを実行する」…「何もしない」というように、たくさん分岐させたい場合はどのようにしたらよいかを考えます。
とりあえず前回までのもので頑張って書いてみるとすると、

if (hoge == 1)
{
    writefln("hoge == 1");
}
else
{
    if (hoge == 2)
    {
        writefln("hoge == 2");
    }
    else
    {
        if (hoge == 3)
        {
            writefln("hoge == 3");
        }
        else
        {
            /+ ...以下略... +/
        }
    }
}

というように非常に長ったらしいものになってしまいます。
そこで、 if と else を同時に使うというようなことをします。
下のように書くとスマートですね。

if (hoge == 1)
{
    writefln("hoge == 1");
}
else if (hoge == 2)
{
    writefln("hoge == 2");
}
else if (hoge == 3)
{
    writefln("hoge == 3");
}
/+ ...以下略... +/

今回のミソ

  • たくさん分岐させたい場合は else if を使う

サンプルコード

// おまじない。
import std.stdio;
import std.conv;
import std.string;

// おまじない
int main(char[][] args)
{
    // 入力を求める旨の内容を書き出す。
    writef("input : ");
    
    // 変数 hoge に、数値を入力
    int hoge = toInt( chomp( readln() ) );
    
    //if文 elseif文else文それぞれを使って処理を分岐させる
    if (hoge == 0)
    {
        // 入力が0のときのメッセージ
        writefln("hoge == 0");
    }
    else if (hoge == 1)
    {
        // 入力が1のときのメッセージ
        writefln("hoge == 1");
    }
    else if (hoge == 2)
    {
        // 入力が2のときのメッセージ
        writefln("hoge == 2");
    }
    else if (hoge == 3)
    {
        // 入力が3のときのメッセージ
        writefln("hoge == 3");
    }
    else if (hoge < 10)
    {
        // 入力が上で引っかからず、10未満のときのメッセージ
        writefln("hoge < 10");
    }
    else if (hoge == 10)
    {
        // 入力が10のときのメッセージ
        writefln("hoge == 10");
    }
    else
    {
        // 入力が10より大きいときのメッセージ
        writefln("hoge > 10");
    }
    
    // おまじない
    return 0;
}

実行結果

input : 50
hoge > 10


input : 5
hoge < 10


input : 2
hoge == 2

まとめ

今回でさまざまな分岐を行えるようになりました。
分岐に関してはこれだけ知っておけばプログラムを書く分には問題ありません。
読む分には、swtch文などもありますが…
それはまた別のお話です。

#summary - まとめ

第05章のミソ

  • 真偽の型は、 bool
  • bool には truefalse しかない。
  • 条件式では、 < や == 、 > などの記号が使える
  • 分岐はif文を使う。
  • if文で捕らえられなかった「それ以外」の場合は、else文を使う
  • たくさん分岐させたい場合は else if を使う

宿題

4章のものよりマシな電卓を作りましょう
input number : 10.5
input operator : -
input number : 4.3
10.5 - 4.3 = 6.2

input number : 4.6
input operator : /
input number : 2.3
4.6 / 2.3 = 2

input number : 5.6
input operator : /
input number : 0
0 で割ってはいけない

コメント

さてさて、できましたかな~?
今回の宿題はかなり難しいかも。
と、いうことで、分岐がわかったら、次は繰り返しです。
分岐と繰り返しがプログラミングの基本のもっとも重要なところだと思います。
というわけで、次の章は繰り返しです。
そんなわけで、宿題できたら、あるいは予想ついたら次にいきましょう~

ページトップ / 目次 / 次へ
Copyright©SHOO All rights reserved. / LastModified : 2007/12/12(水)[06:07:57]