gpt4 book ai didi

java - 除了在 JavaScript 等多范式/函数式语言中隐藏信息之外,闭包的真正值(value)主张是什么?

转载 作者:行者123 更新时间:2023-12-03 11:03:23 25 4
gpt4 key购买 nike

当我第一次尝试理解闭包时,我遇到了一面难以理解的计算机科学,在我接触闭包之前我必须先理解它。然后我了解到,在更多的猴子看到、猴子做的基础上,虽然 JavaScript 关键字不允许 Java 的习惯用法,但(请原谅我内存模糊):

JAVA:

class ObjectWithPrivateMember()
{
private int counter;
public void ObjectWithPrivateMember()
{
counter = 0;
}
public void increment()
{
counter += 1;
}
public void decrement()
{
counter -= 1;
}
public void get_count()
{
return counter;
}
}

JavaScript(几年前的 ECMAScript)没有真正的“私有(private)”/“ protected ”关键字,但 Java 习惯用法的自由翻译可能是这样的:

JAVASCRIPT:

var object_with_private_member = function()
{
var counter = 0;
return {
increment: function()
{
counter += 1;
},
decrement: function()
{
counter -= 1;
},
get_count: function()
{
return counter;
}
};
}();

除了我的第一 react “Ewwwwww,用胶带试图把 JavaScript 打扮成它不是的东西”之外,我在心里将其归档为,“好吧,这就是如何用 JavaScript 的晦涩细节硬塞 Java 习惯用法。这可能无法直接洞察 JavaScript 的优点。”

现在我回来解决这个问题“闭包真正有什么用?”the Wikipedia entry给出了一些细节,并表明信息隐藏可能是主要用例,不仅在具有大量函数式倾向的多范式语言中,而且在一流函数式语言中也是如此。当然,它更详细,并提供了更多细微差别,但它表明教科书“具有私有(private)字段的 JavaScript 对象”用例并不像我想象的那样离题。

优秀的函数式程序员会看到纯函数式语言或多范式语言中具有函数式倾向的闭包的真正用例是什么?它们主要用于信息隐藏吗(the Wikipedia article 提供了比上面的漫画更多的细微差别和细节,但至少乍一看我的想法是闭包在 JavaScript 中可能比创建私有(private)成员的后门方式具有更大、更有趣的作用.

除了纯/多范式函数语言中的信息隐藏机制之外,还有其他主要用例吗?

最佳答案

根据我的经验,隐私问题是一个次要的考虑因素,尤其是对于不可变的值(value)观。如果他们无法改变它,你为什么要关心谁会看到它?

要了解闭包的值(value),您首先必须了解一流函数的值(value),然后就很容易看出何时可以方便地将某些数据与该函数关联起来。

考虑尝试在不使用闭包的情况下从维基百科页面编写以下示例,但仍使用 filter 高阶函数:

// Return a list of all books with at least 'threshold' copies sold.
function bestSellingBooks(threshold) {
return bookList.filter(
function (book) { return book.sales >= threshold; }
);
}

您需要找到其他方式将阈值传递给谓词函数。在 OOP 中,您将创建某种对象,例如:

class ThresholdFilter implements Filterable {
private threshold;
ThresholdFilter(threshold) {
this.threshold = threshold;
}

bool filter(book) {
return book.sales >= this.threshold;
}
}

function bestSellingBooks(threshold) {
return bookList.filter(new ThresholdFilter(threshold));
}

或者,您可以更改 filter 函数以接受某种私有(private)通用数据结构来存储和传递,这使得 filter 和谓词函数更加复杂并且更加耦合。现在看来,关闭看起来不错,对吗?

还有很多情况下,闭包极大地减少了耦合并简化了使用高阶函数的代码。这是函数式程序更加简洁的主要原因。

关于java - 除了在 JavaScript 等多范式/函数式语言中隐藏信息之外,闭包的真正值(value)主张是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com