有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java lambda表达式中变量名的约定是什么?

我看到很多例子,比如

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

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

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

例如,如果我在java8之前的版本中使用w作为小部件,代码将被避免为不可读。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) 个答案

  1. # 1 楼答案

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

    在我看来,当变量的范围受到限制时,最好使用非常短的名称或伪名称。它使代码更可读、更轻,还表明变量的功能有限

    当变量在代码中广泛使用时,为了避免与其他变量混淆,最好使用显式名称

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

    对于lambdas,变量的范围通常非常有限,我发现当名称较短时更容易阅读,因此只剩下代码的重要部分,,这是lambda表达式的第一点

    在你的例子中,我发现短名字更直截了当

    短变量名使代码不那么臃肿,但在丰富的上下文中可能会导致混乱