如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
hansonwang99
V2EX  ›  推广

Groovy 初体验:构建高性能 JVM 应用

  •  
  •   hansonwang99 · Mar 22, 2018 · 5865 views
    This topic created in 3153 days ago, the information mentioned may be changed or developed.

    VAIO 王者归来


    为什么要学 Groovy

    Groovy 运行于 JVM 之上,然而其对动态语言、函数式编程范式以及元编程功能的加持所带来的表现力和简洁性可以说甩了 Java 几条街。我们可以利用 Groovy 的所有动态功能构建高性能的 JVM 应用、将开发效率提高几个数量级! 再比如说我们用的 CI 系统 Jenkins,其 Pipeline 的编排 Jenkinsfile 文件就是用 Groovy 来书写,除此之外还有很多应用 Groovy 的地方。这就是我们为什么要学它!


    Groovy 环境部署

    本文实验所用 OS 为 CentOS7,这里介绍使用 sdk 工具来安装 Groovy 的方法。

    • 首先在命令行下执行:

    curl -s get.sdkman.io | bash

    炫酷得一腿!

    • 接下来执行:

    source "$HOME/.sdkman/bin/sdkman-init.sh"

    • 然后我们就可以使用 sdk 工具来安装 Groovy:

    一句话搞定!

    sdk install groovy

    sdk install

    • 完成之后我们来检查 Groovy 安装状态

    groovy -v

    一切就绪

    image.png


    Hello World From Groovy

    [root@localhost ~]# vim Hello.groovy
    [root@localhost ~]# more Hello.groovy 
    println "Hello World From Groovy !"
    [root@localhost ~]# groovy Hello
    Hello World From Groovy !
    

    Groovy 语言特性

    • Groovy 是轻量级的 Java
    • Groovy 的信噪比比 Java 高:较少的代码获得更多结果
    • GDK = Groovy JDK:通过向 JDK 的各种类中添加便捷方法,Groovy 扩展了 JDK 形成了 GDK 库
    • return 语句可选,分号结尾可选
    • 方法和类默认 public
    • 导航操作符可帮助实现对象引用不为空时方法才会被调用
    • Groovy 不强迫捕获自己不关心的异常,没捕获的异常自动传到高层
    • 静态方法内可使用 this 来引用 Class 对象,因此可以链式调用!

    两大优点:表现力 + 简洁!!!


    从 Java 到 Groovy

    用 Java 写一段代码如下:

    public class Greetingss {
    
      public static void main( String[] args ) {
        for( int i=0; i<3; i++ ) {
          System.out.println("ho ");
        }
        System.out.println("Merry Groovy");
      }
    }
    

    用 Groovy 重构一遍如下:

    for(i in 0..2) {
      print 'ho '
    }
    print 'Merry Groovy'
    

    看看两种语言的信噪比对比,真是给人不可估量的感动!

    安全导航操作符 ?.

    可以避免代码中的大量 null 引用的判断

    def foo( str ) {
      str?.reverse()  // 仅当 str 不为 null 时 reverse 才会执行
    }
    

    这可以帮我们省多少个if啊!!!


    异常处理

    与 Java 相比,Groovy 的异常处理少了很多繁文缛节

    对于那些不想处理或者不适合在代码当前层次处理的异常,Groovy 对用户不做任何要求,任何用户未处理的异常会自动传递到高一层,我们啥也不用写:

    def openfile( fileName ) {  // 无需 throws
      new FileInputStream( fileName ) // 无需 try...catch... 处理
    }
    

    异常可以放到其调用代码中处理:

    try {
      openFile("nonexistfile")
    } catch( FileNotFoundException ex ) {
      print "Oops: " + ex
    }
    

    若捕获所有异常( Exception ),则上面 catch 中异常的类型都可省略:

    try {
      openFile("nonexistfile")
    } catch( ex ) {  // 省略类型表示可捕获所有异常
      print "Oops: " + ex
    }
    

    链式调用

    静态方法内可使用 this 来引用 Class 对象,因此可以链式调用

    class Wizard {
      def static learn( trick, action ) {
        //...
        this
      }
    }
    
    Wizard.learn('xxxx', {...})
      .learn('yyyy', {...})
      .learn('zzzz', {...})
    

    后记

    作者更多的原创文章在此

    20 replies  •  2018-11-02 13:06:46 +08:00
    whileFalse
    whileFalse
    Mar 22, 2018
    1
    Java 就是废话太多。然而这保证了静态检查的完备。
    sujin190
    sujin190
    Mar 22, 2018
    2
    @whileFalse #1 然而很多情况并不需要如此完备的静态检查
    stanjia
    stanjia
    Mar 22, 2018❤️2
    3
    动态一时爽,重构火葬场。
    daiqiangbudainiu
    daiqiangbudainiu
    Mar 22, 2018
    4
    感觉和 Python 一样很适合测试人员啊
    HuHui
    HuHui
    Mar 22, 2018
    5
    "构建高性能 JVM 应用"
    ???
    closedevice
    closedevice
    Mar 22, 2018
    6
    得了吧,之前写了半年多 groovy 后才知道没啥卵用,语法上的简洁早期开发有所收益,但后期维护的代价超过早期收益.
    des
    des
    Mar 22, 2018 via Android
    7
    看到 curl xx | bash 就觉得心大,连个 https 都不加的
    meowu
    meowu
    Mar 22, 2018 via Android
    8
    那缺点是什么呢?只有优点?
    glues
    glues
    Mar 22, 2018❤️1
    9
    不写测试的,无论动态静态,都是火葬场
    miao1007
    miao1007
    Mar 22, 2018 via Android
    10
    性能问题
    sorra
    sorra
    Mar 22, 2018
    11
    你也在网上冲浪啊!
    somebody
    somebody
    Mar 22, 2018
    12
    动态一时爽,重构火葬场。去年用 Groovy 写了个 Android 用的 Gradle 插件,20 个 Groovy 文件,1000 行代码。
    很酸爽,重构函数名,调用的地方就是不像 Java 一样报错,眼睁睁瞅着调用的地方没跟着变。

    Kotlin 了解一下
    justinwu
    justinwu
    Mar 22, 2018 via iPhone
    13
    感觉没 kotlin 有前景,android 开发上 Google 把 kotlin 纳入正房,对 kotin 影响非常深远,

    google android 开发官方推特上现在天天发 kotlin 的奇技淫巧。
    RubyJack
    RubyJack
    Mar 22, 2018
    14
    动不动就高性能,高并发什么的,歪风邪气也不知道谁带起来的
    mritd
    mritd
    Mar 22, 2018
    15
    "构建高性能 JVM 应用"
    ???
    mritd
    mritd
    Mar 22, 2018
    16
    我还以为给我讲 JVM 优化的...开心的一比
    huclengyue
    huclengyue
    Mar 22, 2018 via Android
    17
    kotlin 了解一下
    kaneg
    kaneg
    Mar 22, 2018 via iPhone
    18
    上 kotlin 吧,现在选择 grovvy 有点 49 年参加国民党的感觉
    notreami
    notreami
    Mar 23, 2018
    19
    @kaneg 上 java10 吧,现在选择 kotlin 有点 18 年提八荣八耻的感觉
    jeffreyning
    jeffreyning
    Nov 2, 2018
    20
    公司在用 groovy 结合 springboot 开发,效率很高。接口层用的都是 springboot、springmvc 和 springcloud 的注解,业务实现用的 groovy 写速度快还支持热部署,没有用 grails 框架,用的这个 groovy 框架 micro-mvc,比 grails 胜在兼容性强,兼容 spring 体系各种 mvc 框架。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1571 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 149ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14
    ♥ Do have faith in what you're doing.