首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能解释一下什么是状态和可变数据吗?

有人能解释一下什么是状态和可变数据吗?
EN

Stack Overflow用户
提问于 2013-04-27 12:45:03
回答 6查看 5.1K关注 0票数 8

在计算机科学中,函数式编程是一种将计算作为数学函数的评价,避免状态和可变数据的编程范式。

programming

有人能解释一下什么是状态和可变数据吗?有人能用JAVA或JavaScript给我举例子吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-27 12:57:43

可变表示任何可以更改的内容,即int。

代码语言:javascript
复制
int a = 0;
System.out.prtinln(a); //prints 0
a = 2;
System.out.prtinln(a); //now prints 2, so its mutable

在java中,字符串是不可变的。不能只更改字符串值的引用。

代码语言:javascript
复制
String s1 = "Hello";
System.out.println(s1); //prints Hello
String s2 = s1;
s1 = "Hi";
System.out.println(s2); //prints "Hello" and not "Hi"

State是类的实例将拥有的东西(对象)。

如果一个对象的属性有某些值,它处于不同的状态,那么同一类的另一个对象具有不同的属性值。

票数 6
EN

Stack Overflow用户

发布于 2013-04-27 15:39:42

可变状态是所有可以使函数返回不同值的东西,尽管使用相同的参数调用它。

Java中的简单示例:

代码语言:javascript
复制
public static double badSqrt(double x) {
    double r = Math.sqrt(x);
    if (System.currentTimeMillis() % 42L == 0L) return r;
    return r + 0.000000001;
}

这个函数有时计算一个稍微不正确的结果。我们说badSqrt是不纯的,因为它的结果并不仅仅取决于它的参数(和常量)。

对于调试包含对badSqrt()调用或一般不纯函数的程序的人来说,这是一场噩梦。通常情况下,这个程序似乎是有效的,但偶尔会出现错误的结果。除非该函数有明确的文档记录或源代码可用,否则很难跟踪该bug。

在这种情况下,据说函数的行为取决于可变状态。这种状态可以被程序中完全不相关的部分更改(变异),或者像在示例中那样被另一个程序(操作系统)所改变。

票数 3
EN

Stack Overflow用户

发布于 2013-04-27 12:54:19

不可变对象的一个典型示例是Java String类的实例。

代码语言:javascript
复制
 String s = “ABC”;

 s.toLowerCase();

 System.out.println(s);

输出= ABC

这是因为s继续引用其不可变字符串。如果您想变异s,则需要一种不同的方法:

代码语言:javascript
复制
s = s.toLowerCase();

这将创建一个新的引用。现在,字符串引用一个包含"abc“的新String对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16252238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档