【マイクロビット入門】(7)関数ってなんだろう?

マイクロビット

 今回のお題は「関数」だ。

 か、関数・・ですか?難しすぎて、トマトスープになってしまいそう・・・

 トマトスープの缶スープで、関数~プ! なんつって。

 ドッカーン!!

カッコのついたやつが関数です。

 その名を聞いただけで拒絶したくなりそうな「関数」ですが、とっても便利な機能なのだ。

 そうなんですか?僕にも分かるようになりますか?

 もちろんだ!まずは恒例のサンプルプログラムを見てみるとしよう。

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目
  • 5行目 while True:
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)

 6行目、7行目、8行目に注目してほしい。カッコのついた命令文が並んでいるのは、分かるかい?

 カッコの中身が表示されたりするんですよね。

 なかなかやるね、赤トマト君。その通りだ。

 例えば6行目の「display.scroll(‘Hello,World!’」について考えてみよう。

 「Hello,World!」が流れるように表示されるのでしたね。

 マイクロビットの25個のLEDに文字が流れるように表示させる、というのは、結構いろいろなことをしないといけない、と思わないか?

 と、言いますと?

 まず最初にLEDを全部消灯させて、次に「H」の左端の部分をLEDの右端の1列に表示させて、次に全部消灯させて、「H」を1列ずらして表示させて、全部消して、「H」を1列ずらして表示させて・・・・ということを繰り返して、「!」がLEDの左端の列から消えるまで繰り返さないといけない、ということだ。

 なるほど。これは大変なことになりそうですね。

 実際、これをプログラムで作ろうとすると、結構な量の命令文を書き連ねないといけなくなるのだ。これを1つの命令文でできるようにしてしまうのが、関数なのだよ。

 たくさんの命令文が1つにまとまってしまう、ということなのですか?

 その通り!たくさんの命令文を一つの命令文でまとめてしまうのが関数なのだ。別のところに書かれているたくさんの命令文を、命令文1つ書いただけで、全部書いたことにできるのだ。

 確かに便利ですね!

カッコの中身を変えられるよ。

 ところで、以前「display.scroll(‘Hello,World!’」のカッコの中に書かれていることを変えると、LEDの表示が変わりましたね。

 そうだね。関数のカッコの中に書かれているもののことを引数という。

 引数を変えると、関数の動きが影響を受けるみたいですね。

 その通り。「display.scroll」や「display.show」の場合は表示される内容が変わるし、「Sleep」の場合は休憩する秒数が変わる、という訳だ。

 なるほど、そういうことなんだ。

 関数の種類によっては、引数を2個、3個と、複数指定できる場合もある。この場合は「,」で区切るのだ。

 じゃぁ、「display.scroll(‘Hello,World!’」は、引数の中に「,」が1つあるので、2つの引数ということでしょうか?

 残念ながらノーだ。「’Hello,World!’」というのは、「’」で囲まれているだろう。

 そうですね。最初と最後に「’」が付いてますね。

 「’」で囲まれた部分は1つの塊とみなされるのだ。そのため、「’Hello,World!’」の「,」も「Hello,World」の一部となってしまい、引数を区切るための「,」とはみなされないのだ。

 じゃぁ、この場合は引数は1つ、ということで良いのですね。

 イェス!ちなみに「’」は、シングルクオーテーションと呼ばれている。「”」はダブルクオーテーションだ。ついでに覚えておいてくれたまえ。

関数はグループ分けされているよ。

 ところで青木鳥隊長、「display.scroll」や「display.show」は「.」で区切られているのに、「sleep」には「.」が付いていませんが?

 この「.」は、似たような機能を持つ関数を1つのグループにまとめるのに使われている。

 では、「scroll」と「show」は、「display」というグループにまとめられている、ということですか?

 そういうことだ。ちなみにこの時のグループをモジュールという名前で呼ぶ。

 では、「scroll」や「show」は、「display」というモジュールにまとめられている、ということですか?

 そういうことになる。別の言い方をすると、「scroll」や「show」は「displayモジュール」に所属している、ということになるのだ。

 他にもモジュールはあるのですか?

 ボタン操作を扱う「button」モジュールや、無線通信を扱う「radio」などがある。詳しくは、次回以降で、使いながら説明しよう。

 いろいろなモジュールがあるのですね。

 それだけマイクロビットの機能が豊富ということなのだ。そして、これらのモジュールは、ライブラリーというものにまとめられている。

 図書館ですか?

 プログラムを書物に見立てて、図書館すなわちライブラリーとイメージしているのだね。ちなみにマイクロビット用のライブラリーは、「microbit」という名前だ。

 「sleep」はどうでしょうか?

 これは「microbit」というモジュールに属している。

 でも、モジュール名がつけられていないですよ。

 モジュール名とライブラリー名が一緒の場合は省略できるようだな。

関数の中身はどこにあるの?

 「関数」というのは、たくさんの命令文をまとめたものでしたね。

 その通りだ。

 じゃぁ、そのまとめられた命令文はどっかにあるのですか?

 もちろんだ。まとめられた命令文は、いわば関数の中身ということになるね。

 じゃぁ、じゃぁ、その中身はだれが作ったのですか?

 いろいろな場合がある。まず、パイソンを作った人があらかじめ作っておいてくれたものがある。今回のサンプルでは登場していない。

 また、例えばマイクロビットを作った人たちなど、パイソンを使って何かをしようとしている人たちが作ってくれているものもある。「display.scroll」、「display.show」や「sleep」などだ。

 なんと、親切な方がいらっしゃるのですね!

 そして、これらは先ほど説明したライブラリーにまとめられている。

 モジュールの図書館のやつですね。

 あとは、自分で関数を作ることもできる。

 えー、自分で作れちゃうんですか! 

 ィエース!次回は、「関数」を作っちゃうぞ~

 ィヤッホ~ィ!

今回のまとめ

 今回のまとめだよ~。

  1. たくさんの命令文をまとめて関数を作ることができる。
  2. 関数は引数で動きを変えることができる。
  3. 引数は「,」(コンマ)で区切って複数指定する場合がある。
  4. 関数はモジュールに、モジュールはライブラリーにまとめることができる。
  5. 関数を自分で作ることもできる。

つづく

コメント

タイトルとURLをコピーしました