阅读更多

1顶
0踩

编程语言

转载新闻 三分钟带你遨游各种JVM语言

2017-01-22 16:07 by 副主编 jihong10102006 评论(0) 有9419人浏览
无论您最熟悉的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。

lvis这个二元运算操作符会返回第一个为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当中。

原文:Dzone.com
  • 大小: 118.7 KB
  • 大小: 97.3 KB
  • 大小: 109.6 KB
来自: 51CTO
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 一款基于JVM的脚本语言代码.zip

    一款基于JVM的脚本语言代码.zip一款基于JVM的脚本语言代码.zip一款基于JVM的脚本语言代码.zip一款基于JVM的脚本语言代码.zip一款基于JVM的脚本语言代码.zip一款基于JVM的脚本语言代码.zip一款基于JVM的脚本语言代码....

  • 一文带你读懂Java语言和JVM的发展历程

    大家好,我是笔者无为,今天给大家分享一下Java和JVM的发展历程,如果你觉得我写的不错的话,请在文末给我点个大大的赞,谢谢~ 本文约2000字,阅读大约需要8分钟 文章目录如何理解Java是跨平台的语言如何理解JVM是...

  • 011-JVM-跨平台的语言和跨语言的平台

    我们经常听到这句话:跨平台的语言和跨语言的平台。 他到底是什么意思? 1. java是跨平台的语言 意思是说我们程序员写代码的时候只写一份,javac编译也只编译一次,但是可以在windows上运行,也可以把打好的包放到...

  • Carson带你学JVM:图文解析Java虚拟机内存结构

    前言 了解Java中的对象、变量等存放的内存区域十分重要 本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢 Carson带你学JVM系列文章,具体如下: Carson带你学JVM:这是一份全面 & 详细的JVM学习指南 ...

  • java开发 五大基于jvm的脚本语言_Java基础:五大基于JVM的脚本语言介绍

    【IT168技术】JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。能运行在Java的虚拟机JVM上的程序...

  • microbenchmarks:用 JVM 语言编写的各种代码段的基准测试

    微基准 用 JVM 语言编写的各种代码段的基准测试

  • Java语言规范和JVM虚拟机规范.zip

    Java语言规范和JVM虚拟机规范.zip,Oracle官方文档,包括Java语法的定义等内容。Java语言规范包含JDK678三个版本,JVM虚拟机规范包含78两个版本。

  • 三分钟看懂JDK、JRE和JVM的区别和联系

    字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。 JVM 并不是只有一种!只要满足 JVM 规范,每个公司、组织或者个人都可以开发自己的专属 JVM。 也就是说我们平时接触到的 HotSpot ...

  • jvm-services:Java(JVM)语言和生态系统

    jvm-services:Java(JVM)语言和生态系统

  • 从 0 开始带你成为JVM实战高手

    《从0开始带你成为JVM实战高手》全套资源 链接:https://pan.baidu.com/s/1w9XuhVcF1bS8A7gKROo4sQ 密码:23md 解压密码:www.pplsunny.top 链接:...

  • 史上最全JVM整体架构和调优参数说明,带你彻底理解JVM整体架构与调优技巧

    史上最全JVM整体架构和调优参数说明,冰河带你彻底理解JVM整体架构与调优技巧,强烈建议收藏!!

  • 一篇文章掌握整个JVM,JVM超详细解析!!!

    JVM先想想一些问题1 我们开发人员编写的Java代码是怎么让电脑认识的2 为什么说java是跨平台语言3 Jdk和Jre和JVM的区别4 为什么要学习JVM深入学习JVM1 JVM运行时数据区2 解析JVM运行时数据区2.1 方法区(Method Area...

  • jvm瓶颈定位 java jvm 学习

    jvm瓶颈定位 java jvm 学习

  • go语言编写jvm虚拟机

    使用go语言编写的简单的jvm虚拟机,使用go语言编写的简单的jvm虚拟机

  • 一步步带你详解JVM性能调优

    性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标、...

  • JDK自带JVM分析工具

    JVM工具

  • Carson带你学JVM:这是一份全面 & 详细的JVM学习指南

    该如何学习Java虚拟机(JVM)内容?今天Carson给你们奉上一份全面 &amp; 详细的JVM学习指南。 学习内容 Java虚拟机的内存结构 Java对象:创建-存储-访问过程 Java对象:如何判断存活原则(引用计数法 &amp; 引用链...

  • jvm调优

    一、jvm内存调优 主要的目的是减小GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC由于须要对整个堆进行回收,因此比较慢,所以应该尽量减小Full GC的次数。数组 2....

  • 从零开始带你成为JVM实战高手

    工作这么多年了,你还在CRUD吗?对于JVM还是一知半解,甚至知道它的存在,但是不了解它吗? 来吧,跟我一块加入狸猫技术窝,阿里资深技术专家带队,吃透JVM,成为JVM实战的高手吧! 扫描可看详细目录。。。 .....

  • 不来了解下JVM支持的语言有哪些?

    前言 与上文我们知道,JVM作为一个...目前,可以直接在JVM上运行的语言除了Java之外有很多,本文主要介绍九种。正如平时我们了解一个语言时通常会先学这个语言里最经典的一句话——【我爱你】。本文将每种语言通过...

Global site tag (gtag.js) - Google Analytics