Dica Groovy: simplificando seu código com ‘with’

Imagine que você tenha uma classe tal como a abaixo:


class Pessoa {

String nome
String sobrenome
}

Há duas maneiras de preencher suas propriedades: você poderia usar um construtor como o código abaixo:


new Pessoa(nome:"Henrique", sobrenome:"Lobo Weissmann")

que é bem bacana, mas também poderia escrever um código bem mais tedioso, como este:


def pessoa = new Pessoa()
pessoa.nome = "Henrique"
pessoa.sobrenome = "Lobo Weissmann"

Entra a instrução with, que é muito similar à que encontramos no Delphi:


def pessoa = new Pessoa()

pessoa.with {
nome = "Henrique"
sobrenome = "Lobo Weissmann"
}


Publicado

em

por

Tags:

Comentários

9 respostas para “Dica Groovy: simplificando seu código com ‘with’”

  1. Avatar de Gregory Fontenele
    Gregory Fontenele

    Eu particularmente acho a opção “new Pessoa(nome:”Henrique”, sobrenome:”Lobo Weissmann”)” melhor. :}

    Henrique,
    você sabe como faz isso em groovy?
    def self.acha_telefone()
    resposta = “”
    agenda = {:abc=>2, :def=>3, :ghi=>4, :jkl=>5, :mno=>6, :pqrs=>7, :tuv=>8, :wxyz=>9}
    File.open(“textos.txt”).each_line do |palavra|
    agenda.each_pair do |chave, valor|
    palavra.each_char do |letra|
    if chave.to_s.include? letra.to_s
    resposta <2, :def=>3, :ghi=>4, :jkl=>5, :mno=>6, :pqrs=>7, :tuv=>8, :wxyz=>9}
    Obrigado

    1. Avatar de admin
      admin

      Eu também gosto mais de usar o próprio construtor, mas é bacana ver as outras opções também. :)

      Com relação a este código. Realmente não entendi o que você está querendo :( Isto é Ruby, certo?

  2. Avatar de Gregory Fontenele
    Gregory Fontenele

    Vixe, ficou estranho, vou melhorar.

    Esse código que coloquei ele pega um arquivo texto e lê a palavra e transforma ela em um número de acordo com uma tabela.
    Aqui tem a descrição completa do exercicio:
    http://br.spoj.pl/problems/ENCOTEL/

    No lugar de sair fazendo vários if`s no código essa linha:
    agenda = {:abc=>2, :def=>3, :ghi=>4, :jkl=>5, :mno=>6, :pqrs=>7, :tuv=>8, :wxyz=>9}
    Já faz metade do trabalho.

    Sim esse código é em Ruby.

    1. Avatar de admin
      admin

      É melhor a gente discutir isto por e-mail. loboweissmann@gmail.com

  3. Avatar de Bruno
    Bruno

    Onde você vê essas coisas do Groovy?
    Na série de artigos da JavaMagazine voc vai utilizar testes(TDD, Unit, Integration)?

    1. Avatar de admin
      admin

      Oi Bruno,

      eu vejo estas coisas sobre Groovy no material que uso para estudar mesmo: livros, o site oficial e uma série de blogs que acompanho. Além disto, como é o que uso no dia a dia, ocasionalmente ocorre de discubrir inclusive de forma acidental. :)

      Com relação à série da Java Magazine, ao menos por enquanto não será tratado a questão dos testes. Porém nada impede que em um próximo artigo a ser publicado logo após a série este assunto seja abordado (aliás, é uma EXCELENTE idéia!)

  4. Avatar de Igor Aguiar
    Igor Aguiar

    @Gregory
    Em groovy ficaria algo assim:

    // Converte cada linha do arquivo em numeros de acordo com o mapeamento
    def mapeamento = [abc: 2, 'def': 3, ghi: 4, jkl: 5, mno: 6, pqrs: 7, tuv: 8, wxyz: 0]
    def numeros = new File("agenda.txt").readLines().collect { palavra ->
    palavra.collect { letra ->
    // Se a letra não está no mapeamento retorna 1
    mapeamento.find({ it.key.contains letra })?.value?:1
    }.join("")
    }
    println numeros // Imprime a lista de numeros, cada numero corresponde à uma linha do arquivo

  5. Avatar de Bruno
    Bruno

    Se nao for pedir muito, voce pode me falar quais os melhores blogs sobre groovy&grails?
    Sei que os nacionais posso encontrar no blogs.grailsbrasil.com e os la de fora?
    Pocha vai ser muito bom, vou esperar por esse(s) artigo(s) de grails com testes ;]

    []`s

    1. Avatar de admin
      admin

      Claro, inclusive já escrevi sobre isto neste blog.
      Dê uma lida neste post: https://devkico.itexto.com.br/?p=603

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.