現在、Groovy/Grailsプロジェクト(かなり新しいプロジェクト)に取り組んでおり、Groovyメソッドでreturn
キーワードを省略することは良い方法かどうか疑問に思っています。私が知る限り、あなたは明示的にキーワードを挿入する必要があります、つまりガード句のために、他のどこでもそれを使用するべきですか?私の意見では、追加の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
}
後で来てコードを更新/保守する可能性のあるすべての人(自分を含む)に意図を明確にするので、私は間違いなく復帰を追加します。
そうでなければ、タイプミスのように見えるかもしれません。
もう1つは、voidを返すと予想される関数/クロージャーを 'void'として宣言することを忘れないでください。これも、将来のメンテナーに、何をしようとしているのかを明確にするためです。
あなたがそれを書いた後にあなたのコードを読まなければならない仲間のプログラマーに最も明確なことをしてください。
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に渡されるクロージャーは、暗黙のreturnを使用して大きな効果をもたらします。その考えを表現するのに3〜4行かかるでしょう。
しかし、今、このコードは単に簡潔ではありません。本当にエレガントです。 Pythonなどの他の言語を非常に連想させます。
お持ち帰りメッセージ
Groovyの優れた機能のリストは多数あります。ただし、「暗黙のリターン」が表示されることはほとんどありません。私はファンです。他の機能のためにホイールに油を差します。
私はそれが多くの言語で利用可能であることを理解しています:私はGroovyでそれを使用したことがありません。数週間でそれなしでは生きられないと思う。