内容简介:三分钟带你遨游各种JVM语言
【51CTO.com快译】无论您最熟悉的 Java 、Scala还是其它JVM语言,总会有更多JVM语言不断出现并伴随着各种相关特性。最重要的是,总有一些来自某些语言的、优秀的“基本”元素在其它语言中难觅其踪。
正因为如此,我们整理出了这样一篇精简的囊括Groovy、Scala、Clojure、Kotlin以及Java的部分最佳特性的文章。阐述了它们的区别,以帮助你在项目研发里面合理的选择他们。
1.是否检查异常情况
Java中最具争议的特性当属Checked Exceptions,Checked Exceptions会在编译时强制执行,同时需要进行某种 排序 处理。这意味着我们需要在方法中对其进行捕捉或者声明。虽然部分开发者更倾向于忽略Checked Exceptions,但这一特性确实能够强制要求大家处理例外情况并借此改善代码质量。因此,虽然其人气不高甚至在一定程度上可以忽略,但必须承认其对于提升编码思路还是有所助益的。
Kotlin、Clojure、Groovy以及Scala都不支持Checked Exceptions。
2.非空即真的Elvis操作符
在这里之所以选择Elvis操作符作为讨论对象,是因为其是一种相当便捷的默认值处理方式,且有助于降低重构情况下的错误风险。在它的帮助下,我们无需复制表达式以进行条件与主动返回值测试,从而轻松实现Null Safety。
elvis这个二元运算操作符会返回第一个为true的操作数,否则则返回第二个操作数。Elvis操作符属于三元运算符的精简版(三元运算符同样可用于Java),后者本身又是用于将值分配至变量的if/else分支表达式的精简版。下面是Groovy代码示例:
// Ternary operator - works the same on Java
def ternaryOutput = (sampleText != null) ? sampleText : 'Hello Groovy!'
// The Elvis operator in action. We must read: 'If sampleText is not null assign
// sampleText to elvisOuput, otherwise assign 'Viva Las Vegas!' to elvisOutput.
def elvisOutput = sampleText ?: 'Viva Las Vegas!'
Kotlin同样使用Elvis操作符在null引用中实现null安全,但必须使用“?”。如果该操作符左侧的表达式非null,则Elvis会将其返回。否则,其返回该操作符右侧的表达式。整个过程可以简单翻译为以下行:
val l = b?.length ?: -1
Java并不提供Elvis操作符,但其利用类似的方式实现Null Safety,因此大家需要在处理null输入时做好准备。大家可以使用Optional<T>作为可选方案,其能够容纳一个可以或不可以包含非null值的对象。因此如果某个值切实存在,isPresent()将返回true而用get()将返回该值。
同样,Scala采用类似的Optional[T]实现相同效果。其能够容纳符合特定类型的0或1元素。如果某值缺失,大家会收到具有None值的Some[T]。
3.类似弱类型语言的类型推断机制
Kotlin和Scala都引入了一种类型推断机制,允许我们在定义变量的时候不需要指定类型,即整形、字符串、浮点型等等。而由语言本身在运行的时候去决定这个变量是什么类型,下面是基于Scala和Kotlin定义变量的实例。var randomVar = 6;
val randomVal = "What should I write here?";
val box = Box(1) // 1 has type Int, so the compiler figures out that we are talking about Box<Int>
因为类型推断机制给我们带来了很多优势,比如不用去记去写很多繁琐的字符,所以甲骨文意识到这点,并且开始向技术社区征求实现局部变量推断的意向调查,这说明在未来,Java将有机会引入这个机制。
4.Java即将引入节约时间成本的REPL
Clojure、Groovy、Kotlin以及Scala都具有一个节约时间成本的命令行工具Read-Eval-Print-Loop(简称REPL)。该 工具 允许在无需打包为类或者方法的前提下直接运行语句、如果我们需要立即获得反馈,那么这种方法显然更加简便易行。好消息是,Java 9即将引入longtools软件包,而REPL正是其中的组成部分,该工具将允许我们评估声明、语句及表达式,也能够在JShell持续读取用户输入内容、评估输入内容并显示输入值或者因输入造成的状态变更说明,进而快速完成代码原型设计。
总结
各类JVM语言都拥有自己的独到优势,这也是我们喜爱它们的原因。而在谈到技术社区最大的愿望时,人们显然希望能够将部分Scala特性引入Java当中。
原文链接: https://dzone.com/articles/java-wish-list-the-top-differences-between-java-sc
原文标题:The Top Differences Between Java, Scala, Groovy, Clojure, and Kotlin
原文作者:Henn Idan
文章审核人:回忆的翅膀 译者: 核子可乐
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 三分钟带你遨游各种JVM语言
- 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
- 计算机语言发展的三个阶段:机器语言、汇编语言与高级语言
- 凹 (“Wa”) 语言:可以嵌入 Go 语言环境的脚本语言
- Rust语言恰巧是一门解决了Go语言所有问题的语言
- 获取系统语言/当前 App支持语言
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Linear Optimization
Dimitris Bertsimas、John N. Tsitsiklis / Athena Scientific / 1997-02-01 / USD 89.00
"The true merit of this book, however, lies in its pedagogical qualities which are so impressive..." "Throughout the book, the authors make serious efforts to give geometric and intuitive explanations......一起来看看 《Introduction to Linear Optimization》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
RGB HSV 转换
RGB HSV 互转工具