首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突变相反

突变相反
EN

Software Engineering用户
提问于 2017-04-30 21:44:35
回答 2查看 283关注 0票数 -1

我在找一个形容词;一个描述“变异”的相反的形容词。我想用它来标记函数、方法和方法参数(包括接收器)为“不被函数变异”,类似于D语言所做的。

Ds方法对于参数非常有效:

代码语言:javascript
复制
class X {
    void foo(const int x, immutable char[] y) {
        // x is readonly
        // y is readonly and can be trusted not to change
    }
}

但是,当在函数/方法本身上使用immutableconst来表示该函数不修改接收对象时,它们看起来都很难看:

代码语言:javascript
复制
// 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中上述关键字具有相同语义的关键字;但是作为一个形容词,要在函数名称之前编写:

代码语言:javascript
复制
class X {
    private x: int
    non-mutating foo() {
        // x is readonly
    }
}

使用immutable读取的方法将是不可变的(例如在Java中是最终的,在C#/C++中是非虚拟的)。在括号结束参数列表后,我不能使用关键字,因为返回类型应该放在那里:

代码语言:javascript
复制
fun x() -> Int

我不完全确定这是否是问这个问题的正确地方。但是,由于我没有找到一个programming language design SE,我认为在这个社区中了解许多编程语言的人可以给我一些提示:)

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2017-05-01 11:48:52

在OO中,已知改变数据的函数被称为修饰符,那些已知只是返回不改变的东西的函数称为选择器。我不经常听到这些术语,不知怎么说,它们并不受欢迎。更受欢迎的是getter和setter。

因此您可以分别使用限定符、选择器和修饰符或getter和setter。

大多数人会把getter和setter与属性联系起来。这可能是选择另一个看似被遗忘的条款的理由。

如果您只对特定参数的可更改性感兴趣,那么只读可能是合适的。

票数 3
EN

Software Engineering用户

发布于 2017-05-01 03:09:08

关于在方法名称上使用immutableconst的论点是不可信的。这是在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,或者类似的内容。

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

https://softwareengineering.stackexchange.com/questions/348113

复制
相关文章

相似问题

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