
[Q & A] collect関数の定義と呼び出し。引数って?
投稿日: 2018年5月10日
コードモンキーサポートデスクに寄せられたユーザーからのご質問およびコードモンキーサポートデスクからの回答を紹介しております。
今回寄せられたご質問は、コードの冒険メインモード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] 関数の定義?引数?呼び出し? 呪文みたいなもの?
以上、ご案内いたします。いかがでしたでしょうか。また不明点などありましたらお気軽にお問い合わせください。
引き続きコードモンキーをお楽しみくださいませ。
コードモンキーサポート