【マイクロビット入門】(8)関数を作ってみよう。

マイクロビット

 前回は、関数を紹介した。今回は、実際に関数を作ってみようと思う。

 前回の予告通り、関数を作るんですね。とにかく、やってみましょう!

まずは、関数を作ってみよう。

 今回もサンプルプログラムから始めよう。

  • 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行目から8行目を関数にしてみるぞ。関数を作るには、まず「def」と書いて、そのあとに関数名、「(」、引数、「)」と続けるのだ。そして、最後を「:」で締める。赤トマト君、やってみるかい?

def [関数名]([引数]):

 分かりました。関数名は「tomato」にしてみます。サンプルプログラムに追加すればよいのですね。

  • 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)
  • 9行目
  • 10行目 def tomato(tane):

 引数は「tane」として、出来ました!これでいいのでしょうか?

 関数の中身がないぞ。

 な、中身?どういうことでしょうか?

 関数が処理する内容のことだ。

 ?????

 では、やってみるぞ。こういうことになるのだ。

  • 5行目 while True:
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 def tomato(tane):
  • 11行目  display.scroll(‘Hello, World!’)
  • 12行目  display.show(Image.HEART)
  • 13行目  sleep(2000)

 6行目から8行目が11行目から13行目にコピーされましたね。これが中身なのですか?

 そういうことだ。ちなみに関数の中身は、ブロックとして記述する必要がある。つまり、インデントしないといけない、ということなのだ。

 インデント?字下げのことですね。これで出来上がりですか?

 実は、もう一つポイントがあるが、それは動かして確認してみよう。

関数を呼び出してみよう。

 作った関数を動かすために、この関数を呼び出す部分を追加してみよう。

 呼び出し?ですか???

 ループの中身を「tomato(0)」とすればよいのだ。

 カッコの中に0と書かれてますが、この0は一体どういうことなのだろう?

 関数「tomato」に「tane」という引数があるので、何か値を入れておく必要があるのだ。実際には関数の中で引数がまだ使われていないので、どんな値でもよい。

 では0でなくてもよいのですか?

 ィエース。後で引数も使ってみるが、ここではひとまず0としておく。

  • 5行目 while True:
  • 6行目  tomato(0)
  • 行目
  • 8行目 def tomato(tane):
  • 9行目  display.scroll(‘Hello, World!’)
  • 10行目  display.show(Image.HEART)
  • 11行目  sleep(2000)

 うーん、分かったような、分からんような。これで完成ですか?

 いや、ここで修正なのだが、関数は呼び出される部分より前に記述されていないといけないのだ。

 ????

 つまり、こうなるのだ。

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目  tomato(0)

 8行目からの関数が5行目の「while True:」の前に移動したのですね。

 では、動かしてみよう。

 マイクロビットをつないで「Flash」すると・・・サンプルプログラムと同じ動きをしていますよ。

 うむ。ループの中身を関数に移しただけなので、同じ動きとなるのだ。

処理の流れを見てみよう。

 いまいち、よく分からないのですが。

 そのようだね。では、このプログラムの処理の流れを確認しよう。今回作成したプログラムは、以下の通りだ。

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

 ところで、マイコン君を覚えているね。

 第3話「サンプルプログラムを見てみよう」以来の登場ですね。電源を入れると起きる人ですね。

 その通り。電源が入る前は、マイコン君は寝ている。

 電源を入れると起きる。ここまではサンプルプログラムと同じだ。

 ふむふむ。で、5行目の関数の部分に来るのですね。

 その通りだ。5行目から8行目には、関数が記述されている。関数の中身は、「Hello,World!」の表示と、

 ハートの表示と、

 2秒間何もしないで待つことだ。

 じゃあ、ここで「Hello,World!」を表示して、ハートを表示して、2秒待つのですか?

 いや、ここではまだこれらを行う訳ではない。「tomato」という関数が呼び出されたら、初めてこれらが行われるのだ。

 そうなんですか!

 次に、ループに入る。

 10行目に来たわけですね。

 そして、11行目の「tomato(0)」によって、先ほどの「Hello,World!」を表示して、ハートを表示して、2秒待つ処理が行われるのだ。

 なんとも、かんとも。

 関数は、呼び出されて初めて実行される、ということを試してみよう。試しに11行目をコメントアウトしてみてくれたまえ。

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目 #  tomato(0)

 マイクロビットに「Flash」すると・・・何も表示されませんね。

 関数「tomato」が呼び出されないので、何も行われない、ということになるのだ。

引数を使ってみよう。

 ところで、今回の関数には、「tane」という引数が用意されている。

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)

 はぁ、勢いでそのように打ち込んでしまいました。

 これを使ってみようと思う。引数を使うことで、関数の動きを変えることができる。

 そんなことができるんですか!

 現状では「Hello,World!」と表示されているが、これを変えられるようにしてみよう。以下としてみてくれ。そして、11行目のコメントアウトを元に戻してくれたまえ。

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(tane)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目  tomato(0)

 これをマイクロビットに「Flash」すると・・・「Hello,World!」の代わりに「0」と表示されますね!

 呼び出しの部分で「tomato(0)」としているからね。[(0)」の代わりに何か言葉を入れてごらん。シングルクオーテーション「’」で囲うのを忘れてはいけないよ。

 では、「Honjitu ha seiten nari」としてみると・・・

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(tane)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目   tomato(‘Honjitu ha seiten nari’)

 「Honjitu ha seiten nari」と表示されましたね!でも、なんだかプログラムがややこしくなっただけのような・・・

 関数の便利さは、プログラムに似たような処理をいくつか組み込んでみると分かると思う。

 ふむふむ。

 という訳で、次回は、ボタンを使って表示内容を変えるプログラムを作ってみるよ。

 ついにボタンを使うんですね!

今回のまとめ

 今回のまとめだよ~。

  1. 関数の先頭部分は def [関数名]([引数]): と記述する。
  2. 関数の中身はインデントされたブロックとして記述する。
  3. 関数は呼び出されるより前に記述する必要がある。

 今回作ったプログラムは、

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目
  • 5行目 def tomato(tane):
  • 6行目  display.scroll(tane)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目  tomato(’Honjitu ha seiten nari’)

 でぇ~す!

つづく

コメント

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