Part12:条件分岐

海未「今回からは、プログラムを賢くする制御構造を見ていきましょう」
凛「かしこい!」
希「かわいい!」
凛希「エリクサー!」
海未「というわけでサブタイトルはKKEでつけておきました」
凛「曲ネタで探すのは挫折したにゃ」
希「しかし12回目にしてようやく思い付いたのがこれとはね」


絵里「・・・っくしゅん!」
にこ「・・・ちょっと絵里、風邪とかたるんでるわよ」
絵里「んー、知らないところで誰かにネタにされてる感じが・・・」
真姫「非科学的ね。ほら、練習続けるわよ」

♪本編よりサイドストーリー進める癖は直しなさい♪


3人「はい」

凛「・・・といっても、パターンマッチングの時点でもうけっこう賢かった気がするにゃ」
海未「そうですね。これから紹介する構文も、その賢いパターンマッチングを基礎にしたものがほとんどです」

海未「これは変数unitを上から順番にパターンマッチさせて、マッチしたものの->の右側が結果になります」
希「それで”lily white”になるわけやね」
海未「条件によって値を変えたり処理を変えたりするのに使います。他にも種類があるのですが、まずはcaseを覚えましょう」

海未「ここで行われているのは=を使ったパターンマッチングと同じものです。つまり・・・」

海未「変数があれば代入が起こります」
希「これやと、unitの方が右辺に来るんやね」
凛「あれ?最初は真姫ちゃんで、にこりんぱなをマッチさせるとにこちゃんになって、けど最後はまた真姫ちゃんだよ?」
海未「はい。ここでスコープという考え方が出てきます。1行目でxは”maki”になっていますが、4行目にまたxが出てきますね」
凛「にゃ」
海未「4行目のxは、caseのブロックの中でのみ有効な変数xです。ですから、パターンマッチでxが”nico”に変わっても、ブロックを抜けるとxの値は”maki”のままです」
希「ブロック?」
海未「doendで囲われた範囲をブロックと呼びます。簡単に言うと、ブロックの中と外では変数は別のものと見なされる、ということです」
希「じゃあ最初のxと4行目のxは無関係ってこと?」
海未「ブロックの中から外へは影響を与えない、というのが正しいでしょうか。4行目の時点ではxの値は”maki”ですから、無関係というのは少し違いますね」

海未「このように、xにピン演算子を使えば”maki”とマッチさせることができます」
希「ブロックの外で代入された値は生きてるってことやね」

海未「パターンマッチだけでなく、さらに条件を追加して分岐することもできます」

海未「このwhen~はガード節と呼びます。真偽値を返す式を書いて、パターンマッチが成功してガード節がtrueの場合のみその条件が成立します」
希「あー、代入ってこういう使い方するんやね」
海未「ガード節に書ける式は限られていますから、何が使えるかはこちらをチェックです」

case, cond and if

海未「もう少し簡便な構文で、ifunlessがあります。こちらも見ておきましょう」

海未「これを実行すると、”rin”とだけ出力されます」
希「ifはtrueだったら実行されて、unlessはfalseだったら実行される感じ?」
凛「これは分かりやすいにゃ」
海未「もうひとつ、condというのもあります」

海未「結果は”hoshizora”です」
希「caseのパターンマッチングを、真偽値判定に置き換えた、でいいんかな?」
海未「そうですね。最後のtrueはcase_と同じでキャッチオールです」

海未「条件分岐は、caseifunlesscondを使います。caseが一番よく使うと思います」
凛「パターンマッチングをマスターした凛たちには楽勝にゃ!」
希「さて次回はループ・・・といきたいんやけど、その前に関数やね」
凛「おおっ、なんか山場な気がするにゃ!」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です