groovy基礎

groovy

基本語法

groovy默認會導入以下庫

import java.lang.* 
import java.util.* 
import java.io.* 
import java.net.* 

import groovy.lang.* 
import groovy.util.* 

import java.math.BigInteger 
import java.math.BigDecimal

groovy語句可以不加分號;

數據類型

Groovy提供多種內置數據類型。以下是在Groovy中定義的數據類型的列表

  • byte -這是用來表示字節值。例如2。
  • short -這是用來表示一個短整型。例如10。
  • int -這是用來表示整數。例如1234。
  • long -這是用來表示一個長整型。例如10000090。
  • float -這是用來表示32位浮點數。例如12.34。
  • double -這是用來表示64位浮點數,這些數字是有時可能需要的更長的十進制數表示。例如12.3456565。
  • char -這定義了單個字符文字。例如“A”。
  • Boolean -這表示一個布爾值,可以是true或false。
  • String -這些是以字符串的形式表示的文本。例如,“Hello World”的。

Groovy還允許其他類型的變量,如數組,結構和類,我們將在後續章節中看到。
其中對於數字類的還支持java中的包裝類型:數字類
類型除了基本類型,還允許以下對象類型(有時稱爲包裝器類型)-
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double

定義變量有兩種方式:普通java語法和def關鍵字
println可以打印字符串和變量的值。是groovy自身實現的。

運算符

感覺groovy支持java所有的運算符,優先級也是類似的。
但是有個範圍運算符比較特殊:可以把一個範圍存儲在一個對象中

class Example { 
   static void main(String[] args) { 
      def range = 5..10; 
      println(range); 
      println(range.get(2)); 
   } 
}
[5, 6, 7, 8, 9, 10] 
7
控制流程

while和for語句的用法跟java一樣。break和continue也支持。
多了個for in的用法,可以遍歷範圍,也可以遍歷map。

class Example { 
   static void main(String[] args) { 
      int[] array = [0,1,2,3]; 

      for(int i in array) { 
         println(i); 
      } 
   } 
}
方法
  • 支持原生的java方法定義和通過def關鍵字定義。可以添加修飾符,如public,private和protected。默認情況下,如果未提供可見性修飾符,則該方法爲public。
  • 靜態方法可以通過類直接調用,靜態方法只能調用靜態方法。實例方法需要由對象來調用。

- 通過def定義方法時,可不指定參數類型,可指定參數默認值。默認參數只能放在之後。

def someMethod(parameter1, parameter2 = 0, parameter3 = 0) { 
   // Method code goes here 
}
def

通過def關鍵字定義的變量是動態類型的,跟腳本語言一樣,只有在運行時才能確定。

字符串

Groovy提供了多種表示String字面量的方法。 Groovy中的字符串可以用單引號(’),雙引號(“)或三引號(”“”)括起來。此外,由三重引號括起來的Groovy字符串可以跨越多行。
groovy對字符串的方法進行了擴展:多支持了center,padLeft等

class Example { 
   static void main(String[] args) { 
      String a = 'Hello Single'; 
      String b = "Hello Double"; 
       String c = '''Hello Triple" aa
                "Multiple lines''';

      println(a); 
      println(b); 
      println(c); 

      println(sample[4]); // Print the 5 character in the string

      //Print the 1st character in the string starting from the back 
      println(sample[-1]); 
      println(sample[1..2]);//Prints a string starting from Index 1 to 2 
      println(sample[4..2]);//Prints a string starting from Index 4 back to 2 
   } 
}
範圍

範圍是指定值序列的速記。範圍由序列中的第一個和最後一個值表示,Range可以是包含或排除。包含範圍包括從第一個到最後一個的所有值,而獨佔範圍包括除最後一個之外的所有值。這裏有一些範例文字的例子 -

1..10 - 包含範圍的示例
1 .. <10 - 獨佔範圍的示例
‘a’..’x’ - 範圍也可以由字符組成
10..1 - 範圍也可以按降序排列
‘x’..’a’ - 範圍也可以由字符組成並按降序排列。

序號 方法和描述
1 contains() 檢查範圍是否包含特定值
2 get()返回此範圍中指定位置處的元素。
3 getFrom()獲得此範圍的下限值。
4 getTo()獲得此範圍的上限值。
5 isReverse()這是一個反向的範圍,反向迭代
6 size()返回此範圍的元素數。
7 subList()返回此指定的fromIndex(包括)和toIndex(排除)之間的此範圍部分的視圖

列表

列表是用於存儲數據項集合的結構。在Groovy中,List保存了一系列對象引用。List中的對象引用佔據序列中的位置,並通過整數索引來區分。列表文字表示爲一系列用逗號分隔並用方括號括起來的對象。

要處理列表中的數據,我們必須能夠訪問各個元素。 Groovy列表使用索引操作符[]索引。列表索引從零開始,這指的是第一個元素。

以下是一些列表的示例 -
[11,12,13,14] - 整數值列表
[‘Angular’,’Groovy’,’Java’] - 字符串列表
[1,2,[3,4],5] - 嵌套列表
[‘Groovy’,21,2.11] - 異構的對象引用列表
[] - 一個空列表

面向對象

groovy支持對象,繼承,接口,內部類、抽象類的功能,用法跟java一樣。
類中的屬性會自動關聯getter和setter方法。

閉包

閉包是一段代碼。能夠被執行,被傳遞,被存儲。

class Example {
   static void main(String[] args) {
      def clos = {println "Hello World"};
      clos.call();

      def clos = {param->println "Hello ${param}"};
      clos.call("World");

      def clos = {println "Hello ${it}"};
      clos.call("World");

      def str1 = "Hello";
      def clos = {param -> println "${str1} ${param}"}
      clos.call("World");

      def lst = [11, 12, 13, 14];
      lst.each {println it}  // 閉包傳遞給each函數

      def mp = ["TopicName" : "Maps", "TopicDescription" : "Methods in Maps"]             
      mp.each {println it} // 定義閉包函數
      mp.each {println "${it.key} maps to: ${it.value}"}

      def lst = [1,2,3,4];
      lst.each {println it}
      println("The list will only display those numbers which are divisible by 2")
      lst.each{num -> if(num % 2 == 0) println num} // 閉包中使用條件
   } 
}

閉包本身也提供了一些方法:比如find,any等
find 方法查找集合中與某個條件匹配的第一個值。
句法
Object find(Closure closure)

class Example {
   static void main(String[] args) {
      def lst = [1,2,3,4];
      def value;

      value = lst.find {element -> element > 2}
      println(value);
   } 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章