このサイトやラムダとクロージャーに関する他のサイトの多くの投稿を 1 時間かけて読みました。それらが何であるか、つまりどのように機能するかは理解していると思いますが、なぜそれらが存在するのかはわかりません。私が目にする多くの例は、それらの「力」に漠然と言及していますが、それらの各ケースで、説明されていることを達成するためのはるかに簡単な方法を考えることができます. おそらくこれは、(理解しやすくするために) 例が意図的に過度に単純化されているためか、あるいは私が密集しているからかもしれません。しかし、私が本当に望んでいるのは、クロージャーまたはラムダで達成できないことの明確な例を見ることですなしで達成します。すべてのプログラミング パラダイムは最終的には同じ機械語命令に要約され、ある言語で実行できることは別の言語でも実行できるため、おそらくこれはよくある質問です。したがって、私が本当に求めているのは、クロージャーを使用しない場合よりもエレガントなクロージャーを使用して何かを実行した例です (これは、私がまだ見たどの例にも当てはまらないようです)。
これが私が話していることです。
「閉鎖」とは何ですか?に対する主な回答 、Scheme の例:
(define (make-counter)
(let ((count 0))
(lambda ()
(set! count (+ count 1))
count)))
(define x (make-counter))
(x) returns 1
(x) returns 2
...etc...
私は、Scheme についてはよくわかりませんが、何が起こっているかはわかります。しかし、これはより簡単で、同じことを達成できるのではないでしょうか? 擬似コード:
function incrementCount(var counter) {
counter++;
return counter;
}
counter = 1;
counter = incrementCount(counter);
counter = incrementCount(counter);
ラムダに関する別の例:ラムダ (関数) とは?
与えられた JavaScript の例:
var adder = function (x) {
return function (y) {
return x + y;
};
};
add5 = adder(5);
add5(1) == 6
繰り返しますが、なぜそのようにするのですか?なぜ言わないのですか:
function adder(x, y) {
return x + y;
}
adder(5, 1);
私が見たすべての例は、基本的な関数で簡単に実行できることを行うには、非常に複雑な方法のように思えます。これらの例は、私が見ることができる驚くほどクールな「力」を示しているわけではありません。誰かが私を啓発してください、私は何かを見逃しているに違いありません。ありがとう。