具有单独 get/set 宣传的语言
Language with separate get/set publicity
我一直在写一个个人项目,并且不断遇到字段需要公开可读但不应公开写入的情况。据我所知,在这些情况下接受的 "good practice" 是将字段设为私有,编写一个香草吸气剂,然后就这样了。
您似乎可以通过允许程序员为 read/write 访问设置单独的公开级别来节省 getter 的开销(在执行和开发人员时间方面),就像 UNIX 文件权限一样。
是否有任何语言可以做到这一点?
UNIX 文件系统权限和 class' 实例变量可见性(public、受保护、私有、全局等)之间存在一些差异。前者是一个ACL which defines a list of permissions attached to an object, and the latter defines how much the rest of the system can access the variable.
总之,先把那个让开...
Ruby 通过定义处理此问题:
所以如果我有一个 Blog
class 看起来像:
class Blog
attr_accessor :title
end
attr_accessor :title
被翻译成一个'getter'和一个'setter',像这样:
def title=(value)
@title = value
end
def title
@title
end
相反,如果我在同一个 class 中定义 attr_reader :title
,它会被翻译成 'getter':
def title
@title
end
而 attr_writer :title
被翻译成 'setter':
def title=(value)
@title = value
end
在 C# 中,您可以使用 auto-implemented property:
public int Foo { get; private set; }
这节省了编写单独 getter 方法的大部分复杂性。并且这样的 getter 的执行时间开销应该是 none(由于内联)或者非常小。
我一直在写一个个人项目,并且不断遇到字段需要公开可读但不应公开写入的情况。据我所知,在这些情况下接受的 "good practice" 是将字段设为私有,编写一个香草吸气剂,然后就这样了。
您似乎可以通过允许程序员为 read/write 访问设置单独的公开级别来节省 getter 的开销(在执行和开发人员时间方面),就像 UNIX 文件权限一样。
是否有任何语言可以做到这一点?
UNIX 文件系统权限和 class' 实例变量可见性(public、受保护、私有、全局等)之间存在一些差异。前者是一个ACL which defines a list of permissions attached to an object, and the latter defines how much the rest of the system can access the variable.
总之,先把那个让开...
Ruby 通过定义处理此问题:
所以如果我有一个 Blog
class 看起来像:
class Blog
attr_accessor :title
end
attr_accessor :title
被翻译成一个'getter'和一个'setter',像这样:
def title=(value)
@title = value
end
def title
@title
end
相反,如果我在同一个 class 中定义 attr_reader :title
,它会被翻译成 'getter':
def title
@title
end
而 attr_writer :title
被翻译成 'setter':
def title=(value)
@title = value
end
在 C# 中,您可以使用 auto-implemented property:
public int Foo { get; private set; }
这节省了编写单独 getter 方法的大部分复杂性。并且这样的 getter 的执行时间开销应该是 none(由于内联)或者非常小。