1. 程式人生 > >Groovy閉包中return的坑

Groovy閉包中return的坑

一直沉浸在Groovy的強大和方便中,稍微不注意就被坑了一把。

在each方法中return相當於Java迴圈中的continue,只會終止當前閉包中的程式碼,繼續下一次迴圈。並不會跳出迴圈外的方法。

實際應用中程式碼的邏輯往往比前面的兩段示例更復雜,如果測試不夠全面,結果會很慘。

Java的保守也有好處,簡單易懂,不容易出錯。Groovy的閉包雖然方便,也容易埋下隱患。

boolean hasValueGreaterThan(list,min){
  list.each{
    if(it>min){
      //這個return因為在閉包中,相當於for迴圈中的continue,終止當前迴圈中的程式碼,進行下一次迴圈,並不會返回hasValueGreaterThan方法的結果
      return true;
    }
  }
}

boolean hasValueGreaterThan(list,min){
  for(int i=0;i<list.size();i++){
    if(list.get(i)>min){
      //要用for迴圈,才能正常返回
      return true;
    }
  }
}