【发布时间】:2018-08-02 17:36:08
【问题描述】:
不可变对象可以,但是,非最终本地引用可以吗?
也就是说,下一个代码 sn-p 可以表示为函数式编写的?
Employee e = new Employee("Lex", 24, 250);
e = Employee.setName(e, "Vasili");
e = Employee.setAge(e, 12);
e = Employee.setSalary(e, 2500);
Employee.log(e);
附:这里所有的Employee 方法都是静态的,setter 是返回新实例的工厂方法。
【问题讨论】:
-
e0,e1,e2都是未定义的。在这里使用setX和setY作为方法名称会产生误导。也许将它们命名为createWithX和createWithY。 -
OK 是什么意思?
-
不可变样式可能是
new Employee("Lex", 24, 250).withName("Vasili").withAge(12).withSalary(2500),with方法每个都返回一个新的Employee对象。 -
@LexUshakov 在纯函数式语言中,没有“变量”。有些名称指的是值,但您不能更改值。在命令式编程术语中,所有变量都是常量,即根本不是 variable / 变化 / 可变的。这就是为什么,为了在 Java 中模拟相同的行为,使参数和局部变量
final,因此它们不能被重新分配/更新/修改。 -
@LexUshakov,在函数式编程中没有对象或引用,只有值,值不会改变。您不会在程序中更改 4 的值,因此如果您说 x=4 那么您也不会更改 x,因为这与更改 4 的值相同。第一行说e = 员工“Lex”等。然后您将 e 更改为员工“Vasili”。那么是 e Lex 还是 Vasili?不可能两者兼而有之。在 FP 中没有“控制流”的概念,其中变量在不同时间具有不同的值。
标签: java oop functional-programming