Tips Untuk Bermain Golf di Groovy

14

Karena saya telah melihat banyak pertanyaan menanyakan tips untuk bermain golf dalam bahasa yang mereka minati, saya memutuskan untuk menanyakan bahasa favorit saya: Groovy. Orang dapat memberikan beberapa tips dan trik yang akan digunakan dalam bermain golf dengan Groovy.

Semut
sumber
1
Yah ini tidak terlalu populer, kan :-(
Armand
@Alison: Saya merasa buruk, karena tidak ada tip Golf untuk Groovy di situs ini :(
Semut
2
Apakah Anda punya tips untuk memulai kami?
Armand

Jawaban:

5

Saya baru dalam hal bermain golf ini, inilah yang saya dapatkan sejauh ini:

Gunakan Penutupan tidak berfungsi:

def a (b) {print b}

lebih panjang dari

a = {cetakkan}

Anda dapat menggunakan indeks negatif dalam array dan daftar sebagai alias untuk ukuran () -

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

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

Operator spread adalah jalan pintas untuk mengumpulkan:

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

Untuk menyortir gunakan operator pesawat ruang angkasa:

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)}}

Edit Konversi:

assert "123" as int == "123".toInteger()
Fels
sumber
jika pada sesuatu yang menyimak, *.Xoperator spread sering dapat ditulis sebagai.X
cfrick
3

Karena Groovy adalah bahasa yang agak verbose, Anda bisa menggunakan Groovys MOP untuk mempersingkat pemanggilan metode.

Cuplikan berikut misalnya akan membayar setelah penggunaan keempat:

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

Suntingan kiat bermain golf:

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

Atau, Anda tahu:

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

grep pendek dan bekerja pada beberapa masalah

dapatkan karakter string sebagai daftar dengan spasi dan tanpa elemen utama: 'ABC XYZ'.grep()pengembalian[A, B, C, , X, Y, Z]

grep dengan regexp lebih pendek daripada mengkonversi ke huruf besar, jika diperlukan: it.grep(~/(?i)$c/)bukanit.toUpperCase().grep(c)

cfrick
sumber
1
'ABC XYZ'as Setadalah satu karakter lebih pendek dan bekerja di sebagian besar tempat yang sama
Marty Neal
2

Mendapatkan Array dari Daftar Objek

Jika Anda memiliki daftar objek seperti:

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

Anda dapat membuat ArrayList dengan properti tertentu menggunakan:

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

BONUS: Groovy ... on Rails!

Nah, dalam Grails Framework kita harus mendapatkan banyak nilai dari select dengan banyak atribut . Anda dapat menggunakan loop, perataan, dan struktur pemrograman lainnya yang lebih tipikal, tetapi Anda dapat menyimpan beberapa baris. Jika Anda memiliki pilih seperti:

<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 --%>

Kemudian, di controller Anda, Anda dapat menulis sederhana:

def aListOfUsers = User.getAll(params.list('userIds'))
Victor F
sumber
1
Apakah pertanyaan ini akan menerima tips golf Grails? Saya akui saya takut penembak jitu yang downvote ...
Victor F
2
Jangan takut, PCG penuh dengan orang-orang yang sangat baik :)
Beta Decay