「条件分岐文」の編集履歴(バックアップ)一覧はこちら
条件分岐文 - (2013/09/22 (日) 20:38:16) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
>条件分岐文を使用することで、変数に格納されている値や関数の戻り値などに応じて実行する命令を制御することが出来るようになります。&br()(一応定数も条件式に組み込めますが、それでは分岐できないのでかなり特殊な例ですね)
----
#contents(fromhere=true)
----
*条件分岐概要
>例えば、ここに250gりんごが1つあるとしましょう。このりんごを家族で分けるとして、均等にn分割します。&br()この時、素直に考えれば自分は「250(g) / n(人)」の量のりんごを食べることが出来ますよね。わからない人は算数からやり直せ。&br()さて、今話したことをKuinで記述すると以下のようになります。
#highlight(linenumber){{func Main()
var Apple : float :: 250.0
var Human : int :: ○○ {○○にあなたの家族の人数を入れてください}
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けました。")
do Dbg@Log("あなたは、そのうちの1切れ(" ~ (Apple / (Human$float)).ToStr() ~ "g)を食べました")
end func}}
>しかし、5人家族ぐらいまでならこれで良いのですが、さすがに10人家族でりんご1つを分けるのはひもじすぎます。&br()そこで6人以上の家族には、見かねたくいなちゃんが回らない寿司をおごってくれるとしましょう。流石くいなちゃん!人のお金で食べるオスシィは美味い!!!&br()さて、今話したことを日本語で記述すると以下のようになります(※まだ日本語なので予期したとおりには動きません)
#highlight(linenumber){{func Main()
var Apple : float :: 250.0
var Human : int :: ○○ {○○にあなたの家族の人数を入れてください}
{もし、Humanの数が5以下だったら}
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けました。")
do Dbg@Log("あなたは、そのうちの1切れ(" ~ (Apple / (Human$float)).ToStr() ~ "g)を食べました")
{それ以外だったら}
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けようとしました。")
do Dbg@Log("見かねたくいなちゃんがあなた達にお寿司をおごってくれました。りんごはスタッフがおいしくいただきました。")
end func}}
>6人以上の家族にはくいなちゃんがお寿司をおごってくれるようになりました。そして重要なのは&bold(){寿司を食べたのでりんごは食べてません。&br()}つまり、人数に応じて「りんごor寿司」を選択するようになったのです。&bold(){二者択一です。}&br()このように、ある特定の条件(今回は「人数が5人以下かそうでないか」)を満たすかどうかで、実行する命令(今回はDbg@Logで表示する内容である「りんごと寿司のどっちを食べたかの出力」)を変える事ができる構文を&color(blue){条件分岐文}と言います。&br()因みに、先ほどの例を、条件分岐文の一つである[[if文>#if文]]で記述すると、以下のようになります。
#highlight(linenumber){{func Main()
var Apple : float :: 250.0
var Human : int :: ○○ {○○にあなたの家族の人数を入れてください}
if(Human <= 5)
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けました。")
do Dbg@Log("あなたは、そのうちの1切れ(" ~ (Apple / (Human$float)).ToStr() ~ "g)を食べました")
else
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けようとしました。")
do Dbg@Log("見かねたくいなちゃんがあなた達にお寿司をおごってくれました。りんごはスタッフがおいしくいただきました。")
end if
end func}}
>どうでしょうか、日本語で記述した時に似ている形になったのではないでしょうか。&br()ifとは、日本語で「もし~ならば」と訳し、if以降の()の中で、(Human <= 5)と書いてあるので、「もし、Humanが5以下ならば」と脳内で思ってくれれば結構です。&br()elseは「そうでなければ」と脳内で訳してください。つまり、「もし、Humanが5以下でなければ」と解釈します。&br()終了時にはend ifで「if文を終了します」という意味になります。&br()・・・お分かりいただけただろうか? ざっくりお分かりいただけたならば、以下では、上記に使用したif文を含め、3種類の条件分岐について説明していこうと思います~
*&aname(if文)if文
**&aname(if文説明)説明
>一番オーソドックスな条件分岐文です。if文さえマスターしてしまえば、(理論上)どんな条件分岐にも対応することが出来るようになります。[要出典]&br()プログラミングを始めたばかりの人は、まずはif文をマスターしましょう。&br()しばらく使っていると、if文の不便なところにも気づくと思います。不便だな、感じる場所に遭遇したらswitch文や条件演算を利用するようにすると、より良いコーディングになるかと思います。
**&aname(if文記述方法)記述方法
#highlight(linenumber){{func Main()
if( {条件式1(bool型)} ) {ifは、「もし 条件式1 ならば~」と思ってください}
{条件式1のboolの値がTrueの時に実行される行}
{...(ここにプログラムを入れてください)}
{条件式1のboolの値がTrueの時に実行される行ここまで}
elif( {条件式2(bool型)} ) {elifは、「そうでなくてもし 条件式2 ならば~」と思ってください}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がTrueの時に実行される行}
{...(ここにプログラムを入れてください)}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がTrueの時に実行される行ここまで}
else {elseは、「今までの条件を満たさなければ~」と思ってください}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がFalseの時に実行される行}
{...(ここにプログラムを入れてください)}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がFalseの時に実行される行ここまで}
end if
end func}}
**&aname(if文特徴備考)特徴・備考
-elif及びelse節は省略することも可能
-ものすごく汎用性が高い
-汎用性の高さ故に、使い過ぎるとプログラムが追いにくくなることも
**&aname(if文向き不向き)向き不向き
----
*&aname(switch文)switch文
----
*&aname(条件演算)条件演算
>条件分岐文を使用することで、変数に格納されている値や関数の戻り値などに応じて実行する命令を制御することが出来るようになります。&br()(一応定数も条件式に組み込めますが、それでは分岐できないのでかなり特殊な例ですね)
----
#contents(fromhere=true)
----
*条件分岐概要
>例えば、ここに250gりんごが1つあるとしましょう。このりんごを家族で分けるとして、均等にn分割します。&br()この時、素直に考えれば自分は「250(g) / n(人)」の量のりんごを食べることが出来ますよね。わからない人は算数からやり直せ。&br()さて、今話したことをKuinで記述すると以下のようになります。
#highlight(linenumber){{func Main()
var Apple : float :: 250.0
var Human : int :: ○○ {○○にあなたの家族の人数を入れてください}
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けました。")
do Dbg@Log("あなたは、そのうちの1切れ(" ~ (Apple / (Human$float)).ToStr() ~ "g)を食べました")
end func}}
>しかし、5人家族ぐらいまでならこれで良いのですが、さすがに10人家族でりんご1つを分けるのはひもじすぎます。&br()そこで6人以上の家族には、見かねたくいなちゃんが回らない寿司をおごってくれるとしましょう。流石くいなちゃん!人のお金で食べるオスシィは美味い!!!&br()さて、今話したことを日本語で記述すると以下のようになります(※まだ日本語なので予期したとおりには動きません)
#highlight(linenumber){{func Main()
var Apple : float :: 250.0
var Human : int :: ○○ {○○にあなたの家族の人数を入れてください}
{もし、Humanの数が5以下だったら}
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けました。")
do Dbg@Log("あなたは、そのうちの1切れ(" ~ (Apple / (Human$float)).ToStr() ~ "g)を食べました")
{それ以外だったら}
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けようとしました。")
do Dbg@Log("見かねたくいなちゃんがあなた達にお寿司をおごってくれました。りんごはスタッフがおいしくいただきました。")
end func}}
>6人以上の家族にはくいなちゃんがお寿司をおごってくれるようになりました。そして重要なのは&bold(){寿司を食べたのでりんごは食べてません。&br()}つまり、人数に応じて「りんごor寿司」を選択するようになったのです。&bold(){二者択一です。}&br()このように、ある特定の条件(今回は「人数が5人以下かそうでないか」)を満たすかどうかで、実行する命令(今回はDbg@Logで表示する内容である「りんごと寿司のどっちを食べたかの出力」)を変える事ができる構文を&color(blue){条件分岐文}と言います。&br()因みに、先ほどの例を、条件分岐文の一つである[[if文>#if文]]で記述すると、以下のようになります。
#highlight(linenumber){{func Main()
var Apple : float :: 250.0
var Human : int :: ○○ {○○にあなたの家族の人数を入れてください}
if(Human <= 5)
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けました。")
do Dbg@Log("あなたは、そのうちの1切れ(" ~ (Apple / (Human$float)).ToStr() ~ "g)を食べました")
else
do Dbg@Log("あなたは、りんご(" ~ Apple.ToStr() ~ "g)を" ~ Human.ToStr() ~ "人で分けようとしました。")
do Dbg@Log("見かねたくいなちゃんがあなた達にお寿司をおごってくれました。りんごはスタッフがおいしくいただきました。")
end if
end func}}
>どうでしょうか、日本語で記述した時に似ている形になったのではないでしょうか。&br()ifとは、日本語で「もし~ならば」と訳し、if以降の()の中で、(Human <= 5)と書いてあるので、「もし、Humanが5以下ならば」と脳内で思ってくれれば結構です。&br()elseは「そうでなければ」と脳内で訳してください。つまり、「もし、Humanが5以下でなければ」と解釈します。&br()終了時にはend ifで「if文を終了します」という意味になります。&br()・・・お分かりいただけただろうか? ざっくりお分かりいただけたならば、以下では、上記に使用したif文を含め、3種類の条件分岐について説明していこうと思います~
*&aname(if文)if文
**&aname(if文説明)説明
>一番オーソドックスな条件分岐文です。if文さえマスターしてしまえば、(理論上)どんな条件分岐にも対応することが出来るようになります。[要出典]&br()プログラミングを始めたばかりの人は、まずはif文をマスターしましょう。&br()しばらく使っていると、if文の不便なところにも気づくと思います。不便だな、感じる場所に遭遇したらswitch文や条件演算を利用するようにすると、より良いコーディングになるかと思います。
**&aname(if文記述方法)記述方法
#highlight(linenumber){{func Main()
if( {条件式1(bool型)} ) {ifは、「もし 条件式1 ならば~」と思ってください}
{条件式1のboolの値がTrueの時に実行される行}
{...(ここにプログラムを入れてください)}
{条件式1のboolの値がTrueの時に実行される行ここまで}
elif( {条件式2(bool型)} ) {elifは、「そうでなくてもし 条件式2 ならば~」と思ってください}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がTrueの時に実行される行}
{...(ここにプログラムを入れてください)}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がTrueの時に実行される行ここまで}
else {elseは、「今までの条件を満たさなければ~」と思ってください}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がFalseの時に実行される行}
{...(ここにプログラムを入れてください)}
{条件式1のboolの値がFalseで、かつ条件式2のboolの値がFalseの時に実行される行ここまで}
end if
end func}}
**&aname(if文特徴備考)特徴・備考
-elif及びelse節は省略することも可能
-ものすごく汎用性が高い
-汎用性の高さ故に、使い過ぎるとプログラムが追いにくくなることも
**&aname(if文向き不向き)向き不向き
-一般的な条件分岐用途には問題なく使えます
-似たような分岐で、elifが大量に出来てしまう場合には面倒になることも。その時は後述のswitchを検討してみましょう
----
*&aname(switch文)switch文
----
*&aname(条件演算)条件演算