Skip to content

Instantly share code, notes, and snippets.

@jonatasemidio jonatasemidio/gma.md
Last active Jun 26, 2016

Embed
What would you like to do?
Groovy Multiple Assignment

/* oficial samples http://groovy-lang.org/semantics.html#_multiple_assignment

*/

def (a,b) = [1L,2].split{it instanceof Long}
println a
println b
def (id, nome, idade, telefone, email) = "23141234#jonatas emidio de souza#20#32146547#jonatasemidio@gmail.com".split("#")
println id
println nome
println idade
println telefone
println email
def(x, y) = "xy"
println x
println y
println "***TESTE ALUNO***"
class Aluno{ String nome; Boolean aprovado; String toString() { "Nome:$nome - aprovado:${ aprovado ? 'SIM' : 'NÃO' }" } }
def(a1, a2, a3) = "abc".collect{ new Aluno(nome:it, aprovado:true) }

println a1.nome
println a2.nome
println a3.nome
def(aprovados, reprovados) = ([a1, a2, new Aluno(nome: "d", aprovado: false), a3]).split{ it.aprovado }
println aprovados
println reprovados
@jonatasemidio

This comment has been minimized.

Copy link
Owner Author

jonatasemidio commented Jun 26, 2016

Análise do comentário para o Rodolfo:

//Funcionamento padrão. 2 valores para 2 variáveisdef (a, b, c) = [1,2]
assert [a,b] == [1,2] 

//Com mais valores do que variáveis, os valores se perdem,pois ele distribui em ordem.
(a, b) = [1,2,3]
assert [a,b] == [1,2] 

//Mas em caso contrário, o erro relatado não foi identificado
(a, b, c) = [1,2]
assert [a,b,c] == [1,2,null] //Não apresentou o ArrayIndexOutOfBoundsException, por não ter valor, atribuiu o null
  1. No primeiro caso (o mais simples), o funcionamento está como o esperado.
  2. Já no segundo caso, me parece ser uma reação normal, já que não temos mais variáveis para atribuir valores, esse valores acabam sendo deixados de lado. Não sei se essa é a melhor estratégia, mas o que eu posso ver é se existe alguma opção para que os valores restantes sejam, passados em forma de lista, concatenados ou até calculados.
  3. Por ultimo e não menos importante. No caso de termos mais variáveis do que valores, as variáveis restantes ficaram nulas, já que estas foram declaradas sem a atribuição de algum valor. No entanto, o erro relatado: java.lang.ArrayIndexOutOfBoundsException: 4 at Script1.run(Script1.groovy:2) não ocorreu. Se possível mande o script testado para eu entender melhor.

OBS: Com relação ao MissingPropertyException, pelo fato de o groovy ser uma linguagem que gera bytecode java... algumas características foram herdadas, e uma delas é o fato de não podermos utilizar variáveis que ainda não foram explicitamente declaradas. Para ser sincero, não sei informar se hoje já existe algo para lidar com isso sem gerar Exception, mas o que normalmente acontece é a declaração desta variavel, para em seguida o seu uso - (Como no seu caso usando o println)


Então Rodolfo, espero ter respondido suas questões, caso eu tenha entendido algo errado, por favor não deixe de perguntar, pois as suas dúvida podem me levar a aprender mais sobre novos recursos da linguagem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.