zoukankan      html  css  js  c++  java
  • 基于JVM的动态语言Groovy 基础知识汇总

    在使用Java的过程中,和C#的语法相比有些还是比较麻烦,比如异常、get set等问题,毕竟Java的发展时间比C#长了很多,很多问题当初设计时没有考虑到,为了向前兼容,不得不保留一定的历史负担(如泛型的处理,java的擦除法实现就是后续的兼容考虑)。不过最近在一个项目中使用groovy grails感觉很是方便,特别groovy和java的集成十分的方便。

    下面把groovy涉及的一些基础知识整理一下,供使用参考,groovy本身的文档也很全面,但篇幅太长,如下作为一个简明的参考。

    官网 http://groovy.codehaus.org

    官网定义:Groovy is an agile dynamic language for the Java Platform with many features that are inspired by languages like Python, Ruby and Smalltalk, making them available to Java developers using a Java-like syntax.

    Groovya dynamic language made specifically for the JVM.

    Groovy was designed with the JVM in mind

    Groovy does not just have access to the existing Java API; its Groovy Development Kit(GDK) actually extends the Java API by adding new methods to the existing Java classes tomake them more Groovy.

    Groovy is a standard governed by the Java Community Process (JCP)as Java Specification Request (JSR) 241.

    如下涵盖了日常使用中常用的groovy语法,按照这个几次的使用可以很快地熟悉groovy的语法

    1. 默认导入的命名空间Automatic Imports

    importjava.lang.*;

    importjava.util.*;

    import java.net.*;

    import java.io.*;

    import java.math.BigInteger;

    import java.math.BigDecimal;

    importgroovy.lang.*;

    importgroovy.util.*;

    使用以上的命名空间下的接口、类等不需要引入

    2. 可选分号Optional Semicolons

    msg = "Hello"

    msg = "Hello";

    3. 可选括号Optional Parentheses

    println("Hello World!")

    println "Hello World!"

    //Method Pointer

    def pizza = new Pizza()

    def deliver = pizza.&deliver()

    deliver

    4. 可选返回值Optional Return Statements

    String getFullName(){

    return "${firstName} ${lastName}"

    }

    //equivalent code

    String getFullName(){

    "${firstName} ${lastName}"

    }

    5. 可选类型声明Optional Datatype Declaration (Duck Typing)

    s = "hello"

    def s1 = "hello"

    String s2 = "hello"

    printlns.class

    println s1.class

    println s2.class

    6. 可选异常处理Optional Exception Handling

    //in Java:

    try{

    Reader reader = new FileReader("/foo.txt")

    }

    catch(FileNotFoundException e){

    e.printStackTrace()

    }

    //in Groovy:

    def reader = new FileReader("/foo.txt")

    7. 操作符重载Operator Overloading

    Operator Method

    a == b or a != b a.equals(b)

    a + b a.plus(b)

    a - b a.minus(b)

    a * b a.multiply(b)

    a / b a.div(b)

    a % b a.mod(b)

    a++ or ++a a.next()

    a- - or - -a a.previous()

    a & b a.and(b)

    a | b a.or(b)

    a[b] a.getAt(b)

    a[b] = c a.putAt(b,c)

    a << b a.leftShift(b)

    a >> b a.rightShift(b)

    a < b or a > b or a <= b or a >= b a.compareTo(b)

    8. Safe Dereferencing (?)

    s = [1, 2]

    println s?.size()

    s = null

    println s?.size()

    println person?.address?.phoneNumber //可连用不用检查空

    9. 自动装箱Autoboxing

    autoboxes everything on the fly

    float f = (float) 2.2F

    f.class

    primitive类型自动装箱

    10. 真值Groovy Truth

    //true

    if(1) // any non-zero value is true

    if(-1)

    if(!null) // any non-null value is true

    if("John") // any non-empty string is true

    Map family = [dad:"John", mom:"Jane"]

    if(family) // true since the map is populated

    String[] sa = new String[1]

    if(sa) // true since the array length is greater than 0

    StringBuffersb = new StringBuffer()

    sb.append("Hi")

    if(sb) // true since the StringBuffer is populated

    //false

    if(0) // zero is false

    if(null) // null is false

    if("") // empty strings are false

    Map family = [:]

    if(family) // false since the map is empty

    String[] sa = new String[0]

    if(sa) // false since the array is zero length

    StringBuffersb = new StringBuffer()

    if(sb) // false since the StringBuffer is empty

    11. Embedded Quotes

    def s1 = 'My name is "Jane"'

    def s2 = "My name is 'Jane'"

    def s3 = "My name is \"Jane\""

    单双引号都可以表示字符串

    12. Heredocs (Triple Quotes)

    s ='''This is

    demo'''

    println s

    三个单、双引号

    13. GStrings

    def name = "John"

    println "Hello ${name}. Today is ${new Date()}"

    14. List/Map Shortcuts

    def languages = ["Java", "Groovy", "JRuby"]

    printlnlanguages.class

    def array = ["Java", "Groovy", "JRuby"] as String[]

    def set = ["Java", "Groovy", "JRuby"] as Set

    def empty = []

    printlnempty.size()

    languages << "Jython"

    println languages[1]

    printlnlanguages.getAt(1)

    languages.each{println it}

    languages.each{lang ->

    printlnlang

    }

    languages.eachWithIndex{lang, i ->

    println "${i}: ${lang}"

    }

    languages.sort()

    languages.pop()

    languages.findAll{ it.startsWith("G") }

    languages.collect{ it += " is cool"}

    //Spread Operator (*)

    println languages*.toUpperCase()

    def family = [dad:"John", mom:"Jane"]

    family.get("dad")

    printlnfamily.dad

    family.each{k,v ->

    println "${v} is the ${k}"

    }

    family.keySet()

    import groovy.sql.Sql

    //Spread Operator (*)

    defparams = []

    params<< "jdbc:mysql://localhost:3306/test"

    params<< "root"

    params<< ""

    params<< "com.mysql.jdbc.Driver"

    printlnparams

    defsql = Sql.newInstance(*params)

    //defdb = [url:'jdbc:hsqldb:mem:testDB', user:'sa', password:'', driver:'org.hsqldb.jdbcDriver']

    //defsql = Sql.newInstance(db.url, db.user, db.password, db.driver)

    defsql = groovy.sql.Sql.newInstance('jdbc:mysql://localhost:3306/tekdays', "root", '', 'com.mysql.jdbc.Driver')

    printlnsql.connection.catalog

    mysql-connector-java-5.0.7-bin.jar放到groovy安装lib目录下

    15. Ranges

    def r = 1..3

    (1..3).each{println "Bye"}

    def today = new Date()

    defnextWeek = today + 7

    (today..nextWeek).each{println it}

    16. Closures and Blocks

    def hi = { println "Hi"}

    hi()

    def hello = { println "Hi ${it}" }

    hello("John")

    defcalculateTax = { taxRate, amount ->

    return amount + (taxRate * amount)

    }

    println "Total cost: ${calculateTax(0.055, 100)}"

    //预绑定

    defcalculateTax = { taxRate, amount ->

    return amount + (taxRate * amount)

    }

    def tax = calculateTax.curry(0.1)

    [10,20,30].each{

    println "Total cost: ${tax(it)}"

    }

    篇幅有些长,不过有了这些知识对深入的groovy grails的使用很有裨益。

  • 相关阅读:
    Java学习二十九天
    Java学习二十八天
    47. Permutations II 全排列可重复版本
    46. Permutations 全排列,无重复
    subset ii 子集 有重复元素
    339. Nested List Weight Sum 339.嵌套列表权重总和
    251. Flatten 2D Vector 平铺二维矩阵
    217. Contains Duplicate数组重复元素
    209. Minimum Size Subarray Sum 结果大于等于目标的最小长度数组
    438. Find All Anagrams in a String 查找字符串中的所有Anagrams
  • 原文地址:https://www.cnblogs.com/2018/p/2010878.html
Copyright © 2011-2022 走看看