zoukankan      html  css  js  c++  java
  • groovy学习3语法学习

    贴段练习代码,基本上包含了groovy强大的一些特性和语法

    代码
    package basic

    /**
    * @author <a href="mailto:czy88840616@gmail.com">czy</a>
    * @since 2010-3-27 15:13:48
    *
    */
    println
    "helloworld"
    println
    "-----"

    //loop
    for(i in 0..2)
    println i
    println
    "-----"

    //upto
    0.upto(2) {print "$it "}
    println
    "\n-----"

    //times
    3.times {print "$it "}
    println
    "\n-----"

    //step
    0.step (10, 2) {print "$it "}
    println
    "\n-----"

    //系统运行
    println "ping".execute().text
    println
    "-----"

    println
    "ping".execute().getClass().name
    println
    "-----"

    println
    "cmd /C dir".execute().text
    println
    "-----"

    //?.操作符
    def foo(str){
    str
    ?.reverse()
    }
    println foo(
    'evil')
    println foo(
    null)
    println
    "-----"

    //exception
    def openFile(fileName) {
    new FileInputStream(fileName)
    }

    try {
    openFile
    "xxxx.txt"
    }
    catch (e){
    println
    "file not found:" + e
    }
    println
    "-----"

    //字符串条件判断-null
    str="hello"
    if(str) println str
    println
    "-----"

    //集合类型默认条件判断 null or empty
    lst0 = null
    println lst0
    ?'lst0 true':'lst0 false'
    lst1
    = [1,2,3]
    println lst1
    ? 'lst1 true':'lst1 false'
    lst2
    = []
    println lst2
    ? 'lst2 true':'lst2 false'
    println
    "-----"

    //<<操作符
    lst=['hello']
    lst
    << 'there'
    println lst
    println
    "-----"

    //运算符重载
    class ComplexNumber {
    def real, imaginary

    def plus(other) {
    new ComplexNumber(real: real + other.real, imaginary: imaginary + other.imaginary)
    }

    String toString() {
    "$real ${imaginary > 0 ? '+' : ''} ${imaginary}i" }
    }

    c1
    = new ComplexNumber(real: 1, imaginary: 2)
    c2
    = new ComplexNumber(real: 4, imaginary: 1)
    println c1
    + c2
    println
    "------"

    //return
    def isPalindrome(str) { str == str.reverse() }
    println
    "mom is palindrome? ${isPalindrome('mom')}"
    println
    "-----"

    //== and is()
    str1 = 'hello'
    str2
    = str1
    str3
    = new String('hello' )
    str4
    = 'Hello'
    println
    "str1 == str2: ${str1 == str2}"
    println
    "str1 == str3: ${str1 == str3}"
    println
    "str1 == str4: ${str1 == str4}"
    println
    "str1.is(str2): ${str1.is(str2)}"
    println
    "str1.is(str3): ${str1.is(str3)}"
    println
    "str1.is(str4): ${str1.is(str4)}"
    println
    "-----"

    //不可以省略;
    class Semi {
    def val
    = 3;
    {
    println
    "Instance Initializer called..."
    }
    }
    println
    new Semi()
    println
    "-----"

    //array
    int[] arr = [1, 2, 3, 4, 5]
    println arr
    println
    "class is " + arr.getClass().name
    println
    "-----"

    //dynmic

    def takeHelp(helper) {
    //...
    helper.helpMoveThings()
    //...
    }

    class Man {
    void helpMoveThings() {
    //...
    println "Man's helping"
    }
    //...
    }
    class Woman {
    void helpMoveThings() {
    //...
    println "Woman's helping"
    }
    //...
    }
    class Elephant {
    void helpMoveThings() {
    //...
    println "Elephant's helping"
    }

    void eatSugarcane() {
    //...
    println "I love sugarcanes..."
    }
    //...
    }

    takeHelp(
    new Man())
    takeHelp(
    new Woman())
    takeHelp(
    new Elephant())
    println
    "-----"

    //clouse

    def pickEven(n, block) {
    for (int i = 2; i <= n; i += 2) {
    block(i)
    }
    }
    pickEven(
    10) { evenNumber -> println evenNumber }
    pickEven(
    10, { println it })
    total
    = 0
    pickEven(
    10) { total += it }
    println
    "Sum of even numbers from 1 to 10 is ${total}"

    product
    = 1
    pickEven(
    10) { product *= it }
    println
    "Product of even numbers from 1 to 10 is ${product}"
    //闭包就是一个拥有参数的函数被绑定到上下文环境中来运行。
  • 相关阅读:
    114.完全背包【恰好装满完全背包
    整数划分类型题目
    三目运算符
    关于 xk 的位数。
    多重背包二进制原理拆分问题
    2016.4.2 讲课笔记(动态规划)
    二叉树(2)二叉树创建的3种方法,二叉树的递归遍历,二叉树的销毁
    二叉树(1)已知某2种排序方式,创建这个二叉树并按第3种方式排序
    C++知识点总结(二)
    5款优秀的开源克隆软件
  • 原文地址:https://www.cnblogs.com/xiziyin/p/1699121.html
Copyright © 2011-2022 走看看