[Groovy] 程式設計教學:資料型別 (Data Type)

PUBLISHED ON JAN 17, 2019 — PROGRAMMING
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    資料型別可以規範變數在程式中相對應的動作,例如,數字可以加減乘除,布林值可進行邏輯運算等。本文介紹 Groovy 的資料型別。

    內建型別

    Groovy 沿用 Java 的型別系統,以下是常用的內建型別:

    • 數字 (Number)
      • 整數 (Integer)
        • Byte
        • Short
        • Integer
        • Long
        • BigInteger
      • 浮點數 (Floating-point number)
        • Float
        • Double
        • BigDecimal
    • 字元 (char)
    • 字串 (String)
      • String
      • GString
    • 布林 (bool)

    萬物皆物件

    在 Java 中,型別分為基礎型別 (primitives) 和參考型別 (references) 兩種型別,差別在於後者可以使用物件導向語法,而前者不行。在 Groovy 中,沒有這樣的區分,所有的值皆為物件 (everything is object)。在以下例子中,我們使用整數 3 的times 方法 (method) 執行三次程式:

    3.times {
        println "Hello World"
    }

    這個程式會印出三行 "Hello World" 字串;因為 3 是一個整數物件 (object),可以呼叫 times 方法。這是從 Ruby 吸收來的物件導向式語法,一開始可能會覺得不太習慣,寫一陣子 Groovy 後就會覺得這種寫法相當有用。

    Groovy 對於物件的支援是透過一層 wrapper 將基礎型別包成參考型別,這個過程是自動轉換的,開發者不需費心處理。

    數字 (Number)

    雖然 Groovy 的數字有許多種型別,但不太需要擔心要使用那一個型別,因 Groovy 會自動轉換。如以下實例:

    def num = 2
    
    assert num instanceof java.lang.Integer
    
    num = num ** 100
    
    assert num instanceof java.math.BigInteger

    原先變數 num 是整數,但在運算後,超過整數的範圍,就自動轉為 Java 大數 (java.math.BigInteger 型別);這個特性在 Python 和 Ruby 都有。

    字串 (String)

    Groovy 的字串,除了承接原有的 Java 字串的功能,也加上一些更方便的語法。例如,以下的 Java 程式將字串相接起來:

    // Java code
    public class StringDemo {
        public static void main(String[] args) {
            String name = "Michael";
    
            // String concatenation
            System.out.println("Hello " + name);
        }
    }

    但是在 Groovy 中,可以用更簡潔的字串安插 (string interpolation) 語法,如下例:

    def name = "Michael"
    
    println "Hello ${name}"

    在 Groovy 中,字串分為以下數種

    • 單引別字串
    • 雙引號字串
    • 三重單引號字串
    • 三重雙引號字串

    單引號字串和雙引號字串的差別,在於雙引號字串有字串安插的特性,而單引號則無。如下例:

    def name = "Michael"
    
    assert 'Hello ${name}' == 'Hello ${name}'
    assert "Hello ${name}" == 'Hello Michael'

    而三重引號字串則是用比較簡潔的方式表示多行字串,如下例:

    def name = "Michael Chen"
    def job = "Programmer"
    
    def msg = """\
    Name: ${name}
    Job: ${job}
    """
    
    print msg

    同樣地,雙引號字串有字串安插,單引號則無。

    Groovy 對字串的外加功能,是因為 Groovy 另外實做了 GString 型別。在 Groovy 程式內部,會自動在 Java 字串 (java.lang.String 型別) 和 Groovy 字串 (groovy.lang.GString) 兩者之間自動轉換,使用者不需煩惱這些細節。如下例:

    def name = "Michael"
    def greeting = "Hello ${name}"
    
    assert name instanceof java.lang.String
    assert greeting instanceof groovy.lang.GString

    布林 (Boolean)

    布林包括 truefalse 兩種值,用來表示邏輯上的真與假。不過,重要的是知道那些值會判定為 false,這類值稱為 falsy value。如下:

    • false
    • 數字為零 0
    • 空字串 ""
    • 空物件 null
    • 空陣列 (array)
    • 空映射 (map)
    • 空集合 (collection)

    另外,可在類別中實作 asBoolean 方法 (method),用來判定物件的真假。以下例子摘自 Groovy 官網:

    class Color {
        String name
    
        boolean asBoolean(){
            name == 'green' ? true : false
        }
    }
    你或許對以下產品有興趣
    TAGS: GROOVY, JAVA
    © 2014-2019. Michael Chen
    All code in the website is licensed under Apache 2.0 unless otherwise mentioned.