作为一个Android程序员,每天都会跟gradle打交道,但是呢仅仅也就限于一些基本的配置,对于它木有一个全面系统撑习,我记得之前在一次面试被问到“gradle有几种依赖,各依赖的使用场景是怎样的?”,当时就说有complie、implements、api这几种,然后就大致说了一下这几种依赖关系,很明显当时这块的回答让面试官不是太满意,因为确实关于gradle这块肚子里也没有真货,因为缺少对该构建工具的系统学习,所以接下来下决定要一点点攻克这门知识技能。
gradle快速入门:
领域特定语言DSL介绍:
domain specific language:
我们知道gradle是基于groovy进行编写的,而groovy是一门DSL类型的语言,所以首先对这个DSL有一个简单了解,它的全称为domain specific language(领域特定语言)。
常用的DSL语言及特点:
其实UML也是一门DSL,专门用来进行建模用的;更常见还有HTML,专门用来做浏览器可识别的网页的。这种语言的特点就是这些语言只解决特定领域的问题,它有别于系统语言(如Java既希望能做android开发,又希望能做服务器端开发),所以做为一名合格的程序员,在掌握了一门系统编程语言之后,很有必要再掌握一门DSL的语言。
DSL与通用语言的区别:
DSL是解决某个领域的问题,往纵向发展;而通用语言是大而全,往横向发展。
groovy初探:
先上官网总览一下它:
groovy介绍:
- 是一种基于基于JVM的敏捷开发语言。正在学的Kotlin是否也是~~
- 结合了Python、Ruby和Smalltalk的许多强大的特性。
那问题来了,既然市面上已经有上述强大的脚本语言了,为啥还要搞个groovy出来呢?因为groovy是针对Java语言的扩展,所以语法跟Java很类似,而Java语言受众巨多,是不是针对这部分群体学习groovy是个非常顺其自然的事,肯定比重新的学习上述说的这几个很强大的脚本语言要容易得多得多。 - groovy可以与Java完美的结合,而且可以使用Java所有的库。光这一点就屌了!!!
groovy特性:
- 语法上支持动态类型,闭包等新一代语言的特性。kotlin也支持闭包,具体可以参考:https://www.cnblogs.com/webor2006/p/11519284.html 。
- 无缝集成所有已经存在的Java类库。
- 既支持面向对象编程也支持面向过程编程。
如果说你想利用groovy来开发应用程序则就需要利用面向对象编程的特性了;而如果你想利用groovy来写脚本则可以利用面向过程编程特性了。
groovy优势:
- 一种更加敏捷的编程语言。
为啥?因为它有很多很好用的语法糖,很精简。 - 入门非常的容易,但功能非常的强大。
入门容易是指如果你本身就对Java很熟悉的前提下。 - 既可以作为编程语言也可以作为脚本语言。
- 熟练掌握Java的同学会非常容易掌握groovy。
groovy环境搭建(MAC):
1、安装好JDK环境:
我是搞Android开发的,所以这个步骤就忽略了,是个人都会,这里看一下我本机JDK的版本:
2、到官网下载好groovysdk,解压:
另外对于系统的配置要求官网也列了一下:
3、配置环境变量:
这个也不多说,跟JDK配置差不多:
其中bin文件中的groovy和groovyc跟java和javac功效一样,而groovysh则是用来执行groovy脚本用的。其中它里面也有类似于javadoc的api离线文档:
接一下将bin路径添加到我们的环境变量中:
编写HelloWorld,初步感受到groovy的魅力:
环境搭建好之后,咱们接下来编写一个HelloWorld来感受一下groovy相比java来说有啥魅力,在IntelliJ IDEA中创建工程:
好,接下来则新建一个groovy文件:
咱们目前还木有学习过groovy的语法,咋编写代码呢,其实直接按Java的风格来编写既可,我们知道在Java中的入口函数是main,所以直接校仿一下:
那。。既然跟Java语法一模一样,那还学啥Groovy呢?其实是Groovy比Java更简单,那接下来看一下它是怎么个简单法:
目前这程序其实IDE已经给出两个提示了,如下:
那很显然在Groovy中这俩是可以省略掉的,所以:
其实对于方法参数类型也可以省略的,如下:
貌似此时跟Java区别也不是很大呀,就是省略了一些无关紧要的东西而已,好!!颠覆你眼球的时间到了,下面再来改造:
很明显这是一种写脚本的风格,非常简单,所以Groovy既支持面向对象又支持面向脚本,但是!!其实最终编译成class还是会变成类的,毕境逃不出JVM执行的标准,咱们来瞅一下生成的字节码文件:
所以这里也可以看出,对于会Java的人学习Groovy是非常之顺畅的。