1
9
很简单:Java程序员倾向于编写 imperative style code ,而更类似Scala的方法则需要 functional style 。
|
2
8
一个明显的问题是不要利用scala允许的嵌套范围,加上副作用的延迟(或者意识到scala中的一切都是一个表达式):
可以转换为:
但这方面可以改进很多。可能是:
后一个示例不会“导出”超出所需范围的任何变量。事实上,它没有声明任何变量 完全 。这意味着以后更容易重构。当然,这种方法 做 导致类文件极度膨胀! |
3
7
我最喜欢的几个:
|
4
3
一个常见的错误是,一旦你“摸索”了Java中不存在的功能,就会变得疯狂并过度使用它。例如,新手倾向于过度使用模式匹配(*)、显式递归、隐式转换、(伪)运算符重载等。另一个错误是滥用Java中表面上相似的功能(但不是),比如用于理解甚至
(*)Option上有一个很好的模式匹配备忘单: http://blog.tmorris.net/scalaoption-cheat-sheet/ |
5
1
到目前为止,我还没有采用懒惰的vals和streams。 一开始,一个常见的错误(编译器发现)是忘记了for中的分号:
以及收益率的位置:
而不是
忘记了方法的等号:
|
6
1
使用if语句。您通常可以重构代码以使用if表达式或使用filter。 使用过多的vars而不是vals。 不要像其他人所说的那样使用循环,而是使用列表理解函数,如map、filter、foldLeft等。如果没有可用的函数(仔细看,应该有可以使用的函数),请使用尾部递归。 我保留了函数式编程的精神,并使我的对象不可变,而不是setter。因此,我做了这样的操作,返回一个新对象:
我尽量使用列表。此外,要生成列表,请使用for/yield表达式,而不是使用循环。 |
7
1
使用数组。 这是基本的东西,很容易被发现和修复,但当它咬到你的屁股时,最初会让你慢下来。 Scala有一个Array对象,而在Java中这是一个内置的工件。这意味着在Scala中初始化和访问数组元素实际上是方法调用:
|
Racine Pilote · Laravel回滚特定数据库 6 年前 |
Arti · Django rerun迁移操作 6 年前 |
Black-Prince · 用于迁移两个不同数据库上的两个表的脚本 6 年前 |
Tutu Kaeen · 在Laravel中回滚模块迁移? 6 年前 |
ProgLover · 如何修改迁移并在不丢失数据的情况下进行迁移? 6 年前 |
Askold Ilvento · 在Eigen中应用逆换位 6 年前 |