Коли написати явну заяву про повернення в Groovy?


21

На даний момент я працюю над проектом Groovy / Grails (який я зовсім новачок), і мені цікаво, чи не вдалося опустити returnключове слово у методах Groovy. Наскільки я знаю, ви повинні явно вставити ключове слово, тобто для охоронних пропозицій, тож чи варто використовувати його також і скрізь? На мою думку, додаткове returnключове слово підвищує читабельність. Або це щось, до чого просто треба звикнути? Який у вас досвід роботи з цією темою?

Деякі приклади:

def foo(boolean bar) {
    // Not consistent
    if (bar) {
        return positiveBar()
    }
    negativeBar()
}

def foo2() {
    // Special Grails example
    def entitiy = new Entity(foo: 'Foo', bar: 'Bar')
    entity.save flush: true
    // Looks strange to me this way
    entity
}

У Perl є аналогічна проблема: функція повертає останній оцінений вираз у відсутності returnоператора tbe . Особисто я завжди використовую явне return, але Groovy не знаю.
Кіт Томпсон

2
Я особисто використовував неявне return лише тоді, коли це абсолютно зрозуміло. toStringє типовим прикладом: це однолінійний, і обчислене значення, очевидно, повертає значення. Але знову ж таки, я не запрограмував достатньо Groovy, щоб знати, чи відповідає це те, що думає більшість громади.
Йоахім Зауер

Відповіді:


7

Я певний додав би повернення, оскільки це робить наміри зрозумілішими для будь-якої людини (включаючи вас), яка може прийти та оновити / підтримувати код згодом.

Інакше це може виглядати як помилка введення тексту.

Інша річ - пам’ятати про те, щоб оголосити функції / закриття, які, як очікується, повернуть порожнечу як «порожнечу» - знову ж таки, щоб зрозуміти майбутнім обслуговуючим особам те, що ви намагаєтеся зробити.


17

Ясність - Король.

Зробіть те, що найбільш зрозуміло для програміста, який повинен прочитати ваш код після його написання.


8

Ось аргумент для того, щоб пропустити заяви про повернення ( Джерело ):

Занижена функція в Groovy

Фон

Я працював з Groovy деякий час, але протистояв одній особливості: неявне повернення останнього оціненого виразу. Наприклад:

def getFoo() {
  def foo = null
  if (something) {
    foo = new Foo()
  }
  foo // no 'return' necessary
}

У наведеному вище коді я використовував би функцію return, оскільки мені стало безпечніше. Я прагнув погодитися з посту Еріка (щодо явних повернень).

Одкровення

Я отримую це зараз, і все це завдяки вдосконаленим методам збирання в Groovy.

Розглянемо метод збирання. Він перетворює список, застосовуючи функцію. У псевдокоді:

[ a, b, c, d] => [ f(a), f(b), f(c), f(d) ]

Зважаючи на це, ось ще один приклад:

class Composer {
  def name
  // def era, etc
}

def list = [ 'Bach', 'Beethoven', 'Brahms' ]

// the closure returns the new Composer object, as it is the last
// expression evaluated.

def composers = list.collect { item -> new Composer(name : item) }

assert 'Bach' == composers[0].name

Ідея полягає у тому, щоб просто скласти список об’єктів композитора зі списку рядків. Як зазначається в коментарі, закриття, яке пройшло для збирання, використовує неявне повернення до великого ефекту. Свого часу я б взяв 3-4 рядки, щоб висловити цю думку.

Але зараз цей код не просто стислий: він справді елегантний. Дуже нагадує інші мови, такі як Python.

Повідомлення «Взяти додому»

Існує безліч списків відмінних функцій Groovy. Однак ми рідко бачимо в списку "неявне повернення". Я фанат: він змащує колеса для інших функцій.

Я усвідомлюю, що він доступний багатьма мовами: я просто не використовував його в Groovy. Я підозрюю, що через кілька тижнів я не зможу жити без цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.