我在找一个形容词;一个描述“变异”的相反的形容词。我想用它来标记函数、方法和方法参数(包括接收器)为“不被函数变异”,类似于D语言所做的。
Ds方法对于参数非常有效:
class X {
void foo(const int x, immutable char[] y) {
// x is readonly
// y is readonly and can be trusted not to change
}
}但是,当在函数/方法本身上使用immutable和const来表示该函数不修改接收对象时,它们看起来都很难看:
// again D
class X {
private int x;
void foo() const {
// x becomes readonly because the method is marked s such
}
void foo2() immutable {
// same as foo(): x is readonly
}
}我正在寻找一个与D中上述关键字具有相同语义的关键字;但是作为一个形容词,要在函数名称之前编写:
class X {
private x: int
non-mutating foo() {
// x is readonly
}
}使用immutable读取的方法将是不可变的(例如在Java中是最终的,在C#/C++中是非虚拟的)。在括号结束参数列表后,我不能使用关键字,因为返回类型应该放在那里:
fun x() -> Int我不完全确定这是否是问这个问题的正确地方。但是,由于我没有找到一个programming language design SE,我认为在这个社区中了解许多编程语言的人可以给我一些提示:)
发布于 2017-05-01 11:48:52
在OO中,已知改变数据的函数被称为修饰符,那些已知只是返回不改变的东西的函数称为选择器。我不经常听到这些术语,不知怎么说,它们并不受欢迎。更受欢迎的是getter和setter。
因此您可以分别使用限定符、选择器和修饰符或getter和setter。
大多数人会把getter和setter与属性联系起来。这可能是选择另一个看似被遗忘的条款的理由。
如果您只对特定参数的可更改性感兴趣,那么只读可能是合适的。
发布于 2017-05-01 03:09:08
关于在方法名称上使用immutable或const的论点是不可信的。这是在C++和D做的,你的反对是什么?你为什么觉得它很丑?
您可以将它们放置在不同的位置,比如void const funcName()或const void funcName(),但是如果返回类型是const,则会遇到问题。就像您想要返回一个const对象一样,它可能会被声明为const ObjectType funcName(),所以这是没有好处的。
Swift和Haskell使用->作为返回类型,所以您可以使用类似的语法吗?您可以对返回一个const funcName -> Int的常量函数执行类似Int的操作。然后,您可以对一个常量函数执行const funcName :: argumentType -> Int,该函数接受argumentType的一个参数并返回一个int,或者类似的内容。
https://softwareengineering.stackexchange.com/questions/348113
复制相似问题