我知道,Java代码很容易阅读,也很容易理解,但是从我的view.What角度来说,引入lambda表达式非常复杂,这让甲骨文认为他们引入了java8作为主要的吸引力。
因为我是一个java程序员,所以我想知道为什么它是重要的。
发布于 2014-04-16 02:15:54
考虑一下http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#approach1
Lambda可以用来以一种可读的方式使代码可扩展。
(免责声明,我并不真正“了解”C++,我更喜欢使用Java )
为了使功能脱离特定的范围,例如,检查人员,并在满足某些条件的情况下打印它们,Java以前可能会使用对象来实现这一点。
public static void printPersons(
List<Person> roster, CheckPerson tester) {
for (Person p : roster) {
if (tester.test(p)) {
p.printPerson();
}
}
}
interface CheckPerson {
boolean test(Person p);
}
class CheckPersonEligibleForSelectiveService implements CheckPerson {
public boolean test(Person p) {
return p.gender == Person.Sex.MALE &&
p.getAge() >= 18 &&
p.getAge() <= 25;
}
}你用的是:
printPersons(
roster, new CheckPersonEligibleForSelectiveService());作为一名非Java开发人员,这在我看来有点愚蠢。Person显然是一个重要的对象,但是,CheckPerson和CheckPersonEligibleForSelectiveService不是那么有动机的类,仅仅是因为我们需要它们。
感觉他们封装的最重要的是有检查的功能。如果我们可以简单地传递它,我们就不需要处理类的脚手架了。哦,但看起来我们可以和兰巴达!
printPersons(
roster,
(Person p) -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25
);这段代码对我来说是超级可读的,尽管我停止了用Java 4编写Java。
从技术上讲,上面的论点并不公平,因为您可以更简洁地使用这样的对象:
printPersons(
roster,
new CheckPerson() {
public boolean test(Person p) {
return p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25;
}
}
);但是,您真的需要为测试创建一个对象吗?我知道一些关于匿名类构造的糟糕的面试问题,所以它可能不是最直观的语法。
但关键是,如果函数是我们需要赋予代码的重要内容,那么我们应该有一种机制,可以将函数赋予代码。这是用羔羊做的。
发布于 2014-04-16 01:49:23
我认为这里的单词是“分布式处理”。您可能已经注意到,在最近几年中,在不添加越来越多的内核的情况下,更难创建更快的处理器。
发布于 2014-04-16 01:48:14
要回答这个问题,你不是带着开发人员的帽子思考的。你认为自己是个程序员。有什么关系呢?编码器是如果有人给你逻辑,你写的代码来执行逻辑。开发人员将是给您逻辑的另一个人。
如果你讨厌一种语言的某些特征,自然的趋势就是远离它。但是当你独自工作的时候,一切都是好的。如果有2+开发人员,您很可能会阅读并理解其他人所写的内容。如果代码做得很好,并且解决了手头的问题,那么您不能仅仅说不想使用它,因为您对查找文档缺乏兴趣。
编辑改变了最后一部分的知识。
https://stackoverflow.com/questions/23097484
复制相似问题