отличный способ if (var) fn (var)

#grails #groovy

#grails #отличный

Вопрос:

я хочу знать, есть ли какой-либо более простой способ кода ниже:

 def dataList = OperLog.createCriteria().list(max:params.max, offset:params.offset) {
    if(params.relationId){
      eq('relationId',params.long('relationId'))
    }
    order(params.sort, params.order)
}
  

например, someVar?.someMethod
есть ли какой-либо способ не вызывать метод, параметры которого равны null

Комментарии:

1. Я делаю точно то же самое …. 😀

Ответ №1:

Вы могли бы сделать:

 params.relationId?.with { rid ->
  println rid
}
  

И код внутри with блока не будет выполнен, если params.relationId есть null

Тем не менее, я бы сказал, что ваш исходный код более очевиден в своих намерениях, и вам не придется пытаться понять, что он делает, когда вы будете просматривать его позже 😉

Комментарии:

1. Следует отметить, что из-за «заводной истины» пустая строка, нулевое значение int или логическое значение false прошли бы этот тест, поэтому оператор with был бы выполнен. Это отличается от поведения условного примера. Только если значение равно null, эти две конструкции сопоставимы (может быть, еще одна причина придерживаться инструкции if?) 🙂

Ответ №2:

есть ли какой-нибудь более крутой стиль для этого?

 def list = [vo1,vo2,vo3]
list.each{
   someMethod(it)
}
  

точно так же, как

 list*.toString()