 前回は、関数を紹介した。今回は、実際に関数を作ってみようと思う。
 前回は、関数を紹介した。今回は、実際に関数を作ってみようと思う。
 前回の予告通り、関数を作るんですね。とにかく、やってみましょう!
 前回の予告通り、関数を作るんですね。とにかく、やってみましょう!
まずは、関数を作ってみよう。
 今回もサンプルプログラムから始めよう。
 今回もサンプルプログラムから始めよう。
- 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」と書いて、そのあとに関数名、「(」、引数、「)」と続けるのだ。そして、最後を「:」で締める。赤トマト君、やってみるかい?
 ループの中身の6行目から8行目を関数にしてみるぞ。関数を作るには、まず「def」と書いて、そのあとに関数名、「(」、引数、「)」と続けるのだ。そして、最後を「:」で締める。赤トマト君、やってみるかい?
def [関数名]([引数]):
 分かりました。関数名は「tomato」にしてみます。サンプルプログラムに追加すればよいのですね。
 分かりました。関数名は「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」として、出来ました!これでいいのでしょうか?
 引数は「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行目にコピーされましたね。これが中身なのですか?
 6行目から8行目が11行目から13行目にコピーされましたね。これが中身なのですか?
 そういうことだ。ちなみに関数の中身は、ブロックとして記述する必要がある。つまり、インデントしないといけない、ということなのだ。
 そういうことだ。ちなみに関数の中身は、ブロックとして記述する必要がある。つまり、インデントしないといけない、ということなのだ。
 インデント?字下げのことですね。これで出来上がりですか?
 インデント?字下げのことですね。これで出来上がりですか?
 実は、もう一つポイントがあるが、それは動かして確認してみよう。
 実は、もう一つポイントがあるが、それは動かして確認してみよう。
関数を呼び出してみよう。
 作った関数を動かすために、この関数を呼び出す部分を追加してみよう。
 作った関数を動かすために、この関数を呼び出す部分を追加してみよう。
 呼び出し?ですか???
 呼び出し?ですか???
 ループの中身を「tomato(0)」とすればよいのだ。
 ループの中身を「tomato(0)」とすればよいのだ。
 カッコの中に0と書かれてますが、この0は一体どういうことなのだろう?
 カッコの中に0と書かれてますが、この0は一体どういうことなのだろう?
 関数「tomato」に「tane」という引数があるので、何か値を入れておく必要があるのだ。実際には関数の中で引数がまだ使われていないので、どんな値でもよい。
 関数「tomato」に「tane」という引数があるので、何か値を入れておく必要があるのだ。実際には関数の中で引数がまだ使われていないので、どんな値でもよい。
 では0でなくてもよいのですか?
 では0でなくてもよいのですか?
 ィエース。後で引数も使ってみるが、ここではひとまず0としておく。
 ィエース。後で引数も使ってみるが、ここではひとまず0としておく。
- 5行目 while True:
- 6行目 tomato(0)
- 7行目
- 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:」の前に移動したのですね。
 8行目からの関数が5行目の「while True:」の前に移動したのですね。
 では、動かしてみよう。
 では、動かしてみよう。
 マイクロビットをつないで「Flash」すると・・・サンプルプログラムと同じ動きをしていますよ。
 マイクロビットをつないで「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話「サンプルプログラムを見てみよう」以来の登場ですね。電源を入れると起きる人ですね。
 第3話「サンプルプログラムを見てみよう」以来の登場ですね。電源を入れると起きる人ですね。
 その通り。電源が入る前は、マイコン君は寝ている。
 その通り。電源が入る前は、マイコン君は寝ている。

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

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

 ハートの表示と、
 ハートの表示と、

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

 じゃあ、ここで「Hello,World!」を表示して、ハートを表示して、2秒待つのですか?
 じゃあ、ここで「Hello,World!」を表示して、ハートを表示して、2秒待つのですか?
 いや、ここではまだこれらを行う訳ではない。「tomato」という関数が呼び出されたら、初めてこれらが行われるのだ。
 いや、ここではまだこれらを行う訳ではない。「tomato」という関数が呼び出されたら、初めてこれらが行われるのだ。
 そうなんですか!
 そうなんですか!
 次に、ループに入る。
 次に、ループに入る。

 10行目に来たわけですね。
 10行目に来たわけですね。
 そして、11行目の「tomato(0)」によって、先ほどの「Hello,World!」を表示して、ハートを表示して、2秒待つ処理が行われるのだ。
 そして、11行目の「tomato(0)」によって、先ほどの「Hello,World!」を表示して、ハートを表示して、2秒待つ処理が行われるのだ。
 なんとも、かんとも。
 なんとも、かんとも。
 関数は、呼び出されて初めて実行される、ということを試してみよう。試しに11行目をコメントアウトしてみてくれたまえ。
 関数は、呼び出されて初めて実行される、ということを試してみよう。試しに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」すると・・・何も表示されませんね。
 マイクロビットに「Flash」すると・・・何も表示されませんね。
 関数「tomato」が呼び出されないので、何も行われない、ということになるのだ。
 関数「tomato」が呼び出されないので、何も行われない、ということになるのだ。
引数を使ってみよう。
 ところで、今回の関数には、「tane」という引数が用意されている。
 ところで、今回の関数には、「tane」という引数が用意されている。
- 5行目 def tomato(tane):
- 6行目 display.scroll(‘Hello, World!’)
- 7行目 display.show(Image.HEART)
- 8行目 sleep(2000)
 はぁ、勢いでそのように打ち込んでしまいました。
 はぁ、勢いでそのように打ち込んでしまいました。
 これを使ってみようと思う。引数を使うことで、関数の動きを変えることができる。
 これを使ってみようと思う。引数を使うことで、関数の動きを変えることができる。
 そんなことができるんですか!
 そんなことができるんですか!
 現状では「Hello,World!」と表示されているが、これを変えられるようにしてみよう。以下としてみてくれ。そして、11行目のコメントアウトを元に戻してくれたまえ。
 現状では「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」と表示されますね!
 これをマイクロビットに「Flash」すると・・・「Hello,World!」の代わりに「0」と表示されますね!
 呼び出しの部分で「tomato(0)」としているからね。[(0)」の代わりに何か言葉を入れてごらん。シングルクオーテーション「’」で囲うのを忘れてはいけないよ。
 呼び出しの部分で「tomato(0)」としているからね。[(0)」の代わりに何か言葉を入れてごらん。シングルクオーテーション「’」で囲うのを忘れてはいけないよ。
 では、「Honjitu ha seiten nari」としてみると・・・
 では、「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」と表示されましたね!でも、なんだかプログラムがややこしくなっただけのような・・・
 「Honjitu ha seiten nari」と表示されましたね!でも、なんだかプログラムがややこしくなっただけのような・・・
 関数の便利さは、プログラムに似たような処理をいくつか組み込んでみると分かると思う。
 関数の便利さは、プログラムに似たような処理をいくつか組み込んでみると分かると思う。
 ふむふむ。
 ふむふむ。
 という訳で、次回は、ボタンを使って表示内容を変えるプログラムを作ってみるよ。
 という訳で、次回は、ボタンを使って表示内容を変えるプログラムを作ってみるよ。
 ついにボタンを使うんですね!
 ついにボタンを使うんですね!
今回のまとめ
 今回のまとめだよ~。
 今回のまとめだよ~。
- 関数の先頭部分は def [関数名]([引数]): と記述する。
- 関数の中身はインデントされたブロックとして記述する。
- 関数は呼び出されるより前に記述する必要がある。
 今回作ったプログラムは、
 今回作ったプログラムは、
- 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’)
 でぇ~す!
 でぇ~す!
つづく

 
  
  
  
  

コメント