少一些套路,多一些真诚 ——groovy消灭表现层套路

 

初次认识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.

时间: 2024-12-17 22:20:25

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

马化腾为什么要怼朱啸虎,只因OFO套路太深

第一句,OFO套路太深! 第二句,朱啸虎钱多套路深! 马化腾为什么要怼朱啸虎? 老马老朱这个境界的人,一般都讲究和气生财,非一般闹心的事情,或违背原则良心的事情,大概也就一笑而过罢了! 但昨天的事,两人你来我往相互过招,你说OFO数据第一,我说摩拜微信支付比OFO高一倍多,你说性价比最优的方案才是好方案,我说品质才是共享单车的核心竞争力.文字太苍白,两人对话更见锋芒! 有人说两人的互怼是因为利益相关.马化腾投资的是摩拜,朱啸虎投资的是OFO,二者打架是为了让自己的钱更值钱.对于这一点,何玺并不完

ag视讯如何套路玩家(庄闲),学会这些技巧,胜率提高百分之十

信誉首选[永久网址864968.C○㎡]AG视讯套路首先,我相信很多人和以前的一样,觉得白家乐这个游戏胜负都是五五开!只要不傻,想营(ying)钱很简单的,但是玩儿过之后才发现,到底怎么回事,为什么到最后都是书(shu)?那么很简单,这里面肯定有它自己的一套套路,既然他有套路,那么我们就可以反其道而行之!当然,它的套路不止一个,是各种套路换着来,所以你一直很懵!这里我们研究发现,主要的大套路有两点,一种是桌上的套路,一种是心态上的套路,桌上的套路就是出×××的路子啦!心态上的套路就是套路到你营(

算法4:合并排序的套路 | 重用 | 分治

"重用与增量有序"的设计套路,前文已经介绍,这次介绍另一个招数--重用与分治的设计思想,这个套路在合并排序的算法设计中有所体现. 重用已经是一种被广泛使用的套路,小程之前介绍了重用的含义,而合并排序的重用,体现在对自身的反复调用.首先,认定合并排序算法就是让数列有序的,只要经过它处理,就一定会变得有序,这个信念很重要,做人要信.然后,把数列分为两部分,分别重用合并排序,重用完,这两部分就变得有序了.最后,把有序的两部分数列,合并起来,就解决了排序的问题. 也就是,合并排序本身就是一个标

java面试题大全

java面试笔试题大汇总     第一,谈谈final, finally, finalize的区别. 最常被问到. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统). 第四,&和&&的区别. 这个问得很少. 第五,HashMap和Hashtable的区

产品经理有哪些类别?

本文和大家分享的主要是一个产品人整理的一些产品经理称谓,及不同称谓对应的工作,一起来看看那吧,希望对广大想从事或刚从事产品岗的童鞋有所帮助. 一.按工作内容分 1. 功能设计产品经理 最常见的了,负责的工作就是设计出功能来.从 APP 的界面,到后台管理的权限,可能都会涉及.每天就是在想产品功能该怎么做.做具体设计以及跟技术扯皮.需求方根据公司业务不同而不同,C 端产品或者用户体验为主的产品,往往都是产品自己,像电商这类运营导向的产品,需求就往往是外部的. 2. 数据产品经理 近几年比较热门的新

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

LintCode刷题笔记-- BackpackIV

动态规划 描述: Given an integer array nums with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target. Example Given nums = [1, 2, 4], target = 4 The possible combination ways are: [1, 1,

【Spark 深入学习 02】- 我是一个凶残的spark

学一门新鲜的技术,其实过程都是相似的,先学基本的原理和概念,再学怎么使用,最后深究这技术是怎么实现的,所以本章节就带你认识认识spark长什么样的,帅不帅,时髦不时髦(这货的基本概念和原理),接着了解spark有什么必杀技(spark的各种大招),我们如何使用它的必杀技,最后看看spark如何更加高效的组合它的必杀技,以及spark是如何练就这一身必杀技的.   一.spark帅不帅   · 五官长相-spark架构图 鼻子.眼睛.耳朵.眉毛.口,缺一不可,这斯就经长什么鸟样,先上照片,如下所示

八百元八核的服务器?二手服务器(工作站)搭建指南(下)

本文分成两部分,上一部分传送门:<八百元八核的服务器?二手服务器搭建指南> 在上一部分我们已经学习了搭建二手服务器的基础知识,这部分,我们将深入学习各种配件的详细参数.选择适合的配置.学习搭建八百元八核的服务器. 不过,在我们开始之前,让我先对上一部分中,同学们提出的问题做一下回答. 第一是最多人质疑的一点:功耗和噪音问题. 我估计这里大家指的"功耗"应该是"功耗性能比".受限于老一代的制程,1366的功耗性能比是较低的,而到了2011 V2,事实上已经