groovy學習筆記(02)- 數據類型與作用域


數據類型與作用域

一切皆對象

Groovy 中一切皆對象,這意味着 Groovy 中不存在基本類型

int i = 1
def j = 2
println i.class	//class java.lang.Integer
println j.class	//class java.lang.Integer

數據類型

原則

Groovy處理算術表達式時遵循最小意外原則。

數字

使用Java中的BigDecimal表示浮點數。

常用方法

  • n.times{} //執行 n 次
  • n.upto(m){} //執行m-n+1次
  • n.downto(m){} //執行n-m+1次
  • n.step(a,b){} //執行(a-n)b 次,即從 n 開始,每次步長 b,直到等於 a
def store = ""
10.times { store += "x" }
assert store == "xxxxxxxxxx"

store = ""
1.upto(5) { n -> store += n }
assert store == "12345"

store = ""
2.downto(-2) { n -> store += n + "" }
assert store == "210-1-2"

store = ""
0.step(0.5, 0.1) { n -> store += n + "," }
assert store == "0,0.1,0.2,0.3,0.4,"

字符串

概述

Groovy 中可以使用 Java 的 String 和 Groovy 的 GString 表示字符串。

原則

  • 當沒有明確指明類型時,字符串都會被推斷為 String 類型
  • String 可以用單引號或雙引號聲明,但是GString只能以雙引號聲明
  • 只有 GString 支持使用引用符${}
  • 三引號(""")或(''')可以定義跨行的字符串,即按格式原樣輸出
  • 雙引號內部可以使用單引號,單引號內部可以使用雙引號
def x = 2
def singleQuote = 'abc'
def doubleQuotes = "abc"
def singleQuote2 = 'abc${x}'
def doubleQuotes2 = "abc${x}"
println singleQuote.class   //class java.lang.String
println doubleQuotes.class  //class java.lang.String
println singleQuote2.class  //class java.lang.String
println doubleQuotes2.class //class org.codehaus.groovy.runtime.GStringImpl

println singleQuote2        //abc${x}
println doubleQuotes2       //abc2
常用方法
def str = 'Groovy&Grails&lxt008'
println str[4]                  //v
println str[-1]                 //8
println str[1..2]               //ro
println str[1..<3]              //ro
println str[4, 1, 6]            //vr&
println 'a' == 'a'              //true
println 'a' <=> 'a'             //0
println 'a'.compareTo('a')      //0
println 'a' - 'a'               //
println 'a' + 'a'               //aa
println 'a' * 3                 //aaa

str = 'Groovy'
println str.center(11)          //  Groovy
println str.center(2)           //Groovy
println str.center(11, '=')     //==Groovy===
println str.count('o')          //2
println str.leftShift(' world') //Groovy world
println str << ' world'         //Groovy world
println str.minus('vy')         //Groo
println str - 'vy'              //Groo

println str.next()              //Groovz
println str.previous()          //Groovx

println str.padLeft(4)          //Groovy
println str.padLeft(11)         //     Groovy
println str.padLeft(11, "=")    //=====Groovy

println str.replaceAll('[a-z]') { ch -> ch.toUpperCase() }  //GROOVY
println '123'.toDouble()                                    //123.0
println '123'.toList()                                      //[1, 2, 3]

str = "Groovy Grails&lxt"
println str.tokenize()                                      //[Groovy, Grails&lxt]
println str.tokenize('&')                                   //[Groovy Grails, lxt]
println str.tokenize().getClass().getName()                 //java.util.ArrayList

類型推斷

在 Java中以下代碼代表一個 String

String value = "Hello World";

但是實際上從"="右邊就可以推斷出這是一個 String
Groovy 允許使用def定義變量,具體類型由 Groovy 根據右邊的值進行推斷。如果 Groovy無法推斷具體的類型則會把它當做是 Object。

def value = "Hello World"

可以通過調用.class 來查看變量的具體類型

println value.class

因為 Groovy 是無類型的,所以方法中的參數也可以省略 def 關鍵字

動態類型與靜態類型

Groovy支持動態類型和靜態類型

動態類型

def dynamicDate = new Date()

靜態類型

Date staticDate = new Date()

如果聲明了靜態類型,就不能再改變該變量的類型

作用域

Groovy類

Groovy類作用域同Java

Groovy腳本

綁定域:腳本內的全局作用域,相當於該腳本對象的成員變量。如果沒有定義過變量(可以直接使用或僅僅初始化但未聲明),其作用域即是綁定域。
本地域:腳本內的代碼塊。如果是定義過的變量,其作用域就是本地域。

腳本中聲明的方法訪問不了本地域

String hello = "hello"	//定義變量,作用域是本地域
def world = "world"		//定義變量,作用域是本地域

helloworld = "hello world"	//全局變量,作用域是綁定域

void check() {
	println hello
    println world
    println helloworld
}
check()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM