Q1. ☆問題☆
ミッション2で
ev3.move(forSeconds: 3, leftPort: .b, rightPort: .c, leftPower: 100, rightPower: 100)
という命令を使ったよね。EV3アプリではモーターがつながっているところを「B+C」のように書いていたから、Swiftでも
ev3.move(forSeconds: 3, port: .b+.c, leftPower: 100, rightPower: 100)
のように書くことはできるだろうか。説明としてもっともふさわしいものを次の中から選んでね。
- ○ このように書くことはできない。SwiftにはSwiftの「認められる書き方」があるので、その通りに書かないと動いてくれない。
- ○ このように書くことはできない。ただし、「b+c.」とすれば動く。
- ○ このように書くことができる。
- ○ このように書くことができる。しかし、うまくいかないことも多いので、ワークブックのように書いたほうがよい。
正解
- このように書くことはできない。SwiftにはSwiftの「認められる書き方」があるので、その通りに書かないと動いてくれない。
- このように書くことはできない。ただし、「b+c.」とすれば動く。
- このように書くことができる。
- このように書くことができる。しかし、うまくいかないことも多いので、ワークブックのように書いたほうがよい。
こう考えよう
英語の「if」は日本語だと「もし」という意味だ。では、電話にでるときの「もしもし」は、英語では「if if」なのかな?
ちがうよね。知っている人もいるだろうけれども、電話にでるときには「Hello」(ハロー)という。
日本語には日本語の、英語には英語の言い方があるんだ。
これと同じことが、EV3アプリとSwiftの間でも言える。
EV3アプリにはEV3アプリのやり方が、SwiftにはSwiftのやり方があるんだ。EV3アプリを参考にするのはいいことだし、
「EV3アプリでやっていたことをSwiftでやるにはどうすればいいのか」と考えることは大事だけど、
「EV3アプリがこうだったから、Swiftでも同じようにできないのはおかしい」というのはちがう。
それぞれのちがいを知って、それぞれの「よさ」を感じてほしい。
Q2. ☆問題☆
ev3.move(forSeconds:1, leftPort:.b, rightPort:.c, leftPort:100, rightPower:100)
というプログラムは、「左のモーターはBに、右のモーターはCにつないで、それぞれのモーターを1秒間、100のパワーで動かす」ものだよね。
それでは、次のプログラムはどのような動きをするだろうか。正しいものを選んでね。
ev3.motorOn(forSeconds:1, on:.b, withPower:100)
ev3.motorOn(forSeconds:1, on:.c, withPower:100)
- ○ ev3.moveで作った「左のモーターはBに、右のモーターはCにつないで、それぞれのモーターを1秒間、100のパワーで動かす」と同じ動きをする
- ○ ev3.moveで作った「左のモーターはBに、右のモーターはCにつないで、それぞれのモーターを1秒間、100のパワーで動かす」と似た動きをするが、右側のモーターのほうが、ほんの少しだけ止まるのがおそい
- ○ 左のモーターが1秒間動いて止まり、そのあとに右のモーターが1秒間動いて止まる
- ○ 左のモーターが動き始めて、0.1秒くらいしてから右のモーターが動くため、ふらふらと動く
正解
- ev3.moveで作った「左のモーターはBに、右のモーターはCにつないで、それぞれのモーターを1秒間、100のパワーで動かす」と同じ動きをする
- ev3.moveで作った「左のモーターはBに、右のモーターはCにつないで、それぞれのモーターを1秒間、100のパワーで動かす」と似た動きをするが、右側のモーターのほうが、ほんの少しだけ止まるのがおそい
- 左のモーターが1秒間動いて止まり、そのあとに右のモーターが1秒間動いて止まる
- 左のモーターが動き始めて、0.1秒くらいしてから右のモーターが動くため、ふらふらと動く
こう考えよう
実際に試してみよう。
プログラムは上から順番に実行されるから、「左のモーターが1秒間動いて止まり、そのあとに右のモーターが1秒間動いて止まる」が正解。EV3アプリでプログラミングブロックをおくことを考えるとイメージしやすいかな。
Q3. ☆問題☆
次のプログラムのデバッグをしよう。まちがっているところはどこかな。すべて選んでね。
repeat{
ev3.move(forSecond:1, leftPort:.b, rightport:c, leftPower:50, rightPower:50)
ev3.playSound(file: .blip, atVolume: 40, withStyle: .waitForCompletion )
} while true
- □ forSecondではなくforSeconds
- □ leftPort:.bではなく、LeftPort:b
- □ rightport:cではなく、rightPort:.c
- □ file:.blipではなく、file://blip
- □ while trueの前の } はいらない
正解
- forSecondではなくforSeconds
- leftPort:.bではなく、LeftPort:b
- rightport:cではなく、rightPort:.c
- file:.blipではなく、file://blip
- while trueの前の } はいらない
こう考えよう
これも実際に試してみるとわかるよね。
forSecondではなくforSeconds → 正しい!
leftPort:.bではなく、LeftPort:b → さいしょの l は小文字なのでまちがい。さらに、bの前に「 . 」もない。
rightport:cではなく、rightPort:.c → 正しい!
file:.blipではなく、file://blip → このような書き方はしないので、まちがい。
while trueの前の } はいらない → 必要。
プログラミングするときには、一文字まちがえただけでもプログラムは動かない。正しく入力できているかをたしかめるクセをみにつけよう。