2017-09-13 4 views
1

これはむしろ一般的な目的の質問であり、いずれの言語にも固有のものではありません。私は、別の関数への引数として関数を渡すことの背後にある点をかなり理解していません。私は、関数、例えば、foo1()が別の関数foo2()によって返された結果を使用する必要がある場合、foo2()によって返された値がそのままfoo1()に渡されないことを理解します。または別のシナリオでは、なぜがfoo1()の中で呼び出され、その結果がそこに使用されないのですか? foo2()が引数として渡されてfoo1()になったときに、何が起こるのでしょうか? foo1()より前にfoo2()が実行されていますか?関数を他の関数の引数として渡すことの背後にある点は何ですか?

+0

これを見て、役に立つかもしれません:https://softwareengineering.stackexchange.com/questions/253868/passing-functions-into-other-functions-as-パラメータ - 悪い練習 –

+0

基本的にrなしそのすべてのリンクを強調すると、高次関数には必要です。 [地図](https://en.wikipedia.org/wiki/Map_(higher-order_function))と[reduce](https://en.wikipedia.org/wiki/Fold_(higher-order_function))は共通の例です。 –

+0

@ Don'tPanicそのリンクが多くを吸収する間に、私はまだポイントをまだよく理解しているとは思わない。 :/ – alannaC

答えて

2

一般的に言えば、あなたはfoo2の複数の評価が必要になる場合に機能foo1に機能foo2を渡す - あなたはおそらくパラメータがfoo2の各呼び出しのために使用されるかを事前に知っていないので、あなたがcouldn可能であれば、事前に自分で電話をしてください。

私は、リスト上のsort()機能/方法が最も具体的な例であると思います。人々のリストを考えてみましょう。アルファベット順にアルファベット順に並べ替えるか、年齢別に、または指定された地点からの地理的距離によって、または他の多くの可能な注文を並べ替えることが合理的です。そのようなすべての注文をsort()に組み込まれたオプションとして含めることはほとんど不可能です。言語によって行われる通常のアプローチは、呼び出し元がパラメータとして関数を提供し、リストの項目間の順序を定義できるようにすることです。

0

は多くの理由があります:

依存性の注入:あなたは本番でデータベース呼び出しを使用する方法を渡し、あなたは異なるパラメータでそれを使用する場合、あなたには、いくつかのモックユニットテストでそれを置き換えることができます。

Map、filter、reduce:パラメーターのリストに同じメソッドを適用し、マップしたり、フィルターをかけたり、減らしたりすることができます。

関連する問題