初次认识groovy是在2009年,当时看了Manning出版的《Groovy in Action 1st Edition》,对groovy这个语言的交互性shell,以及灵活的语法留下了深刻的印象,但限制于自己对脚本语言的特性了解甚少,社区基础的薄弱,以及所谓java is best的年少轻狂,没有进行实际应用,只是作为一种兴趣的萌芽种在了知识的土壤里。

 

转眼间到了2016年9月,突然在Manning网站上发现一本似曾相似的书籍-《Groovy in Action 2nd Edition》封面颜色做了改变,从萌芽的鲜绿色变成了硕果的深红色。奥,这么多年来,你一直在… 

 

 

 

“少小离家老大回,乡音无改鬓毛催”。遇见好久不见老朋友的感觉突然从我的心底悠然洒出来,化成氤氲,久久的萦绕在我的笔记本上,淌在桌子上,落在饭碗里,最后清晰的刻在脑海里。这就是解决长期散漫在表现层的繁琐套路的工具.其各方面战力如下:

 

 

颜值:已经从名落孙山变成了金榜题名,在TIOBE榜上2006年的6月108名升到了2016年8月的16名。看看这升势,简直是大牛市。

 

四个字,恭喜发财。社区发展的也很旺盛,其语言本身和java互可调用,有一个强大的干爹Java,发展出了许多应用:如gradle(构建工具,类似maven),grape,grails(web开发框架)。

 

平易近人:

1. 换装便利性:引用几个jar依赖包,配置下编译的插件指定groovy-eclipse-compiler编译器,装IDE插件,无缝集成开发环境。

2. 调用的便利性:源代码文件换了个后缀名,叫.groovy,里面语法可以用java的也可以用groovy并可直接调用java的lib,简直是各种用法无障碍。

 

真诚无套路:

  • 经典套路1:布尔表达式套路

 

if(list!=null&&list.size()>0)

     天衣无缝,譬如每次看到不管生什么病,回答都是多喝点水感觉烦不烦…

    if(obj!=null&&obj.getA()==1)

     受不了了,给你们统一

       if(list)

 

  • 经典套路2:初始化代码

简单任务,新建一个对象并赋值


CityCommArea c=new CityCommArea();

c.setCode(310000);

c.setName("上海市");

c.setCbds(new ArrayList<CBD>());


这个以前看着没啥,表现层经常有从http 提交的参数组装成对象的代码,或者从后台的DO对象转成VO对象的代码。老太婆的裹脚布,又长又臭。


CityCommArea area= new CityCommArea(code:310000,name:"上海市",cbds:[]);


化对象set方法调用为key:value形式传入。

  • 经典套路3:集合统计:

给你一段话,统计下单词数量。


List<String>words=new ArrayList<String>();

Map<String,Integer>freq=new HashMap<String,Integer>();

for(int i=0;i<words.size();i++){

     String word=words.get(i);

     if(freq.contains(word)==false){

     freq.put(word,0);

     }

     else{

     freq.put(word,freq.get(word)+1);

     }

}


这就是java的回答,一如既往,专业牛B.

Groovy的当头棒喝:


Map<String,Integer>freq=[:];

words.each {

word->freq[word]=freq.get(word,0)+1};

}


  • 简单套路4:转换集合

 

for (int j = 0; j < unbindList.size(); j++) {

    PlatformInfoDTO temp = unbindList.get(j);

    int id = temp.getPlatformId();

     String name = temp.getPlatformName();

     Map<String, Object> dteam = new HashMap<String, Object>();

     dteam.put("id", id);

     dteam.put("name", name);

     dteam.put("selected", false);

     deliveryTeams.add(dteam);

}

 

其实就是一个映射关系转换:

 

deliveryTeams=unbindList.collect(new ArrayList<Map<String,Object>>()){

    Map<String,Object>dteam=["id":it.getPlatformId(),

                             "name":it.getPlatformName(),

                             "selected":false];

    return dteam;

}

  • 经典套路5:集合变换组合(这个有点像sql的感觉,能筛选,转换,连接一个集合,跟jquery的思路也差不多)

String ww=words.findAll(){

    it.equals("it")

   }.collect(){

       return "a";

    }.join(" ");

 

Java从1995年诞生已经20年了,成为了又一个经典语言。经典语言有光荣的过去,但瞬息莫测的未来不能仅靠过去的光辉去支撑。有人说,java已经过时了,big and ugly,但目前没有任何一门语言在商业逻辑开发上能够完全取代java,这不仅仅是经典的语法和精英程序员社团:James Gosling, Doug Lea,Joshua Bloch, Rod Johnson,Gavin King等的努力,因为它也一直在变,better and stronger。

Groovy 吸取了python,xxscript等语言的精简语法,让程序员有更好的开发效率,或许有人说,这是不是就不是严谨的,可读性强的java了,难道不停的重复,不停的说第一步,第二步,第三步来打一个冰箱,对一个简单意义的表达(如真假判断,集合转换,对象初始化)那么的单调的繁复的描述是可读性强?是严谨?我觉得让简单的事回归简单是最好的可读性,Less is more.

少一些套路,多一些真诚 ——groovy消灭表现层套路的更多相关文章

  1. Groovy 学习手册(3)

    五. Groovy 的设计模式 设计模式是一种非常好的方式,可以使你的代码变得实用,可读又具有扩展性.跟 Java 相比,在 Groovy 里使用设计模式使代码更加简洁和容易. 1. 策略模式 设想一 ...

  2. Groovy介绍

    关于 Groovy 这一节将学习 Groovy 的基础知识:它是什么,它与 Java 语言和 JVM 的关系,以及编写 Groovy 代码的一些要点. 一.什么是 Groovy? Groovy 是 J ...

  3. 推荐一本写给IT项目经理的好书

    原文地址:http://www.cnblogs.com/cbook/archive/2011/01/19/1939060.html (防止原文作者删除.只能拷贝一份了) 推荐一本写给IT项目经理的好书 ...

  4. 【安全狗SRC】抗D设备哪家强?你来!大佬告诉你答案

    上周,安全狗SRC联合SRC部落,携手推出了爆款话题:传统抗D设备 vs 新兴CDN抗D:抗D效果哪个好? 一经发布简直好评如潮,热评无数,四方雷动(?)原帖在此,错过的吃瓜表哥们可以再围观一下~ht ...

  5. 一个WEB应用的开发流程

    转载:http://www.51testing.com/html/56/n-3721856.html 先说项目开发过程中团队人员的分工协作. 一.人员安排 毕业至今的大部分项目都是独立完成,虽然也有和 ...

  6. 1.一个WEB应用的开发流程

    先说项目开发过程中团队人员的分工协作. 一.人员安排 毕业至今的大部分项目都是独立完成,虽然也有和其他同事协作的时候,但自认为对团队协作的了解和认知都还有所欠缺.很清楚团队协作的重要性,但尚未有很好的 ...

  7. 学习Spring——两个你熟悉的不能再熟悉的场景使用

    最近公众号受邀获取了留言和赠送模板的权限,小开心(欢迎去公众号JackieZheng围观). 我们大致的了解了Spring这个框架对于依赖注入的使用和诠释可谓是淋漓尽致.因为有了Spring的这个IO ...

  8. UOJ244 【UER #7】短路

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  9. 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理

    Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...

随机推荐

  1. ecmall2.3.0 前后台样式等无效,导致前台页面显示不正常问题解决

    问题一:按照安装手册安装及数据初始化后,前后台中文均出现乱码 解决方法:在upload/index.php 和 upload/admin/index.php 头上加上header("Cont ...

  2. Jmeter接口压测小思路

    1.压力接口测试分2种:一种是单场景,压一个接口:第二种是混合场景,多个有关联的接口.压测时间,一般场景都运行10-15分钟.如果是疲劳测试,可以压一天或一周,根据实际情况定. 2.压测前要明确压测功 ...

  3. caffemodel的读取与修改

    直接撸代码~ import caffe import numpy as np caffe.set_mode_cpu() net = caffe.Net('myprototxt.prototxt', ' ...

  4. Java格式化时间为String类型

    SimpleDateFormat ormater = new SimpleDateFormat("yyyy-MM-dd"); Date date=new Date(); Strin ...

  5. https 请求的端口是443 注意

    注意: 这里录制https的请求 端口号一定是443 才可以抓取到!!!!!! (进坑多次)

  6. Solr入门和实践以及我对Solr的8点理解

    友情提示Solr的内容还是比较多的,一篇文章只能讲解一部分.全面介绍,没兴趣,没时间,也没能力,回报还不大.本文只写点我认为比较重要的知识点,独特的个人想法.仅供参考哦,更多细节需要自己去琢磨. 概述 ...

  7. activemq的启动方式

    一.简介:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台 ...

  8. Warning: require(D:\wamp\www\glink-smart\bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in D:\wamp\www\glink-smart\bootstrap\autoload.php on line 1

    Laravel访问出错错误信息:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or dire ...

  9. oracle监听动态注册与静态注册

    client端如果想要连接到远程的数据库服务器,首先数据库服务器必须启动监听器 oracle监听器的配置在$ORACLE_HOME/network/admin/listener.ora,打开这个文件, ...

  10. eclipse 使用lombok 精简java bean

    前言:             lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码.特别是相对于 POJO             lombok 的官方网址 ...