Suggerimenti per giocare a golf a Groovy


14

Siccome ho visto molte domande che chiedono consigli per giocare a golf nella loro lingua interessata, ho deciso di chiedere la mia lingua preferita: Groovy. Le persone possono dare alcuni consigli e trucchi che verranno utilizzati nel golf con Groovy.


1
Bene, questo non è molto popolare, vero :-(
Armand

@Alison: mi sento male, dato che non ci sono consigli sul golf per Groovy in questo sito :(
Ant's

2
Hai qualche consiglio per iniziare?
Armand,

Risposte:


5

Sono nuovo di tutto questo golf, questo è quello che ho ottenuto finora:

Utilizzare le chiusure non le funzioni:

def a (b) {stampa b}

è più lungo di

a = {stampalo}

È possibile utilizzare un indice negativo in matrici ed elenchi come alias per 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]

L'operatore spread è una scorciatoia per raccogliere:

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

Per l'ordinamento utilizzare l'operatore dell'astronave:

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

Modifica conversioni:

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

se su qualcosa di ascoltato l' *.Xoperatore di diffusione può spesso essere scritto come.X
cfrick

3

Poiché Groovy è un linguaggio un po 'prolisso, è possibile utilizzare Groovys MOP per abbreviare le chiamate ai metodi.

Il seguente frammento, ad esempio, sarebbe ripagato dopo il quarto utilizzo:

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

Suggerimento golf modifica:

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

Oppure sai:

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

2

grep è breve e funziona su diversi problemi

ottiene i caratteri di una stringa come un elenco con spazi e senza elementi 'ABC XYZ'.grep()iniziali : restituisce[A, B, C, , X, Y, Z]

grep con regexp è più breve della conversione in maiuscolo, se necessario: it.grep(~/(?i)$c/)anzichéit.toUpperCase().grep(c)


1
'ABC XYZ'as Setè un personaggio più corto e lavora nella maggior parte degli stessi posti
Marty Neal,

2

Ottenere una matrice da un elenco di oggetti

Se hai un elenco di oggetti come:

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

Puoi generare una ArrayList con una determinata proprietà usando:

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

BONUS: Groovy ... on Rails!

Bene, in Grails Framework dobbiamo ottenere molti valori da una selezione con attributo multiplo . È possibile utilizzare loop, appiattire e altre strutture di programmazione più tipiche, ma è possibile salvare alcune righe. Se hai una selezione come:

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

Quindi, nel tuo controller puoi semplicemente scrivere:

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

1
Questa domanda accetterebbe i consigli sul golf di Grails? Confesso di aver paura dei cecchini downvote ...
Victor F,

2
Non temere, PCG è pieno di persone estremamente simpatiche :)
Decadimento beta
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.