JavaOne 2012:Scala技巧

午餐后我参加的第一届会议是Venkat Subramaniam的“ Scala Tricks”,在希尔顿金门大桥3/4/5会议室区域举行。 这是我在JavaOne期间切换计划的会话的第一个会话。 昨晚我在查看日程安排时切换了它,并意识到,尽管对Lambda感到兴奋,但我还是觉得自己对我当时想要的Lambda很熟悉(这要归功于技术主题演讲和通往Lambda的道路),并且觉得参加“ Scala Tricks”比参加之前安排的“ Jump-Starting Lambda Programming”( 听起来很挤 )要受益更多。 尽管有些发言者希望最后提出问题和评论,但Subramaniam还是希望在出现问题时提出问题。

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功能之一,即它要求在编写签名时将方法参数指定为可变或不可变valvar )。 我喜欢在使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值