Consejos para jugar al golf en Groovy

14

Como he visto muchas preguntas con consejos para jugar golf en su idioma interesado, decidí preguntar mi idioma favorito: Groovy. Las personas pueden dar algunos consejos y trucos que se utilizarán en el golf con Groovy.

Hormiga
fuente
1
Bueno, esto no es muy popular, es :-(
Armand
@Alison: Me siento mal, ya que no hay propina de golf para Groovy en este sitio :(
Ant's
2
¿Tienes algún consejo para comenzar?
Armand

Respuestas:

5

Soy nuevo en todo esto del golf, esto es lo que obtuve hasta ahora:

Usar cierres no funciones:

def a (b) {imprimir b}

es más largo que

a = {imprimirlo}

Puede usar un índice negativo en matrices y listas como un alias para size () -

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

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

El operador de propagación es un atajo para recolectar:

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

Para ordenar, utilice el operador de nave espacial:

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

Editar conversiones:

assert "123" as int == "123".toInteger()
Fels
fuente
si en una lista, el *.Xoperador de propagación a menudo se puede escribir como.X
cfrick
3

Como Groovy es un lenguaje algo detallado, puede usar Groovys MOP para acortar las llamadas a métodos.

El siguiente fragmento, por ejemplo, pagaría después del cuarto uso:

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

Consejo de golf editar:

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

O ya sabes:

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

grep es corto y funciona en varios problemas

obtener los caracteres de una cadena como una lista con espacios y sin elementos 'ABC XYZ'.grep()iniciales : devuelve[A, B, C, , X, Y, Z]

grep con regexp es más corto que convertir a mayúsculas, si es necesario: en it.grep(~/(?i)$c/)lugar deit.toUpperCase().grep(c)

cfrick
fuente
1
'ABC XYZ'as Setes un personaje más corto y trabaja en la mayoría de los mismos lugares
Marty Neal
2

Obtener una matriz de una lista de objetos

Si tiene una lista de objetos como:

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

Puede generar una ArrayList con una determinada propiedad utilizando:

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

BONIFICACIÓN: Groovy ... on Rails!

Bueno, en Grails Framework debemos obtener muchos valores de una selección con múltiples atributos . Puede usar bucles, aplanar y otras estructuras de programación más típicas, pero puede guardar algunas líneas. Si tiene una selección como:

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

Luego, en su controlador puede simplemente escribir:

def aListOfUsers = User.getAll(params.list('userIds'))
Victor F
fuente
1
¿Aceptaría esta pregunta los consejos de golf de Grails? Confieso que le tengo miedo a los francotiradores que votan negativamente ...
Victor F
2
No tengas miedo, PCG está lleno de gente extremadamente agradable :)
Beta Decay