前章までで練習した「同じ処理を繰り返す」ということはコンピュータの得意分野でした。あらかじめわかっている作業内用をプログラムに落とし込んでおけば、毎回自動でそれをやってくれて我々は楽をすることができます。しかし実際にプログラミングで自動化したい処理の中には「あらかじめわかっている」ことばかりとは限りません。そこで、その作業をしようと思った時の状況に応じて処理を切り替えられる「判断力」をプログラムにもたせることができたら、ということになります。我々も日常的に「雨だったら傘を持っていく」のようにある特定の状況を「条件」とし、行動を変える(分岐する)、ということをします。この「条件」によって処理を「分岐」するのがこの章のテーマです。
使うのはif文で、出題文にある
1 2 3 |
if isOnClosedSwitch { toggleSwitch() } |
は、日本語にすると
1 2 3 |
もし 閉スイッチの上にいる { スイッチを切り替える() } |
という意味になります(ifは「もしも」という意味です)。こう書けばなんとく意味が見えてきませんか?
文法としては、
1 2 3 |
if (判断したい条件) { (判断条件が成立した時にさせたい処理) } |
という形です。func文やfor文と同じく、{}でさせたい処理をサンドします。
ステージの作りは一本道で、途中スイッチが3つ連続で並んでいますが、オン(open)なものとオフ(Closed)なものがあります。まずはなにもしないで「コードを実行」してみてください。なんとそれぞれのスイッチの状態が変化します。toggleSwitchはオンのものはオフに、オフのものはオンにするので、どれとどれがオフかあらかじめわかっていないと、全てをオンにすることができません。
そこで活躍するのが条件分岐をするif文というわけです。「判断したい条件」の書き方は色々あるのですがこのステージでは出題分にあるように単純に「isOnClosedSwitch」としておけばOKです。()はいりません。
ということで、いままで通り3つのスイッチの上でtoggleSwitch()するコードを書き、そのtoggleSwitchをif文で囲む形に変形してみましょう。こうすることで、閉スイッチ上の時だけtoggleSwitch()が実行され、開スイッチなどそれ以外の場合は{}はスキップされるので実行されません。結果として、開スイッチはそのまま、閉スイッチはオンに変更され、全てのスイッチがオンになります。その場その場で判断するので、コードを実行する度に閉スイッチの場所がかわっても柔軟に対応できるのです。
1 2 3 4 5 6 7 8 9 |
moveForward() for i in 1 ... 3 { moveForward() //if文で閉スイッチの上かどうかチェック if isOnClosedSwitch { // {}の中は閉スイッチの上だった場合だけ実行される toggleSwitch() } } |