【问题标题】:Scala code style and conventions [closed]Scala代码风格和约定[关闭]
【发布时间】:2015-04-30 08:38:30
【问题描述】:

我熟悉“Scala coding styles and conventions?

我还阅读了this article,其中指出程序员每天只能生成这么多行代码,因此具有“更好”语法的语言只能在这个方向上有所帮助。

由于世界上没有完美的事物,Scala 的语法有其缺点(当然有人可以将这些视为纯粹的优点)。我说的是这样的东西:

def someMethod(someParameter: Int): Boolean = {

    // import here in the middle of nowhere
    import com.example.bad.VeryBad._

    // semicolon here? maybe?
    val two = 1+1;

    // nested function here
    def boo(a: Int) = a+1;

    // now do something useful
    println(boo(two))

    // for God's sake don't use return!!!
    two == 2
}

如果一个人有 Java 背景(甚至是 C++、C# 等),那么在函数中间有 import 语句、有嵌套函数并且我什至不会进入其他语言结构是有点奇怪的。

我对 Scala 带来的真正生产力提升持怀疑态度。你如何体验这一点?您是否应用了所有(尽可能多的)编码约定,这是真正的好处吗?有没有更好的方法来围绕这种代码风格?

附:也许这整个帖子可以转移到程序员或类似的...

【问题讨论】:

  • 你可以看看scalariform

标签: java scala coding-style


【解决方案1】:

我只能分享我的经验,我不知道其他人的经验是否相似。这当然取决于个人喜好。

以块为单位导入

我是从 Java 来到 Scala 的,所以我通常倾向于将所有导入都放在文件的顶部。这使我更容易更快地查看文件的依赖关系。但是,有时我会在我只想在本地导入名称而不污染整个文件的命名空间的地方使用本地导入。

分号

在 Scala 学习了几周后,我真的很喜欢没有强制分号的情况。在 Scala 中,它们大多不是必需的,但是当您想在一行上编写更多简短的语句时,它们会很有帮助。 Scala 实际上改变了我对分号的态度,现在在新项目中我甚至在 JavaScript 中也不使用分号。

嵌套函数

这是 Scala 的最佳特性之一:函数式编程。它允许编写更简单的代码,其中包含处理不可变数据的易于理解的小函数。这降低了代码的复杂性,减少了错误并提高了生产力。

退货

再一次,没有返回语句感觉很自然。该函数返回其表达式的值,其中一系列语句/表达式的值是其中的最后一个。 Return 语句在 Scala 中感觉非常不自然。

生产力

Scala 有一个学习曲线,当然,当我开始工作时,由于我不熟悉该语言和标准库,我的工作效率有所下降。现在,经过几个月的 Java 和 Scala 工作,我可以说我在 Scala 中的工作效率比在 Java 中更高。尽管我认为自己是 Java 专家,但只是 Scala 新手。

【讨论】:

  • 未来几年,每个 scala 开发人员都将被贴上“高级 scala 开发人员”的标签,所以要抓住机会 ;)。
【解决方案2】:

我会一步一步来,虽然有些观点可能会受到个人意见的影响:

  • 进口: 在某些情况下这非常有用,例如在常量的情况下缩短代码:

    object Constants { val someConstant = "123" }
    
    def someMethod(someParameter: Int): Boolean = {
      import Constants._
      doSomething(someConstant)
    }
    

    这也为读者提供了someConstant来自哪里的提示,将它放在顶部声明中可能不那么明确。

  • 分号:没有人在 scala 中使用它们,我想到的唯一有用的应用是如果您想在一行中编写多个语句

    val a = 1; val b= 2
    

    最终没那么有用。

  • 嵌套方法:这些都很好,无论您是否应该使用它,都可以根据您的用例而有所不同,还有很多使用嵌套方法的递归或尾递归函数示例。

    李>
  • 没有必要使用 return,在我的经验中我从未见过它使用它,而且在某些情况下它可能会很混乱。

【讨论】:

  • for loop with () 需要;对于许多语句,即使每个语句都写在新行上
【解决方案3】:

在许多情况下使用此类导入进行隐式很有用。

对于这种用法,导入使代码更安全、更易读。

第二种情况是类名和包名不明确(可以通过别名解决)。明确显示正在使用的是哪一个可能会有所帮助。

在 Scala 中,您可以通过多种方式做很多事情,有点像使用 C++。您对自己的编码风格负有更多责任。观看此视频:https://www.youtube.com/watch?v=kkTFx3-duc8&feature=share

嵌套方法非常适合重复使用,并且即使在类级别也不应将此类方法用作私有方法。通过嵌套,您还可以减少传递参数的数量。

如果可以的话,您应该将嵌套方法放在方法主体的顶部。在大班上向 cmets 提供构造函数主体的位置也很有帮助。

Scala 为社区提供了开发语言的能力,由于我们的实验和良好实践,Scala 可以从根本上改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多