コードモンキー日本公式サイト

コードモンキーの最新情報やプログラミング学習に有益な各種情報をお届けします。


コードモンキーサポートデスクに寄せられたユーザーからのご質問およびコードモンキーサポートデスクからの回答を紹介しております。
今回寄せられたご質問は、コードの冒険メインモードNo.80の関数の定義と呼び出しについて


ユーザー様からのご質問

コードの冒険メインモードNo.80について解説してください。以下のコードはどういうコードですか?

collect = (e) ->
    turnTo e
    step distanceTo e
    grab()
サポートデスクからの回答

いつもコードモンキーをご利用いただきありがとうございます。
いただいたご質問につき回答いたします。

チャレンジNo.80の解答例のコードでは、collectという関数を定義し、その関数collectをforループの中で呼び出すことでマッチを集めています。

関数の定義

No.80の解答例のコードでは、まず、以下のコードで「collectという関数を定義」します。

#collectという関数を定義するコード
collect = (e) ->
    turnTo e
    step distanceTo e
    grab()
    turnTo pile
    step distanceTo pile
    drop()

この定義によって、関数collectが実行されたときには、”turnTo e”から”drop()”までのコードが実行されることになります。
これが「関数の定義」です。

関数の呼び出し(実行)

そして、上のように定義された関数”collect”を、以下のように「呼び出し(実行)」します。

for m in matches
    collect m  #引数 m を渡して関数collectを呼び出し

“for m in matches”の中で”collect m”を呼び出していますので、この”m”はすべてのmatchesに置き換わって実行されます。
つまりforを使わずに書くと以下のコードということになります。

collect matches[0]
collect matches[1]
collect matches[2] 
collect matches[3]

このように、最初に定義されたcollect関数が4回「呼び出し(実行)」されることになります。

引数

関数の定義のぶぶんで説明したように、collect関数は、呼び出されたときに”turnTo e”から”drop()”までのコードが実行されるように定義されています。

そして、collect関数を”collect matches[0]”のように呼び出すと、”matches[0]”が、collect関数の定義の”e”の部分に入って実行されます。
つまり、”collect matches[0]”を実行すると、”e”が”matches[0]”に置き換わるので、以下のコードが実行されるということです。

turnTo matches[0]
step distanceTo matches[0]
grab()
turnTo pile
step distanceTo pile
drop()

ここではfor文を使わずにmatches[0]を引数としてcollect関数を呼び出しましたが、解答例では、for文の中でcollect関数を呼び出すことで、すべてのマッチにたいしてcollect関数が実行され、すべてのマッチを集めることができるコードになっています。

関数の定義、引数については以下の記事でも説明しておりますので、ご確認いただけますと幸いです。

[Q & A] 関数の定義?引数?呼び出し? 呪文みたいなもの?


以上、ご案内いたします。いかがでしたでしょうか。また不明点などありましたらお気軽にお問い合わせください。

引き続きコードモンキーをお楽しみくださいませ。

コードモンキーサポート