javaone
Subramaniam首先简要介绍了Scala编程语言的基础知识。 他通过展示类似Groovy / Ruby的示例1.toString()
,展示了Scala中的所有对象。 他说,您可以在使用Java的任何地方使用Scala,并且期望代码比用Java编写的代码少40%到60%。 他补充说,就像Groovy一样,您可以将Scala和Java混合使用。 他喜欢Scala的简洁性和表现力。
本演示文稿中使用的方法不一定是要提供有关Scala基础知识的教程,而是要通过示例来介绍Scala。 在许多方面,这就像是“食谱”或“食谱”的演示文稿。
Subramaniam的第一个实际示例是读取文件(他很早就使用Java的一个丑陋之处!): val stuff = Source.fromFile('sample.scala').mkString()
[有关toString()
和之间的区别,请参val stuff = Source.fromFile('sample.scala').mkString()
StackOverflow线程 。 mkString()
]没有异常处理的迹象。 与Groovy一样,Scala不会强制捕获或重新抛出/声明已检查的异常。 删除异常处理可使代码更加简洁。
Subramaniam表示:“我真正喜欢Scala的一件事是没有仪式要处理。” 他将“仪式”描述为您必须要做的事情。 他指出,向他人教Java的人们被提醒学习Java会有多么困难,因为学习仪式的方面很多。
Subramaniam显示的下一个示例是从一个方法返回多个值。 在这种情况下,他想返回两个名称:“詹姆斯”和“邦德”。 他展示了一个不变的元组的创建:
def createAgent() =
{
('James', 'Bond')
}
他展示了如何访问上述元组。
val agent = createAgent()
println(agent._1 + ' ' + agent._2)
Subramaniam展示了他尝试访问上面代码中的agent._3
时发生的情况:由于没有三个字段,因此导致了编译时错误。 这是将运行时错误移至编译时错误的示例。
我也喜欢Subramaniam重点关注的Scala功能之一,即它要求在编写签名时将方法参数指定为可变或不可变 ( val
或var
)。 我喜欢在使用Pascal进行编程和编程时清楚地清除var
修饰符,很高兴看到这种区别。
Subramaniam涵盖了一个“非常方便的功能”,它位于“非常酷”和“非常可怕”之间的边界: implicit
关键字。 当然,很难知道隐式关键字何时启动,尤其是当它来自导入时。 Subramaniam开玩笑说,它的使用有助于改善“工作安全性”。
另一个示例基于在Scala中实现阶乘方法。 几乎总是如此,阶乘是通过递归实现的。 Subramaniam强制其重复执行足够的时间,以导致StackOverflowError 。 他引用了《计算机程序的结构和解释》 ,然后谈到了如何在Scala中编写代码,使其看起来像是递归的,但是Scala编译器会将其优化为一个过程循环。 @ scala.annotation.tailrec批注可用于强制执行尾递归 ,从而可以进行编译时间优化。 这很漂亮,但也提醒我们不要仅仅因为很酷就使用递归。
Subramaniam表示,“ Scala表示应以应有的尊重来对待XML”,而不是将XML内容强加为字符串。 然后,他展示了将变量直接分配给XML元素而不带引号的代码。 他展示了如何在直接分配给XML的变量周围使用花括号来访问该XML元素的主体。 他说Scala的XML支持还有很多。
Subramaniam在致开幕词时说,“应将产生XML的代码提供给在狱中的人”,以介绍Scala对XML生成的支持。 他展示了如何将Scala代码嵌入已定义XML的花括号内。 这使他能够定义一个函数,该函数将使用Scala技巧来轻松地基于基础数据图构建XML。 令人印象深刻!
特质可能是Scala中最有说服力的方面之一,Subramaniam在他的演讲中谈到了这些特质 。 他指出,多重继承的问题之一是C ++的实现。 他讨论了方法污染,并展示了with
关键字以及extends
关键字和trait
关键字的使用如何支持特性。
Subramaniam展示了在需要时(当实例与通用类不同时)如何将特征应用于单个实例而不是通用类。 他在这里的例子是,狗是朋友,因此需要在班级上使用该特征,而大多数猫都不是朋友,因此他用朋友特征为该猫的个体实例建模,而不是将油炸特征应用于Cat类。
Subramaniam表示他不会允许任何尚未读过“ 有效Java”的Java使用者。 他说,已经对Java进行了修复,以符合有效Java中描述的方法,并且有效Java中描述的版本称为Scala 。
Subramaniam很好地完成了我在演讲中看到的最具挑战性的事情之一。 大多数转向IDE的扬声器会很快失去听众,因为他们迷失了自己的代码并开始与显示器对话。 但是,Subramaniam很好地做到了将代码样本保持较小并以大字体显示它们。 这样可以轻松地将重点放在重要的事情上。 他是我见过的少数几个容易留神的代码演示之一。 唯一的缺点是这些示例不在幻灯片中,但他表示可以下载。
这是我希望的一切。 我变得非常有动力再次与Scala一起玩,并学到了一些不错的主意。 Subramaniam是一位熟练而又实践经验丰富的演讲者,并在教育他们的同时娱乐听众,这并没有什么坏处。 即使是在JavaOne 2012上,一些演讲者也需要听众付出额外的努力才能保持专注,但事实并非如此。
参考: JavaOne 2012: JCG合作伙伴 Dustin Marx在Inspired by Actual Events博客上的Scala技巧 。
翻译自: https://www.javacodegeeks.com/2012/10/javaone-2012-scala-tricks.html
javaone