美文网首页
grovvy(1)语言特点

grovvy(1)语言特点

作者: 高斯巴 | 来源:发表于2018-11-12 14:25 被阅读0次

特点:

1:语法上支持动态类型,闭包等新一代语言的特性

2:无缝集成所有已经存在的java类库(跟kotlin一样,完全可以在groovy工程中写java类和代码)

3:支持面向对象,也支持面向过程编程.

环境搭建:

基于jvm(新版的idea,支持直接创建grovvy工程,如果不支持通过安装grovvy插件).

1:安装好jdk环境.

2:官网下载groovySDK,解压到合适的位置.

3:配置grovvy环境变量

$ vim ~/.bash_profile  :编辑环境变量的命令

$ source ~/.bash_profile :保存完环境变量配置后,刷新

特点:

grovvy既可以编译为class字节码,在jvm上执行。也可以写脚本解释执行

grovvySDK中的bin目录下都是一些命令,其中grovvy命令就相当于java命令是执行编译完的class字节码文件的。grovvyc命令相当于javac命令,是将grovvy源代码编译为class字节码文件的命令。其中grovvysh命令是Java没有的,它是解释执行grovvy脚本的

一个groovy文件 会被编译成一个 class (跟kotlin一样),文件内部定义的类属于这个class 的内部类.

其实不管是面向对象写应用程序还是,面向编程写脚本,都是被编译成一个class 字节码文件的执行的.

一:语句结尾没有分号

二:方法只有一个参数,调用时可以不写括号()

println "result2"

三:定义弱类型变量用 def(多用于变量自己使用,如果要暴露出去给别人使用,用def的话,别人不知道该传什么类型)

四:没有public等作用域关键字,默认都是public的 .闭包可以写在括号外面。如果闭包是唯一的参数,可以写在括号外面,小括号也可以省略.

*闭包可以写在括号外面:写在里面

1.upto(number,{num ->result *= num})

写在外面:

2.downto(1){

num->result *=num

}

*如果闭包是唯一的参数,可以写在括号外面,小括号也可以省略

every函数的参数只有一个闭包

def result2=str.every {

String s->s.isNumber()

}

五:闭包只有一个参数,可以不写默认是it

def list2=str.collect {

it.toUpperCase()

}

六:循环each有返回值,返回值就是调用者本身

七:定义闭包:闭包可以单独定义用一个def变量接收

八:方法的定义也用def,跟属性一样,标示返回值是object类型.

九:闭包其实就是一个代码块,代码块的作用域是他自己。但是他可以内部持有它外部所属类的引用,这样他就可以引用外部的属性,此时就关系到他的委托策略了。之所以有委托策略是因为,它内部有三个属性,可以持有外部的三个对象。这三个分别指的是哪个,你想要让他指向哪个等,所以就出现了委托策略并通过更改他的委托策略来引用不同的对象.

区别在于:this代表闭包定义处最近的对象(不包含闭包),owner代表闭包定义出最近的对象可以是闭包.delegate默认与owner一致.

十:使用def定义list跟Java中定义数组一样,def arg=[1,2,4],要定义数组需要使用 as int[]转为数组

或者定义数组使用强类型定义,int [] arg=[1,2,3]

十一:定义map:   

key默认是带单引号的字符串,并且单引号可以不写,map还可以通过.来操作 

map遍历出来key,value还可以包含index

def  arg=[ li : 223,  chao:333 ] //相当于 定义map:   def  arg=['li':223,  'chao':333]

十二:grovvy中没有抽象类,有个trait跟抽象类一样

十三:groovy中类的属性都可以new的时候直接像构造方法一样具名传入.

十四:类的属性默认都实现了get,set方法.

十五:所有的类默认都继承自GrovvyObject ,grovvy中的基本类型也都是object类型的,所以int和Integer没有区别

十六:groovy中的元编程:

运行时造成部分本该编译时完成的事情。grovvy中使用grovvyObject中的mateclass为类动态添加属性或者方法,

区分是添加在本文件中生效还是全局生效。因为他是运行时的,所以,在编译器可以调用一个不存在的函数,并不会报错,

所以为了避免写错调用方法,他又弄了一套机制,重写methodMissing方法和invokeMethod方法。

类似于kotlin中的扩展函数,但是kotlin中的扩展函数是全局生效的,并且在编译期编译.(kotlin中的事给类定义的扩展函数只能是静态方法,所以编译时可以检查是否调用正确,

grovvy中扩展的默认不是静态方法,所以需要运行时检查,就需要有运行时的找不到方法机制。当然grovvy中也可以扩展静态方法,加static关键字就可以)

相关文章

  • grovvy(1)语言特点

    特点: 1:语法上支持动态类型,闭包等新一代语言的特性 2:无缝集成所有已经存在的java类库(跟kotlin一样...

  • Grovvy基础

    字符串 在Grovvy中,单引号和双引号都可以定义一个字符串常量,不同的是单引号标记的是纯粹的字符串常量,而不是对...

  • idea+gradle学习笔记

    1.idea grovvy tool 基本语法 闭包 3.gradle配置文件介绍build.gradle 4.g...

  • 1、Swift语言特点

    swift的特点: 1、swift是一种强类型语言,所有变量在声明或者定义的时候会确定类型,并且这个类型不能再...

  • groovy(3)中的类接口

    groovy中的class interface 和java 几乎一样.区别就是 grovvy中的类,属性,函数都是...

  • go 教程1 语言特点

    Go语言是一种并发的、带垃圾回收的、快速编译的新语言。它具有以下特点: 可以在一台计算机上仅用几秒钟的时间编译...

  • grovvy(7)-闭包

    特点: 1:默认参数:it(不传参数时,会有默认参数it.有参数时则没有隐式参数it) def clouser3=...

  • gradle -01-Grovvy

    好的文章:https://blog.csdn.net/zhaoyanjun6/article/details/77...

  • 第一段 熟悉(认识)OC

    熟悉objective-c,特点如下 1.方法名普遍较长,比如loadDataFinish,加载数据完毕,语言特点...

  • python3入门与实践

    Day 1 语言特点,环境搭建,数据结构 python 官网:http://python.org集成开发环境:G...

网友评论

      本文标题:grovvy(1)语言特点

      本文链接:https://www.haomeiwen.com/subject/fwfcfqtx.html