groovy, Scala和kotlin区别
所谓Scala的目的是什么?事实上Scala作者Martin Odesky他在《Programming in Scala》中写到,Scala的目的是为了更好的融合OO与FP,确实,不是取代Java。而且打造一个更伟大的JVM语言。和干掉Java半点关系都没有。作者只是想搞一个可以伸缩的JVM语言。不过Scala确实在很多方面引领了JVM语言的潮流。同时强大的类型系统让Scala的表达能力和抽象能力比Java,Kotlin都强。这让Scala非常实现写类库和框架。如Spark和Akka。然而Scala为了伸缩性和表达能力牺牲了易用性,所以写应用Scala就太重了。比如把Scala用户分为应用程序开发人员和类库设计人员,然后在归纳出他们要掌握的东西。你就发现哪来写应用的话Scala的很多特性都用不上。这就是为什么有Kotlin。
Kotlin是想干掉Java。众所周知Scala用户里有Better Java派和Pure-FP派。Kotlin在很多地方就是学习了Scala的语法,比如说data class和类构造器的设计,在Scala中都可以找到类似的东西。同时有加了不少语法糖,比如getter和setter,委托的语法糖,解决了Java没有这方面语法的缺点。虽然说抽象能力和类型系统比Scala差很多。但是吸引了Better Java派的目光。毕竟Kotlin的目的就是在JVM上建立一个有C#的易用性,Scala的语法精简,Java的生态的语言,要是你觉得Java语法太垃圾干嘛不用呢?总体再说,Kotlin的目的就打造Better Java,打造新一代的JVM语言(这个新一代和Scala不一样,Scala是强调类型系统的改良和伸缩性。Kotlin是语法糖)。如上文所提到,Scala的高级特性比如类型投影,存在类型,高阶类型这些拿来开发应用基本没什么用。所以有了Kotlin,Kotlin的类型系统就是Java类型系统的延续。但是哪来开发类库Kotlin的抽象能力就不够用了。看看Arrow.kt就知道Kotlin实现各种代数上的抽象结构有多难。
而Pure-FP派的Scala用户因为是Scala类型系统的重度用户,没有高级的类型就写不出来了,所以就继续用Scala。
Groovy的目的就是为了开发一个JVM上的脚本语言。灵活性比Scala还强。Groov亮点就是写DSL很方便,比如Gradle的build script。Groovy的优缺点和其他脚本语言比如Ruby差不多。我觉得Groovy就是一个JVM上的Ruby++。和Ruby一样灵活,一样可以写DSL。但是Groovy能搞的Scala大部分都做的出来,搞DSL的话Scala也行,只是不那么方便。
Clojure就是JVM上的Lisp。解决的Java语法和Lisp差别太大的缺点。当然,Clojure还是很强的,有Marcos,而且比Scala的Marcos强,可以玩meta programming。所以拿Clojure造DSL比Groovy还方便。
总体来说,Scala解决的Java的类型系统不够强大,抽象能力不足的缺点。Kotlin解决Java语法糖不够多的缺点,Groovy解决了Java太死板的缺点,Clojure要解决和和Groovy差不多,只是靠Lisp化做得更彻底一点。
所以要是你要选语言,可以看这个
- 写脚本 => Groovy
- 元编程,玩 => Clojure
- Android,干各种Java适合干的事情(如后端) => Kotlin
- 开发类库,玩函数式编程,数据分析,一些微服务(如Akka)=> Scala
groovy, Scala和kotlin区别的更多相关文章
- [转载][Groovy] Groovy与Java的区别(一)
原文地址:[Groovy] Groovy与Java的区别(一)作者:langyizhao 因为Groovy可以用Java的所有功能(虽然JVM不同的时候可能会比较麻烦,比如在Android上),所以G ...
- Android Gradle脚本从Groovy迁移到Kotlin DSL
Android Gradle从Groovy迁移到Kotlin Android项目用Gradle构建, 其脚本语言之前是Groovy, 目前也提供了Kotlin的支持, 所以可以迁移到Kotlin. 官 ...
- Java & Groovy & Scala & Kotlin - 20.Switch 与模式匹配
Overview 本章主要介绍高级条件语句中的 switch 语句以及其增强版的模式匹配. Java 篇 Switch 特点 Java 中 switch 语句功能类似 if,但是 switch 主要用 ...
- gradle 混合编程java、scala、kotlin、groovy
众所周知,java是基于JVM的开发语言,但能够在JVM上运行的开发语言不仅仅有java,目前还有很热门的kotlin(kotlin不仅仅只能开发Android).scala.groovy等等.目前国 ...
- 转载:scala中:: , +:, :+, :::, ++的区别
原文链接:https://segmentfault.com/a/1190000005083578 初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. ...
- scala中:: , +:, :+, :::, +++的区别
4种操作符的区别和联系 一. :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表. 用法为 x::list,其中x为加入到 头部的元素,无论x是列表与否,它都只将成为新生成列 ...
- [转] scala中:: , +:, :+, :::, +++的区别
[From] https://segmentfault.com/a/1190000005083578 初学scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别 ...
- 在scala中:: , +:, :+, :::, +++的区别总结
初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. 4种操作符的区别和联系 :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表. ...
- python 本地变量和全局变量 locals() globals() global nonlocal 闭包 以及和 scala 闭包的区别
最近看 scala ,看到了它的作用域,特此回顾一下python的变量作用域问题. A = 10 B = 100 print A #10 print globals() #{'A': 10, 'B': ...
- Java 之外,是 Scala 还是 Groovy?【转载】
原文地址 Scala 和 Groovy 都是基于 JVM 的语言,相比 Java,它们都有语法更加简明和表达能力更丰富.对于那些既想不脱离开 JVM 又想避免 Java 繁琐语句的开发人员来说,Sca ...
随机推荐
- openvas漏洞扫描:使用openvas时扫描漏洞时,报告中显示的数据与数据库数据不同
使用openvas设备进行漏洞扫描时,报告中的漏洞数量与readis数据库中查找到的漏洞数量不同 原因是,openvas的代码中默认在报告中显示的最小质量检测为70%.如图: 上图详细链接为:http ...
- 1vue模板语法
<body> <div id="app1"> <div>{{msg}}</div> </div> <script ...
- Mac Idea2018.1.6版 利用脚本激活安装详解
下载安装包:链接: https://pan.baidu.com/s/1W4alLXUeQ6xazkNEtB8I9w 提取码: w6rg 下载脚本:链接: https://pan.baidu.com/s ...
- Delphi 关于RichEdit URL 颜色相关总结
一.代码改变字体大小和颜色 1 procedure TForm1.Button1Click(Sender: TObject); 2 var 3 sNickName, sstr: string; 4 b ...
- 穿透式监管与CTP
https://blog.csdn.net/wowotuo/article/details/90454013 代码示例: https://tashaxing.blog.csdn.net/article ...
- [C#]接口Interface快速Demo
参考代码1: using System; namespace InterfaceDemo { /// <summary> /// 定义一个爬树接口 /// </summary> ...
- Docker安装一些软件
1.Docker开始远程访问 vim /lib/systemd/system/docker.service 在ExecStart的值最最后面追加:空格+-H tcp://0.0.0.0:2375 sy ...
- 基于5G边缘网关的智慧公交站台应用
发展智能物联网,有利于提高城市运行效率,优化居民生活体验,促进城市迸发活力.智能物联网已经融合进生活的方方面面,例如最常见.分布最广泛的公交站台,也能够通过物联网实现升级换代,为居民提供更丰富.更便捷 ...
- EVE如何提升名望值
目录 背景介绍 简介 名望值划分 军团名望值 利弊 背景介绍 玩eve将近3个星期,开着毒蜥级刷1级代理人任务感觉没有一点难度,想尽快刷3.4级代理任务,而我目前能够接到的最高代理任务也就才1级. ...
- [Unity基础]碰撞和触发
参考链接: https://www.cnblogs.com/hont/p/4472326.html 碰撞关系表: https://docs.unity3d.com/Manual/CollidersOv ...