ロボサイエンスでは、コースによって使うプログラミング言語が違います。はじめて取り組む学年はブロックを並べ、上の学年は Python や C++ を書きます。
見た目はまったく違います。ただ、どの講座でも同じ回を設けています。プログラムは3つの形でできている、という話です。
プログラムは、3つの形でできている
プログラムの流れは、順次・選択・反復の3つに分けられます。
この3つの組み合わせだけで、どんな処理でも書けることが知られています。1966年に数学的に示されたもので、構造化定理と呼ばれます。
言い方を変えると、プログラムを読むときに探すものは3つだけでいいということです。どこが順番に並んでいて、どこで分かれていて、どこがくり返しているか。それが分かれば、そのプログラムの骨組みは分かります。
同じ動きを、3つの書き方で
では、実際に見比べてみます。やらせたいことは、どれも同じにします。
黒が見えたら左に曲がる。そうでなければ両方のモーターを回してまっすぐ進む。それをずっとくり返す。
ライントレース(線をたどる)の、いちばん基本の形です。
① ブロック(LEGO SPIKE)
ロボカップジュニアの入門となる講座では、ブロックを並べてプログラムを作ります。
ここがブロックのおもしろいところで、3つの形が、ブロックの形そのものになっています。コの字に囲まれていれば繰り返し。上下に分かれていれば分かれ道。縦に並んでいれば順番です。
② Python
同じものを Python で書くと、こうなります。
while True: # ← 反復(ずっとくり返す)
if sensor.reflection() < 50: # ← 選択(黒が見えたか)
left.stop() # ┐ 順次
right.start(50) # ┘
else:
left.start(50)
right.start(50)
Python では、字下げ(インデント)が構造を表します。どこからどこまでがくり返しの中なのかを、行の先頭の空白で示します。
③ C++
Raspberry Pi Pico を使う講座では、C++(Arduino 言語)で書きます。
void loop() { // ← 反復(ずっとくり返す)
if (analogRead(A0) < 400) { // ← 選択(黒が見えたか)
motorLeft(0); // ┐ 順次
motorRight(50); // ┘
} else {
motorLeft(50);
motorRight(50);
}
}
C++ では、波かっこ { } で囲んだところがひとまとまりになります。loop() は、電源が入っているあいだ中身をくり返す関数です。
並べてみると
3つとも、同じ形をしています。
いちばん外側に反復があり、その中に選択があり、その中に順次が入っている。囲み方が、コの字か、字下げか、波かっこかの違いだけです。
この見方ができるようになると、ブロックから文字の言語に移るときの段差が小さくなります。新しい記号の読み方を覚える作業であって、考え方を新しく覚え直すわけではないからです。
どの講座でも、同じ話をしている
ロボサイエンスでは、ロボカップジュニアの種目とコースに応じて言語を使い分けています。
| 講座 | 使う言語 |
|---|---|
| レスキューライン エントリー | LEGO SPIKE(ブロック) |
| レスキューメイズ エントリー | LEGO SPIKE(ブロック) |
| レスキューライン ワールド | Python |
| レスキューメイズ ワールド | C++ |
| サッカーライトウェイト ユース | C++ |
| サッカーライトウェイト ワールド | C++ |
使う道具は違いますが、この回だけは、どの講座でも同じ内容を扱います。自分のプログラムを開いて、どこが順次で、どこが選択で、どこが反復かを指でなぞってもらいます。
小学生はブロックを並べ、高校生は C++ を書く。並べているものは、どちらも同じ3つです。
ロボカップジュニア2027 に向けて、レスキュー(災害救助)とサッカーの2種目に取り組みます。プログラミングと電子工作の経験は問いません。