加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么我们需要在编码时避免突变?什么是突变?

发布时间:2020-12-14 05:47:18 所属栏目:Java 来源:网络整理
导读:为什么第二个代码(带有流的代码)比第一个代码更好? 第一: public static void main(String [] args) { ListInteger values = Arrays.asList(1,2,3,4,5,6); int total = 0; for(int e : values) { total += e * 2; } 第二: System.out.println(total); Sys
为什么第二个代码(带有流的代码)比第一个代码更好?

第一:

public static void main(String [] args) {
   List<Integer> values = Arrays.asList(1,2,3,4,5,6);
   int total = 0;
   for(int e : values) {
       total += e * 2;

   }

第二:

System.out.println(total);
   System.out.println(
           values.stream()
           .map(e-> e*2)
           .reduce(0,(c,e)-> c + e));

解决方法

变异正在改变一个对象,是编程语言中常见的副作用.

具有函数契约的方法将始终将相同的值返回到相同的参数,并且没有其他副作用(如存储文件,打印,读取).因此,即使你在你的函数中改变临时值,它仍然是纯粹的外部.通过将您的第一个示例放在函数中演示它:

public static int squareSum(const List<Integer> values)
{
    int total = 0;
    for(int e : values) {
        total += e * 2;  // mutates a local variable
    }
    return total;
}

纯函数方法甚至不更新局部变量.如果你把第二个版本放在一个函数中它将是纯粹的:

public static int squareSum(const List<Integer> values)
{
    return values.stream()
           .map(e-> e*2)
           .reduce(0,e)-> c + e);
}

对于一个知道其他语言的人来说,长期以来一直偏爱功能样式地图并且使用lambda减少非常自然.两个版本都易于阅读和易于测试,这是最重要的部分.

Java有功能类. java.lang.String就是其中之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读