gpt4 book ai didi

java - 函数式编程与面向对象编程

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

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

1年前关闭。




Improve this question




我只是查找了一些函数式编程和 OOP 之间差异的示例/定义。我发现了一个我认为很有趣的定义,我理解 OOP 部分,但需要对函数式编程部分进行一些清晰/示例。

“函数式编程倾向于重用一组通用的函数式实用程序来处理数据。面向对象的编程倾向于将方法和数据并置在对象中。”

功能性实用程序是什么意思?我一般都接受 OOP,所以这个定义对我来说很有意义。提前致谢

最佳答案

有几个核心实用函数让函数式编程感觉与众不同:map , filter , fold (也称为 reduce )和 unfold .此外,大多数函数式语言都使用这些操作可以针对的通用数据结构,并且数据由更简单的类型表示。而在面向对象的编程中,您可能有一个 MovieList包含 Movie 的对象对象并具有迭代或操作这些电影对象的方法,您更有可能只有 Movie函数式语言中的对象,并在 List of Movie 的上下文中使用它们数据结构。

例如,假设您想要 OO 语言中电影标题的大写版本。它可能看起来像这样:

// This would, presumably, be a method on MovieList.
public List<String> getUppercaseTitles() {
List<String> uppercaseTitles = new ArrayList<>();
for (Movie movie : this.getMovies()) {
uppercaseTitles.append(movie.getTitle().toUpper());
}
return uppercaseTitles;
}

在函数式语言中,类似的操作更可能如下所示:

uppercaseTitles :: [Movie] -> [String]
uppercaseTitles movies = map (toUpper . title) movies

换句话说,不是用 for 给出一步一步的指导。循环和命令式方法调用,您正在声明 uppercaseTitlesmap 组成将两个函数( toUppertitle )组合成电影列表。

关于java - 函数式编程与面向对象编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149745/

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