lambda 表达式中变量名称的约定是什么?[已关闭]

2022-09-02 21:24:12

我看到很多例子,例如

int sum = widgets.stream()
                  .filter(w -> w.getColor() == RED)
                  .mapToInt(w -> w.getWeight())
                  .sum();

我们可以在这些lambda表达式中使用任何变量Name吗?

我认为变量名称有约定,为了便于阅读,最好使用适当的名称。

例如,如果我在java8之前使用w作为Widget,代码将被回避,因为不可读。随着java 8的出现,发生了什么变化?

   for(Widget w : widgets)
   {
         if(w.getColor() == RED) {
            sum += w.getWeight();
         }
    }

为什么代码不能这样写:

int sum = widgets.stream()
                  .filter(widget -> widget.getColor() == RED)
                  .mapToInt(widget -> widget.getWeight())
                  .sum();

也许上面的代码正在做一些直截了当的事情,并且只在小部件列表中的小部件上。所以,还有更多的东西:

哪个更具可读性:

    return  requestHolder.getRequests()
                        .stream()
                        .map(request -> request.getErrorHolder())
                        .flatMap(errorData -> errorData.getErrors().stream())
                        .collect(toList());

    return  requestHolder.getRequests()
                        .stream()
                        .map(t -> t.getErrorHolder())
                        .flatMap(r -> r.getErrors().stream())
                        .collect(toList());

也许我错过了一些东西。你能解释一下吗?


答案 1

默认的约定是:命名你的变量,使代码令人愉快且易于阅读。

在我看来,当变量的范围有限时,非常短的名称或虚拟名称是可取的。它使代码更具可读性,更轻量级,并且还指示变量的功能受到限制。

当变量在代码中广泛使用并且您希望避免将其与其他变量混淆时,应首选显式名称。

for(int i = 0 ; i < max ; ++i) {
    int myExplicitVar = myArray[i];
    // rest of the code using myExplicitVar several times
}

对于 lambdas,变量的范围通常非常有限,我发现当名称较短时,它更容易阅读,因此仅保留代码的重要部分,这是 lambda 表达式的首要意义所在。

在您的示例中,我发现短名称更直接。

短变量名称使代码不那么臃肿,但可能导致在丰富的上下文中出现混淆。


答案 2

好吧,我使用Java8已经有一段时间了,事实上,我发现我更频繁地使用更长的名称。我对此的看法是一个简单的经验法则:我喜欢短名称与否。

我通常会选择像iy这样的短名称,如果很明显,在流中发生了什么。如果您正在处理小部件流并执行4-6次操作,则每次编写小部件都很烦人,并且在几次操作后行开始看起来相同。因此,对于相同事物的流,从上下文中我很容易知道我正在做什么,我有时会选择短变量。这与循环迭代器相同,每个人都使用i而不是索引

另一方面,如果我做了很多处理,特别是如果我需要映射一些东西,我喜欢给出描述性的名称,甚至极端,如小部件过滤小工具widgetHeight等。

至于网络上的常用符号,请记住,很多人试图推广新的Java语法。很酷的是,它可以很短,所以他们倾向于尽可能地采取它。在爪哇岛,我们总是不得不写很多东西,我的猜测是人们对我们可以少打字的事实反应过度。看看Venkat S.在2年前谈论时髦或.js的例子,他经常不知道他不必在行尾输入分号是多么重要。我猜我们的大脑就是这样工作的。


推荐