当前位置: 首页 > 科技观察

三分钟带你探索各种JVM语言

时间:2023-03-11 22:45:56 科技观察

【.com速译】无论你最熟悉的是Java、Scala还是其他JVM语言,总会有更多的JVM语言涌现,具有各种相关特性。最重要的是,在某些语言中总是有一些好的“基本”元素,而在其他语言中很难找到。这就是我们将这篇包含Groovy、Scala、Clojure、Kotlin和Java的一些最佳特性的浓缩文章放在一起的原因。解释它们之间的区别,以帮助您在项目开发中合理选择它们。1.是否检查异常Java中最有争议的特性是CheckedExceptions,CheckedExceptions会在编译时强制执行,需要某种排序过程。这意味着我们需要在方法中捕获或声明它。虽然有些开发者更喜欢忽略CheckedExceptions,但这个特性确实可以强制大家去处理异常,提高代码质量。因此,虽然它的知名度不高或在一定程度上可以忽略,但必须承认,它对提高编码思路还是有帮助的。Kotlin、Clojure、Groovy和Scala不支持检查异常。2.非空即真的Elvis运算符这里之所以选择Elvis运算符作为讨论的对象,是因为它是一种非常方便的默认值处理方式,有助于降低重构时出错的风险。在它的帮助下,我们可以轻松实现NullSafety,而无需重复表达式来进行条件和主动返回值测试。二元运算符elvis如果为真则返回第一个操作数,否则返回第二个操作数。Elvis运算符是三元运算符(在Java中也可用)的简化版本,它本身是用于为变量赋值的if/else分支表达式的简化版本。这是一个示例Groovy代码://三元运算符-在JavadefternaryOutput=(sampleText!=null)上工作相同?sampleText:'你好Groovy!'//猫王运算符在行动。我们必须阅读:'如果sampleText不为空,则将sampleText分配给elvisOuput,否则分配'VivaLasVegas!'到elvisOutput.defelvisOutput=sampleText?:'VivaLasVegas!'Kotlin也使用Elvis运算符来实现空引用中的空安全,但必须使用“?”.如果此运算符左侧的表达式不为空,Elvis将返回它。否则,它返回运算符右侧的表达式。整个过程可以简单翻译成下面一行:vall=b?.length?:-1Java没有提供Elvis运算符,但是它以类似的方式实现了NullSafety,所以在处理null时需要有所准备输入。您可以使用Optional作为可选解决方案,它可以包含一个对象,该对象可能包含也可能不包含非空值。因此,如果值确实存在,isPresent()将返回true,而get()将返回该值。同样,Scala使用类似的Optional[T]来达到同样的效果。它可以容纳0个或1个特定类型的元素。如果缺少某个值,您将收到值为None的Some[T]。3.类似于弱类型语言的类型推断机制Kotlin和Scala都引入了类型推断机制,允许我们定义变量而不需要指定类型,比如整数、字符串、浮点类型等等。由语言本身在运行时确定变量的类型。下面是基于Scala和Kotlin定义变量的例子。varrandomVar=6;valrandomVal="WhatshouldIwritehere?";valbox=Box(1)//1的类型为Int,所以编译器认为我们在谈论Box因为类型推断机制给我们带来了很多好处,比如不用背和写很多繁琐的字符,所以Oracle意识到了这一点,开始向技术社区征求意向调查来实现局部变量推断,这表明在未来,Java将有机会引入这种机制。4、Java即将推出省时的REPLCLojure、Groovy、Kotlin、Scala都有一个省时的命令行工具Read-Eval-Print-Loop(简称REPL)。这个工具允许语句直接运行而不用打包成类或方法,如果我们需要即时反馈,这显然更容易做到。好消息是Java9即将引入longtools包,而REPL是其中的一部分。这个工具将使我们能够评估语句、语句和表达式,也能够持续读取用户输入,评估输入内容并在JShell中显示输入值或输入引起的状态变化的描述,从而快速完成代码原型制作。总而言之,每种JVM语言都有其独特的优势,这就是我们喜爱它们的原因。而说到技术社区??最大的愿望,人们显然希望能够将一些Scala特性带入Java。原文链接:https://dzone.com/articles/java-wish-list-the-top-differences-between-java-sc原文标题:TheTopDifferencesBetweenJava,Scala,Groovy,Clojure,andKotlin原作者:HennIdan审稿人:WingsofMemories译者:Nuka-Cola