程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Groovy >> Groovy Tip 4:對象非空判斷及“?”運算符

Groovy Tip 4:對象非空判斷及“?”運算符

編輯:Groovy

對於一個Domain類對象,如下面的例子:

class Empl
{
    String name
}

我們需要對它進行操作,比如打印“name”屬性的值,我們首先要對它進行非 空判斷,如下:

def em
  if(em)
  {
    println"name: $em.name"
  }
  em = new Empl()
  em.name = 'Tom'
  if(em)
  {
    println"name: $em.name"
}

很顯然,如果不做非空判斷,那麼在第一個println語句就會拋出一個Exception,做了判 斷,則不會出任何的問題。

當然,對於我們的敏捷編程來說,上面的if語句雖然簡單,但仍然是麻煩的。基於這樣的 原因,Groovy語言為我們提供了“?.”操作符。

使用“?.”操作符,我們可以把上面的語句段修改為如下:

def em

  println"name: ${em?.name}"
  em = new Empl()
  em.name = 'Tom'

println"name: ${em?.name}"

其中,“em?.”是判斷em對象是否為空,如果為空,則不再往下計算,而是將 整個計算式返回一個null。

上面的語句段的執行結果為:

name: null

name: Tom

這樣的簡化的確是讓我們的編碼方便了很多。

我們甚至可以寫出形如下面的代碼:

println"city name: ${em?.addr?.city?.name }"

想想看,這樣的代碼如果用if語句進行判斷,那將會是怎樣的繁瑣?

一提到“?”運算符,我們很容易想起Java語言的“?”運算符,想 起類似下面的代碼行:

def em
println em==null?"":em.name

這曾經是我們津津樂道的Java語言為我們做的簡化。對於這樣一個簡化了的語句,Groovy 語言仍然為我們做了進一步的簡化:

def em
println em ? em.name:""

是不是更加簡單了一些?

值得注意的是,“em?”是當em對象不為空的時候為true,所以上面的語句中 ,“em.name”在前面,而“”在後面。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved