调用对象的方法时,scala的良好代码风格是什么?

时间:2019-04-09 09:57:55

标签: scala

当从对象调用方法时,我不知道如何在scala项目的两种代码样式之间进行选择。

代码样式1

import com.socgen.bsc.sqd.per.Load._ 
val pAndRDf: DataFrame = loadPandR(sqdDate)

代码样式2

import com.socgen.bsc.sqd.per.Load
val pAndRDf: DataFrame = Load.loadPandR(sqdDate)

我想知道哪一种更好,或者在这两种样式之间,它们是相同的,我们可以选择自己喜欢的任何东西。

3 个答案:

答案 0 :(得分:1)

我更喜欢 style 2 ,尤其是在对象名称如此短的情况下。如果您的名字较长,也可以添加一个替代名称,例如:$

import com.socgen.bsc.sqd.per.{LongComplexLoad => LCL}
val pAndRDf: DataFrame = LCL.loadPandR(sqdDate)

如果我能控制一切,我通常会采用另一种风格。那就是使用trait而不是object

class MyClass extends Load {

   val pAndRDf: DataFrame = loadPandR(sqdDate)
   ...
}

这样做的好处是,您可以在类说明中看到使用的内容。如果列表过长,则表明您可能会考虑关注点分离

Reddit

上也对此进行了讨论

答案 1 :(得分:0)

这实际上取决于您的样式,但是,对我来说,如果您能尽量减少使用“ _”,那就太好了。

我会这样使用:

import com.socgen.bsc.sqd.per.Load.loadPandR
val pAndRDf: DataFrame = loadPandR(sqdDate)

已编辑

答案 2 :(得分:0)

最好的方法是尽可能选择选项2。也修改了您的值名称(因为我个人认为更易读)。

import com.socgen.bsc.sqd.per.Load
val dfPAndR: DataFrame = Load.loadPandR(sqdDate)

在可能的情况下避免模棱两可的进口。这可能会使调试代码变得更加困难,增加了意外导入两个Load对象的机会(如果您在某处进行了另一个含糊的导入),并且意味着您要导入很多不需要的东西,可能会导致肿胀。

如果您需要导入多个内容,请坚持使用大括号import com.org.package.{Load, Write}

我(个人)也要更改值名称。我们大多数人从左到右阅读,因此知道您首先知道它是一个数据框,然后知道它的值。

这是一个很小的变化,但可以帮助加快调试速度。尤其是如果以后有rddPAndR(例如)。