タートルグラフィックスで共通箇所を関数でまとめてみよう


タートルグラフィックスでカメに色んな動きをさせてみようで複数の命令を組み合わせてカメに四角を描いてもらいました。


作成しましたコードには同じコードが何度も使われていて無駄が多かったので、今回は関数で同じ処理をまとめて無駄を減らしてみることにしましょう。


先に関数についてですが、関数は処理をまとめる事ができる設計図のようなもので、まとめた処理は関数名として名前を付ける事ができます。


前回作成しましたコードは

from turtle import *

shape("turtle")
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
done()

になりまして、

forward(100)
left(90)

のコードが4回あります。


この箇所を関数にしてみます。

先に処理の名前を決めるとすると、まっすぐ進んで左に曲がるので、forward_turn_left(まっすぐ進んで左を向く)にします。

関数名を付ける時はスペースを使えないので、スペースの箇所は_(アンダースコア)にするか、単語の始まり(今回はturnやleft)を大文字にします。


スペースの箇所をアンダースコアにするのをスネークケースと呼び、単語の始まりを大文字にするのをキャメルケースと呼びます。

パイソンではスネークケースを使う事が多いので、今回はスネークケースを採用しています。


上記の内容を踏まえた上で、共通箇所を関数にしてみます。


from turtle import *


def forward_turn_left():
␣␣␣␣forward(100)
␣␣␣␣left(90)


shape("turtle")
forward_turn_left()
forward_turn_left()
forward_turn_left()
forward_turn_left()
done()

※␣は半角スペース1個分


def forward_turn_left():
␣␣␣␣forward(100)
␣␣␣␣left(90)

※␣は半角スペース1個分

上記のコードが共通箇所を関数化したものになります。


def 関数名:

が関数の合図になり、関数でも一連の処理(ブロックコード)はインテンドの深さでまとめます。


関数が記述された箇所ではコードは実行されず、

forward_turn_left()

のコードが書かれている箇所で、関数内で書いたコードが実行されます。


今回の内容では、関数の何が良いのか?は実感し難いですが、関数にする事でしかできない処理がありますので、順を追って見ていくことにします。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。