[Groovy] 程序设计教学:数据类型 (Data Type)

PUBLISHED ON JAN 17, 2019 — PROGRAMMING

    数据类型可以规范变量在程序中相对应的动作,例如,数字可以加减乘除,布尔值可进行逻辑运算等。本文介绍 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
    All code in the website is licensed under Apache 2.0 unless otherwise mentioned.