【发布时间】:2016-08-20 07:07:47
【问题描述】:
根据Scala guide,arity-0(无参数)的方法可以并且应该省略括号,如果:
所讨论的方法没有副作用(纯功能)
这是一个相当模棱两可的说法,不是吗?
我试图弄清楚一个带有 getter/select arity-0 方法的 DAO 是否应该有括号。
一方面应该这样做,因为访问数据库可能是一项代价高昂的操作,会对应用程序产生“性能副作用”。
另一方面,它不应该,因为 DAO 特征不知道实现,根据定义,它只是一个不会改变应用程序状态的 getter 方法。
你说什么?
【问题讨论】:
-
如果函数正在访问数据库,则有明显的副作用,因此
foo()语法更清晰,即使这主要是那里的代码样式问题。 -
我认为这个问题不需要征求意见。手头的问题是数据库调用是否纯粹是功能性的和/或它是否有副作用。答案显然是,它不是,它确实如此。这不是意见,而是客观事实的陈述。现在,这是否意味着该方法应该有括号确实是一个品味问题,但这似乎根本不是 OP 所要求的,因为该决定被推迟到 scala 指南。
-
计算中的副作用非常明确。参见en.wikipedia.org/wiki/Side_effect_(computer_science)
-
我看不出你从哪里得到“只写”的符号。它明确表示
Side effects are the most common way that a program interacts with the outside world (people, filesystems, other computers on networks)。 互动. -
程序员期望 properties(这是不带括号的 0 arity 方法)立即返回。我将“立即”定义为 50 毫秒或更短,这通常会排除数据库访问。
标签: scala coding-style conventions parentheses readability