【発展編】24-a 2年間のまとめ(1)

Q1. ☆問題☆

ミッション1でIdoが改造したプログラムでは、「oto」という変数は「Note」という型だったよね。
このことについて、Idoが次のように説明してくれたよ。( )の中に入るものの組み合わせで、もっともふさわしいと考えられるものを選んでね。

================================================================================
Swift Playgroundsでは、命令を入力していると画面のキーボードの上(外付けキーボードを使っているときには画面の一番下)に、「あなたが入力したいものはこれですか?」というヒントが出てくるんだ。
例えば、「ev3.play」まで入力すると

playSound(file: SoundFile, atVolume: Float, withStyle: SoundStyle) playSound(note: Note, forSeconds: Float, atVolume: Float)

などと出てくるぞ。

atVolume: や forSeconds: のあとには( 1 )と書いてある。ev3.playSound を使うとき、atVolume: や forSeconds: のあとには数字(小数でもOK)を書くよな。
つまり、ヒントの Note: や atVolume: などのあとに書いてあるものは、ここにあてはまる( 2 )なんだ。
note: のあとには( 3 )と書いてあるから、note: のあとに書く.g4とか.f6という「音」は Note という型なのだ、とわかる。

  • ( 1 )…SoundFile  ( 2 )…姿  ( 3 )…Float
  • ( 1 )…Note     ( 2 )…姿  ( 3 )…Note
  • ( 1 )…Float     ( 2 )…姿  ( 3 )…SoundFile
  • ( 1 )…SoundFile  ( 2 )…型  ( 3 )…Note
  • ( 1 )…Note     ( 2 )…型  ( 3 )…Float
  • ( 1 )…Float     ( 2 )…型  ( 3 )…Note

正解

  • ( 1 )…SoundFile  ( 2 )…姿  ( 3 )…Float
  • ( 1 )…Note     ( 2 )…姿  ( 3 )…Note
  • ( 1 )…Float     ( 2 )…姿  ( 3 )…SoundFile
  • ( 1 )…SoundFile  ( 2 )…型  ( 3 )…Note
  • ( 1 )…Note     ( 2 )…型  ( 3 )…Float
  • ( 1 )…Float     ( 2 )…型  ( 3 )…Note

解説

言葉をきちんと覚えていたかな。「変数」に何が入るのかを示すのは、変数の「型」だったよね。
だから、( 2 )が「姿」となっているものはすべてちがう。

あとは、書いてあるものをよめば、( 1 )はFloatで、( 3 )はNoteだとわかるよね。

ここで気がついた人もいるかもしれない。file: のあとには SoundFile と書いてあり、withStyle: のあとには SoundStyle と書いてある。

「つまり、file: のあとに書く .hello などは SoundFile という型で、withStyle: のあとに書く .waitForCompletion などは SoundStyle という型なの?」

そのとおり!

Q2. ☆問題☆

Swiftでの「コメント」について、正しくないものを次の中から選んでね。

  • コメントになっている部分に命令が書いてあっても、その命令は実行されない
  • // でコメントを書く場合、// は行の先頭にしか書けない
  • 1行だけをコメントにしたければ、行の先頭に // を書けばよい
  • /* と */ ではさまれた部分がコメントになる

正解

  • コメントになっている部分に命令が書いてあっても、その命令は実行されない
  • // でコメントを書く場合、// は行の先頭にしか書けない
  • 1行だけをコメントにしたければ、行の先頭に // を書けばよい
  • /* と */ ではさまれた部分がコメントになる

解説

ワークブックにも書いたとおり、「//」のあと、「/*」と「*/」ではさまれた部分がコメントになるよ。
「//」は行の先頭だけではなく、行のとちゅうに書くこともできる。だから、たとえば

ev3.playSound(note: .g5, forSeconds: 0.1, atVolume: 100) // ソの音を0.1秒ならす

というような書き方ができる。この例は、プログラムのちょっとした説明のためにコメントを使っているね。

Q3. ☆問題☆

ミッション3で作った「ジャイロセンサーの値でボリュームを変える」プログラムを見て、ナナは、「EV3アプリでやるのは、ちょっと大変だなあ」と言っていたね。
EV3アプリで同じことをしようと思ったら、どのようなプログラムにすればよいかな。次のプログラムの方針(ほうしん)として、正しくないものを1つ選んでね。

1.スイッチブロックを使い、例えば「ジャイロの値が0より小さいときには音を出さない、10より小さいときにはボリューム10で音を出す」というようなプログラムを作る。
2.スイッチブロックの、すべての条件のところにサウンドブロックをおかなければならない。
3.センサーの値で出す音とボリュームを変えようとすると、Swiftならばotoという変数とvolという変数を使えばいいが、EV3アプリではスイッチブロックを組み合わせて作るしかない。
4.具体的には、例えばミッション1で作ったプログラムのように超音波センサーの値で出す音を決る。ミッション1でサウンドブロックだった部分を、1.と2.の方針のように、スイッチブロックとサウンドブロックを使ってボリュームを変えられるようにする。
5.ただし、4.で作った部分の前に「タッチセンサーがおされたときだけ音を出す」ような待機ブロックを入れることで、ボリュームを自由に変えられるため、サウンドブロックの数はかなりへらすことができる。

正解

解説

EV3アプリを使う以上、1.から4.の方針でプログラムを作るしかない。さいごの5.だけ、正しくない。
たとえ待機ブロックを入れても、ボリュームは変わらないよね。

EV3アプリではやりにくいことでも、Swift Playgroudns ならばやりやすいということがあるよ。
ぎゃくに、Swift Playgrounds ではたくさん書かなければならないから大変だけど、EV3アプリではかんたんにできるプログラムもあるね。
「どちらがいい」ということではなく、やりやすい方でプログラムを作るといいよ。

そのためには、それぞれの「よさ」を知る必要があるね。