调用对象方法时,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)

我想知道这两种风格之间哪个更好,它们是相同的,我们可以选择我们喜欢的任何东西。

我更喜欢样式 2,尤其是在对象名称如此短的情况下。如果你有一个更长的名字,你也可以添加一个替换,比如:$

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

如果我在控制之中,我通常会做另一种风格。也就是说,使用 trait s 而不是 object s。

class MyClass extends Load {
   val pAndRDf: DataFrame = loadPandR(sqdDate)
   ...
}

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

在Reddit上也有关于这个问题的讨论。

最好的主意是在可能的情况下使用选项 2。也修改了您的值名称(因为我个人认为它更具可读性(。

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

尽可能避免模棱两可的导入。它会使调试代码变得更加困难,增加意外导入两个Load对象的机会(如果您在某处执行另一个不明确的导入(,并且意味着您正在导入大量不需要的东西,这可能会导致膨胀。

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

我(个人(也会更改值名称。我们大多数人从左到右阅读,所以首先知道它是一个数据帧,然后知道它是什么值。

这是一个很小的更改,但可以帮助加快调试速度。特别是如果你以后有rddPAndR(例如(。

这真的取决于您的风格,但是,对我来说,如果您可以最大限度地减少"_"的使用,那就太好了。

我会这样使用:

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

编辑

最新更新