2019独角兽企业重金招聘Python工程师标准>>>



为什么要学Groovy

Groovy运行于JVM之上,然而其对动态语言函数式编程范式以及元编程功能的加持所带来的表现力和简洁性可以说甩了Java几条街。我们可以利用Groovy的所有动态功能构建高性能的JVM应用、将开发效率提高几个数量级! 这就是我们为什么要学它!

注: 本文首发于 My 公众号 CodeSheep ,可 长按扫描 下面的 小心心 来订阅 ↓ ↓ ↓


Groovy环境部署

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

  • 首先在命令行下执行:

curl -s get.sdkman.io | bash

  • 接下来执行:

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

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

一句话搞定!

sdk install groovy

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

groovy -v

一切就绪


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 ) {  // 无需throwsnew 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', {...})

后记

作者更多的原创文章在此

转载于:https://my.oschina.net/hansonwang99/blog/1634337

Groovy初体验:构建高性能JVM应用相关推荐

  1. 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化...

    构建高性能ASP.NET站点 第六章-性能瓶颈诊断与初步调优(下前篇)-简单的优化措施     前言:本篇给出一些在部署ASP.NET站点时采用的简单的优化措施.        本篇议题如下:     ...

  2. 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别

    "我的Go+语言初体验" | 征文活动进行中- 我的Go+语言初体验--Go+语言构建神经网络实战手写数字识别 0. 前言 1. 神经网络相关概念 2. 构建神经网络实战手写数字识 ...

  3. 华为智慧屏和鸿蒙系统对比,鸿蒙初体验:荣耀智慧屏跨系统交互构建新生态

    2013年的初夏,当年著名的互联网企业乐视正式发布了第一代互联网电视X60,它将过去的机顶盒与电视相融合,直接接入互联网视频内容,正式拉开了互联网电视的大幕. 如今6年过去,众多电视品牌起起伏伏,电视 ...

  4. vue3.0 Composition API 上手初体验 使用 vue-router 构建多页面应用

    vue3.0 Composition API 上手初体验 使用 vue-router 构建多页面应用 前两讲,我们已经顺利的使用 vue3.0 将项目跑起来了.但是实在是过于简陋,目前我们几乎不可能开 ...

  5. python数据分析要求高性能计算机_Python数据分析初体验,需要解答的三大问题!...

    本文约1200字,阅读需要4分钟 关键词:Python 小白 环境搭建 读取报错 中文乱码 本文针对初学Python的童鞋们的常见提问给出了解决方案 p.s. 文末有安装包和报错攻略分享 经常有初学p ...

  6. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  7. Docker深入浅出系列 | 容器初体验

    Docker深入浅出系列 | 容器初体验 教程目标 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干 ...

  8. Flutter初体验

    背景 今天在<极客>APP上看到一个<使用Flutter快速构建集美观与高性能于一体的移动应用>的介绍,瞬间想试试,于是找到了Flutter官网(https://flutter ...

  9. flink-cdc初体验

    flink-cdc初体验 产品介绍 flink-cdc是一款专用于数据库增量数据监控的插件.基于flink计算引擎提供的高性能,高可用性,高扩展性的数据监控功能.当前flink-cdc支持读取例如my ...

最新文章

  1. cheat engine lua
  2. 声明对象_计算机各语言数据类型及对象声明之区别
  3. 励志:他读书时挣了五十万,找工作时收获阿里腾讯快手等ssp offer
  4. 团队作业-Beta冲刺(周三)
  5. Java并发– CyclicBarrier示例
  6. 分享WCF文件传输---WCFFileTransfer
  7. 深入解析 | Oracle Database 20c 十大新特性一览
  8. MD5加盐(md5+salt)
  9. Luogu2627 修剪草坪
  10. 要用计算机处理频谱,妙用Adobe Audition 系列教程(二):频谱分析仪 | 小众声学...
  11. 使用Excel 2007绘制甘特图
  12. oracle查询排序id,Oracle查询数据怎么按照甲乙丙丁排序?谢谢
  13. 笔记本什么都没开,风扇为什么一直转?——CDPUserSvc服务
  14. 【数据结构】经典习题
  15. python倒计时代码turtle_python实现屏保计时器
  16. voip 软电话 客户端实例 SIP
  17. first season twenty-third episode,Ben was born!!!,Hi Ben???
  18. 铁甲雄兵哪个服务器人最多,超级玩家第三期——铁甲雄兵全区最高等级玩家
  19. 【dp】LGTB 玩THD
  20. FRED应用:激光二极管光源耦合到光纤的仿真

热门文章

  1. Steam高赞游戏入门机器学习!不写代码,人人可玩,又能吸猫,汉化版已推出...
  2. Base64转文件,图片
  3. C++ BigInt模板手打
  4. 构造函数 – WebSocket
  5. 使用组策略部署exe软件
  6. js控制select大全
  7. Go 语言编程 — gorm ORM 框架
  8. 关于IR21的自举电路
  9. 四年C++老炮,转攻Python实践分享
  10. 数据对智慧城市建设 起到极大作用