Groovyで明示的なreturnステートメントを記述するタイミング


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ステートメントがない場合に最後に評価された式を返します。個人的には、常にexplicitを使用していますが、returnGroovyについては知りません。
キーストンプソン

2
個人的には、完全に明確な場合にreturn のみ暗黙的に使用します。toString典型的な例です:それは1ライナーであり、計算された値は明らかに戻り値です。しかし、再び、私はそれがより大きなコミュニティが考えるものに適合するかどうかを知るのに十分なGroovyをプログラムしていません。
ヨアヒムザウアー

回答:


7

後でコードを更新/保守する可能性のある人(自分を含む)の意図を明確にするため、確実にリターンを追加します。

それ以外の場合は、入力エラーのように見える場合があります。

もう1つは、voidを 'void'として返すと予想される関数/クロージャーを宣言することを忘れないでください。これも、今後のメンテナーが何をしようとしているかを明確にするためです。


17

明快さは王です。

コードを書いた後にコードを読まなければならない仲間のプログラマーに最も明確なことをしてください。


8

returnステートメント(Source)を省略するための引数は次のとおりです。

Groovyの控えめな機能

バックグラウンド

私はしばらくGroovyで働いてきましたが、1つの機能、つまり評価された最後の式の暗黙的な戻りに嫌気がさしていました。例えば:

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

上記のコードでは、私にとって安全だと感じたため、returnを使用します。私は(明示的な返品に関して)エリックの投稿に同意する傾向がありました。

啓示

私は今それを手に入れました。それはすべて、Groovyの強化されたコレクションメソッドのおかげです。

collectメソッドを検討してください。関数を適用してリストを変換します。擬似コードで:

[ 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

アイデアは、単に文字列のリストからComposerオブジェクトのリストを作成することです。コメントで述べたように、collectに渡されたクロージャは、大きな効果への暗黙的な復帰を使用します。一度に、私はその考えを表現するために3-4行をとったでしょう。

しかし今、このコードは単純なものではなく、本当にエレガントです。Pythonなどの他の言語を非常に連想させます。

持ち帰りメッセージ

優れたGroovy機能のリストは多数あります。ただし、「暗黙的なリターン」がリストされることはほとんどありません。私はファンです。他の機能のためにホイールにグリースを塗ります。

私はそれが多くの言語で利用可能であることを理解しています:私はGroovyでそれを使用していません。数週間後には、それなしでは生きていけないと思う。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.