Groovyでのゴルフのヒント


14

興味のある言語でゴルフをするためのヒントを尋ねる多くの質問を見てきましたので、私のお気に入りの言語であるGroovyを尋ねることにしました。人々は、Groovyでのゴルフで使用されるいくつかのヒントやトリックを提供できます。


1
まあ、これはあまり人気がありません、それは:
アルマン

@アリソン:このサイトにはGroovyのゴルフのヒントがないので、私は悪いと感じます:(
Antの

2
私たちを始めるためのヒントはありますか?
アルマン

回答:


5

私はこのゴルフのこと全体に新しいです、これは私がこれまでに得たものです:

機能ではなくクロージャーを使用します。

def a(b){print b}

より長い

a = {印刷する}

配列およびリストで負のインデックスをsize()-のエイリアスとして使用できます

c = "abc"
d = ["a"、 "b"、 "c"]

assert c [c.size()-1] == c [-1]
assert c [c.size()-2] == c [-2]
assert d [d.size()-1] == d [-1]
assert d.last()== d [-1]

スプレッド演算子はcollectのショートカットです:

assert d * .size()== d.collect {it.size()}

並べ替えには、宇宙船演算子を使用します。

e = [54,5,12]
assert e.sort{a,b->a<=>b}==e.sort{a,b->a<b?-1:+1}
assert e.sort{a,b->a<=>b}==e.sort{a,b->if (a>b) {return(-1)} else {return(+1)}}

コンバージョンの編集:

assert "123" as int == "123".toInteger()

listish何かにあれば*.X、拡散演算子が多いように記述することができます.X
cfrick

3

Groovyはやや冗長な言語なので、Groovys MOPを使用してメソッド呼び出しを短縮できます。

たとえば、次のスニペットは、4回目の使用後に成果を上げます。

''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)

ヒントゴルフ編集:

0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)

または、あなたは知っています:

r={(int)Math.random()*it}
r(12)

2

grep 短く、いくつかの問題で動作します

文字列の文字を、スペースを含み、先頭の要素を含まないリストとして取得し'ABC XYZ'.grep()ます。[A, B, C, , X, Y, Z]

正規表現を使用したgrepは、必要に応じて大文字に変換するよりも短い:のit.grep(~/(?i)$c/)代わりにit.toUpperCase().grep(c)


1
'ABC XYZ'as Set1文字短く、ほとんど同じ場所で動作します
マーティニール

2

オブジェクトのリストから配列を取得する

次のようなオブジェクトのリストがある場合:

def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]

次を使用して、特定のプロパティを持つArrayListを生成できます。

def userIds = users*.id // [1, 2, 3] no explicit loops!

ボーナス:Groovy ... on Rails!

さて、Grailsフレームワークで複数の属性を持つselectから多くの値を取得する必要があります。ループを使用したり、フラット化したり、他のより一般的な構造をプログラミングしたりできますが、いくつかの行を節約できます。次のような選択がある場合:

<select id="users" multiple="true" name="users">
    <option value="193">User A</option>
    <option value="378">User B</option>
    <option value="377">User C</option>
</select><%-- No Grails tags for now --%>

次に、コントローラーで次のように簡単に記述できます。

def aListOfUsers = User.getAll(params.list('userIds'))

1
この質問はGrailsのゴルフのヒントを受け入れますか?私は下票の狙撃兵を恐れていると告白します...
ビクターF

2
恐れてはいけません、PCGは非常にいい人でいっぱいです:)
ベータ崩壊
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.