Arquivo da categoria: Básico

Groovy Multiple Assignment

Salve Devs!

Sei que não tenho conseguido manter uma frequência nas postagens do SantoGrails, ainda tenho tido um pouco de dificuldade no gerenciamento do meu tempo, mas eu não poderia deixar de escrever algo sobre o que eu acabei de descobrir que o Groovy pode fazer… Estou falando do Multiple Assignment.

droctocat

Definição:

Multiple Assignment é um recurso oferecido por algumas linguagens, que tem o interesse de facilitar a atribuição de vários valores ao mesmo tempo.

Problematizemos então!!

Caso de Uso:
Imagine que você possue um método que retorne uma linha de um arquivo delimitado por “#”, onde por definição o nome é o primeiro valor, o ano de nascimento é o segundo valor e sua cidade de nascimento é o terceiro valor e onde o objetivo é carregar cada um desses valores em suas respectivas variáveis.

def atributos = "Stanley Kubrick#1928#New York".split("#")
String nome = atributos[0]
String ano = atributos[1]
String cidade = atributos[2]
println "Nome: $nome, Nascimento: $ano, Cidade: $cidade"

Se analisarmos rapidamente o código perceberemos que o nosso gargalo produtivo (se é que eu posso chamar desta forma) está na fragmentação da lista em variáveis.

Para isso foi criado o Multiple Assignment. Vejamos como ele pode nos ajudar.

def (nome, ano, cidade) = "Stanley Kubrick#1928#New York".split("#")
println "Nome: $nome, Nascimento: $ano, Cidade: $cidade"

E pronto!

Para finalizar… O Multiple Assignment do Groovy é bem poderoso, mas deixarei esta parte para o próximo post.

 

 

Anúncios
Etiquetado ,

Conheça Groovy e o lado Lean do Java

Salve Devs!

Hoje descobriremos como deixar nossa programação Java um pouco mais Lean (Enxuta).

lean

Você é daqueles que gosta de Java mesmo com toda a sua verbosidade ou daqueles que não gosta de Java graças a sua verbosidade? Resumindo … Você acha o Java verboso?

Se você respondeu SIM para alguma dessas questões, essa postagem foi feita para você!

A um tempo atrás montei uma apresentação falando um pouco sobre como Groovy tem trazido uma nova ropagem para a familia de frameworks que funcionam na JVM.

Conheça tecnologias como:

  • Grails
  • RatPack
  • Glide
  • Spock
  • GEB

Aproveita que é uma apresentação de leitura rápida, que foca no código e está cheio de imagens!

Link da apresentaçãohttp://slides.com/jonatasemidio/deck#/

leanjavaweb

Se você conhece mais alguma tecnologia com essa característica LEAN para a JVM deixe um comentário.

Até a próxima!

Descubra os novos métodos do Groovy para ordenação e remoção de duplicações

Professortocat_v2

No Groovy, nós podemos usar os métodos sort() e unique() para ordenar ou remover duplicações de nossas coleções. Esses métodos alteram a estrutura das próprias coleções utilizadas. Porém esses são os efeitos colaterais que queremos evitar. No entanto, os métodos sort e unique foram alterados para receber um parâmetro boleano para indicar se a coleção deve ser alterada ou se nós teremos uma nova coleção como resultado, deixando a coleção atual em seu estado original.

Desde a versão 2.4 do Groovy nós temos dois novos métodos que retornam por default uma nova coleção: toSorted e toUnique.

No exemplo abaixo, podemos ver esses métodos em ação:

Curiosidades:

Acabamos de ver a lista de usuários sendo criada com o asImmutable(), que transforma o objeto em outro imutável, ou seja, se tentarmos executar apenas um sort() ou um unique() receberemos uma exceção de método não suportado. Pois, como descrito no início dos post, estes métodos por default alterão o estado do objetos e isso não é possível nos imutáveis.

Se em nossa aplicação temos estruturas que não são alteradas no decorrer de seu ciclo de vida, é aconcelhavel que utilizemos estas estruturas como imutáveis para melhoria de performace.

Considerações

Estamos falando de casos em que estamos lidando com listas externas, que por algum motivo de performace ou segurança não podem ser alteradas ou ja vir ordenadas.

Em situações onde a nossa estrutura de dados tenha que estar sempre ordenada e sem repetições, é aconcelhado já cria-la como TreeSet(). TreeSet: É uma coleção que além de não permitir repetição graças ao Set, ela indiretamente implementa o SortedSet, ou seja, manterá a classe sempre ordenada.

Gostaria de agradecer mais uma vez ao Dev Hubert Klein Ikkink que tem contribuído bastante com a comunidade groovy com seus exemplos no Groovy Goodness.

Fonte original

Grep e a ciência por detrás do switch do Groovy

Salve Devs!

Esse post é uma continuação do SE AVENTURANDO NO SWITCH DO GROOVY que fala sobre os melhoramentos que o switch passou a ter no Groovy.

Conheça o grep! A inteligência por detrás do switch

heisencat

O grep é mais um dos métodos que são definidos no DefaultGroovyMethods.java. Onde este será inserido em tempo de execução em todas as Collections instanciadas do projeto em questão.

 

Indo um pouco mais fundo:

Este método utiliza o DefaultGroovyMethodsSupport.createSimilarCollection() para retornar a Collection mais especifica relacionada com o parâmetro de entrada (Ex: ArrayList ou LinkedList) e o BooleanReturningMethodInvoker.invoke() para definir se o parametro possui os critérios necessários para fazer parte do retorno.

 

Segue um exemplo de como o grep trabalha:

Veja em execução no GroovyConsole.

Lembrando que conforme descrito na documentação, o grep específico para collection só está disponível a partir da versão 2.0 do Groovy. Antes disso temos o grep mais genérico voltado para Objects.

Gostaria de agradecer mais uma vez ao Dev Hubert Klein Ikkink que tem contribuído bastante com a comunidade groovy com seus exemplos no Groovy Goodness.

Fonte original

 

 

Se aventurando no Switch do Groovy

O switch no Java fica sem graça quando comparado com o do Groovy (mesmo quando falamos do switch do Java 7 que já aceita Strings em sua estrutura).

gitfinn

O switch do Groovy suporta diferentes classifiers, ao contrário do Java que apenas suporta String e int com seus derivados. Qualquer um que implemente o método isCase() (seu código fonte) pode ser usado como um classifier. Groovy adicionou o isCase() para as seguintes situações: Class (com o isInstance), Object (com o equals), collections (com o contains) e expressões regulares (com o matches). Se implementarmos o isCase() em nossa classe groovy ela também poderá ser usada como um classifier.

E Finalmente podemos usar uma closure como classifier, lembrando que ela será avaliada como boolean.
Segue exemplo no gist: switch.groovy

 

Veja o exemplo funcionando no Groovy Console: switch.groovy

Gostaria de agradecer o Dev Hubert Klein Ikkink que tem contribuído bastante com a comunidade groovy com seus exemplos no Groovy Goodness.

Fonte original

Etiquetado

O nirvana do programador parte 1 – Montando o meu portfólio:

Salve Groovistas e Grailsnaltas de plantão!!

Dessa vez vou fugir um pouquinho de groovy e grails para passa um pouco do que eu considero de extrema importância para todo o programador que se preze!
Tudo começou quando eu comecei na empresa que estou atualmente a alguns meses. Aqui, pude perceber que a maioria dos desenvolvedores não possuem uma conta no Github, alguns nem sabiam do que se tratava!!!
A um tempo atraz eu montei uma apresentação de grails para o openspace e hospedei ele no heroku. Apenas um dos que entrei em contato conhecia  heroku! Nem heroku, nem AppEngine da Google.
Não sei se isso é fase, mas estou em uma “vibe” completamente open source, sinto uma necessidade absurda de disseminar este tipo de informação. Fico inquieto ao saber que um programador nunca ouviu falar no Git ou afins.
Por causa disso eu decidi postar uma espécie de receita de bolo para programadores da geração Y ou atual… Que seja… Para aqueles que querem estar por dentro do que temos de recursos altamente voltados para melhorar o nosso ecossistema de desenvolvedor!
Pois bem… Eu estava pesando em fazer um post rápido, apenas com alguns links e dicas, mais deu três páginas. Logo decidi separar este artigo em dois posts.

  • O nirvana do programador parte 1 – Montando o meu portfólio: Linkedin, Git, Github, Heroku e Appengine.
  • O nirvana do programador parte 2 – Montando meu ecossistema social: Dojo de programação, network, codeschool, inglês, motivação e internet disponível.

Linkedin

Definição: Rede social voltada para profissionais.
Detalhes: Insira todos os seus dados profissionais (relevantes é claro rsrs), pois ele funciona como um currículo online, mas ele é mais do que isso! Siga as empresas que você considera importante, faça parte de grupos que tem relação com o seu objetivo profissional e se junte a pessoas que possam te ajudar a construir uma rede profissional valiosa. Lembre-se que muitas empresas de RH utilizam o linkedin para procurar profissionais.

Git e GitHub

Definição: Git é o controlador de versão criado pelo Linus Torvalds para manter o código fonte do Kernel do Linux e Github é um repositório online, o mais utilizado no mundo para projetos open source.
Detalhes: Não existe currículo melhor para um programador que o seu Github. Nele, você pode incluir todos os seus projetos para que outras pessoas possam ver como você trabalha e até contribuir com o código de outros. Muitas empresas de nome forte no mercado utilizam o Github e aceita alterações enviadas pela comunidade com bem menos burocracia que os repositórios tradicionais (Rails, Grails e outras ferramentas de grande importância para o nosso ecossistema estão lá disponíveis para ser baixados).

Heroku e Appengine

Definição: Serviços de hospedagem de aplicação.
Detalhes: Quer fazer deploy para a nuvem para que outras pessoas saibam o que você fez? Você precisa conhecer o Heroku ou o AppEngine.
Com estes serviços o desenvolvedor é capaz de deixar suas aplicações funcionando na web até sem pagar nada! Prova disso é a apresentação de grails que eu montei (http://apresentacaograils.heroku.com) não estou pagando nada por ela ,utilizando o seu subdomínio … É claro!
No momento estou utilizando o Heroku pelo sua integração quase que nativa com o git rsrs!

Por hoje é só pessoal, mas já já eu posto a continuação deste artigo

Dojo na Praça do Conhecimento

Salve Groovistas!

Desta vez este post é para falar de como foi o primeiro de muitos dojos na praça do conhecimento, uma entidade filantrópica que tem como objetivo trazer a tecnologia para a rotina das crianças do Alemão.

Faço parte da lista do dojorio onde o Felipe Melo, uns dos professores do local, postou um convite para elaborar um dojo na praça do conhecimento. Como neste dia a minha tarde de sábado estava livre, pude aproveitar e ir ajudar a galera do dojo.

Aventura

Para mim, foi uma super nova experiência, pois foi a primeira vez que eu entrei em uma comunidade sozinho e o mais legal é que toda aquela impressão que eu tinha foi quebrada até pela recepção das pessoas que me ajudaram a chegar à praça do conhecimento, que por sinal possui uma super infraestrutura de ensino. Fiquei muito feliz em ver iniciativas deste nível acontecendo em uma comunidade e dando certo. Crianças com acesso a internet, cursos voltados para tecnologia e agora dojo de programação rsrs!

Devido alguns contratempos, não foi possível a presença daqueles que de fato sabem configurar um ambiente para dojo (Lembrando que eu só frequento dojos, nunca criei nem preparei o ambiente de um).

Preparar o ambiente para o dojo foi a segunda parte da aventura!

Infraestrutura

Comecei este processo mostrando a galera presente, o github, já que a primeira coisa que me veio em mente foi baixar o DojoTimer – ( Quem disse que eu consegui botar a bagaça para funcionar rsrs). Durante este overview pelo GitHub, pude apresentar a filosofia de programar não só por dinheiro, mas , mais ainda por uma realização pessoal e ser colaborativo que é a filosofia de desenvolvimento que eu acredito ser a correta.

Apresentei o GitHub, mas não consegui configurar o DojoTimer, onde para minha supresa, um dos presente sugeriu ver um projeto pronto para entender como o teste estava sendo executado. Tai!!! Eu aprendi junto com os caras como funcionava o teste unitário do python seguindo o fizzbuzz feito no meu primeiro dojo na globo (ainda bem que o código tinha sido postado no github).

Mudando o Planejamento

No meio da explicação do FizzBuzz um dos presente perguntou, “para que isso serve”! Essa pergunta me fez pensar no padrão falido de ensino que temos e que eu estava indo no mesmo caminho. Naquele lugar eu não estava lidando com programadores e alguns nem sabiam se gostariam de ser programadores! Lembrei na mesma hora da pesquisa do Carlos Flores sobre ensino, onde o primeiro passo é criar um produto! Foi exatamente isso o que iriamos fazer, algo que eles gostaria de ver funcionando.

Grails

Apesar de eu ser um fã de python eu me considero um evangelista grails, e não pude perder a oportunidade.  Para mostrar como grails é simples um dos presentes foi chamado para preparar o ambiente para grails e criar o projeto.

O voluntário a programador foi o Grande Lucas! Que fez tudo corretamente, o problema foi minha falta de conhecimento, onde após o projeto pronto não foi possível criar o CRUD devido a falta do jar do hibernate, que eu não consegui identificar o real motivo!!!

Conteúdo Nerd Total

Como o ambiente que eu criei estava furado! Rsrs! Mostrei uma apresentação do grails que eu tinha montado para o OpenSpace e a galera curtiu bastante!  Até um coordenador presente acho o grails simples!!

Após uma apresentação desse tipo, nada como um papo descontraído sobre como funciona a rotina de um desenvolvedor e foi disso que o nosso dia foi preenchido!! Foi basicamente um intensivo de oque um programador deve conhecer.

Falamos sobre: Git, Github, Heroku, Linux, Ubuntu, Python, aplicações científicas, biotecnologia, GrokPodCast e NerdCast. Para mim foi a melhor parte do dia!!

Por fim, participar deste tipo de evento não tem preço, principalmente quando você contribui diretamente!

Programação semântica com Groovy: FizzBuzz

Salve Groovistas!!

Ontem pude participar do DojoRio na Íparos e hoje estava relembrando do meu primeiro Coding Dojo!

O primeiro Coding Dojo … agente nunca esquece. O problema selecionado foi o do FizzBuzz, que para quem não sabe é criar um algorítimo que ao receber qualquer número pode assumir três retornos:

  • Se for múltiplo de 3 – Retorna “fizz”
  • Se for múltiplo de 5 – Retorna “buzz”
  • Se for múltiplo de 3 e 5 ao mesmo tempo, deve retornar “fizzbuzz”

Na época o algorítimo foi implementado em python, mas atualmente estou programando em Groovy, decidi refazer o algorítimo, porém com Groovy.

O cógido ficou mais ou menos assim:

fizzbuzz = {it%3==0 & it%5==0 ? 'fizzbuzz' : it%3 == 0 ? 'fizz' : it%5==0 ? 'buzz' : 'Without fizzbuzz!'}

Um programador pode até entender mais para aumentar a coesão, podemos fazer o seguinte:

seMultiploDeCinco = {it%5==0};seMultiploDeTres = {it%3==0}
fizzbuzz = {seMultiploDeTres (it) & seMultiploDeCinco (it) ? 'fizzbuzz':
             seMultiploDeTres (it) ? 'fizz':
             seMultiploDeCinco (it) ? 'buzz':
             'Without fizzbuzz!'}

Neste caso encapsulamos as regras que se repetem e demos um nome fácil de abstrair e em seguida chamamos os mesmos.

Sem querer mudar muito de assunto, mas se atendo mais ao título. Precisamos nos atentar para a clareza de nosso código, precisamos nos esforçar para deixa-lo claro e manutenível.

Hoje com o movimento Agile – Percebemos que as vezes não temos tempos para a documentação tradicional e é nessas horas que o nosso código deve ser auto documentável.

Lembrando que não estou falando só dos comentários que devem ser claras abstrações do negócio, mas também da forma que escrevemos o código. Podemos notar que da maneira que o fizzbuzz foi refatorado, não existe a necessidade de comentar os métodos devido a clareza de seus nomes.

Por fim, devemos tratar nossos códigos como as mães tratam seus filhos, mantendo-os limpos ao máximo para evitar que falem mal deles ou de como cuidamos deles!!

 

Por: Jonatas Emidio.

Apresentação Grails com HTML5 no Reveal.js

Produtividade ao extremo na JVM com Grails!!

Segue link da apresentação montada para montral como ficou muito mais facil trabalhar na Web com Grails.

grailstalk

Apresentação Grails: apresentacaograils.herokuapp.com

Criando minha primeira aplicação em Grails

Após configurarmos o ambiente de desenvolvimento , estaremos aptos a criar nossas aplicações.

Antes de criarmos nossa aplicação, precisamos estar pelo menos familiarizados com os comandos principais do Grails, para ter uma noção melhor do que está acontecendo por de traz dos panos quando estivermos utilizando uma IDE.

grails [comando nome]

Rode no DOS o comando create-app para criar a sua aplicação:

grails create-app loja

Após clicar em Enter será criada uma pasta com o nome do projeto, onde dentro estarão os arquivos default de uma aplicação grails.

Acessa o diretório do projeto:

cd loja

Agora que temos a nossa aplicação podemos iniciar a logica do nosso negócio.

Primeiro criaremos a nossa classe de domínio:

grails create-domain-class Produto

Agora que temos a nossa  classe de domínio, devemos inserir na mesma seus atributos:

Acesse o diretorio  do projeto e abra o arquivo gerado para a classe Produto.groovy

Detalhamento do diretório acima:

  1. Loja: Pasta da aplicação, gerada após o  create-app;
  2. Grails-app: pasta responsável por todo o negócio e definições de infraestrutura da aplicação. Ex: dominios, controladores, arquivos de configuração de banco, etc.
  3. Domain: Pasta responsável por armazenar todas as classes de domínio do nosso negócio.
  4. Loja (dentro de domain): Por padrão o grails cria uma package para a classe de dominio com o nome do projeto.

Dentro esta o Produto.groovy, o arquivo e dominio que será alterado para atender o negócio.

Abra o arquivo Produto.groovy e insira os atributos (String nome, double preco, int quantidade).

Segue conteudo da classe após alteração:

package loja
class Produto {
    String nome
    double preco
    int quantidade
    static constraints = {     }
}

Para o domínio é apenas isso, por default os atributos no grails são private e tambem por default temos os gets e sets de cada atributo. [Para frente veremos mais detalhes sobre os encapsulamentos e acesso a atributos].

Salve o arquivo e volta para o prompt de comando.

Agora vocês serão apresentados a um comando considerado como palavra mágica para muitos desenvolvedores grails (generate-all).

grails generate-all loja.Produto

Por incrivel que pareça, este simples comando já gerou todo o CRUD do sistema e as Views com o template default do grails, ou seja… Aqui já temos uma aplicação funcional!!

Vamos executar a nossa aplicação, é isso mesmo, já podemos executar e testar nossa aplicação com o seguinte comando:

grails run-app

Pronto… caso agora podemos acessar a nossa aplicação com a seguinte url: http://localhost:8080/loja

Onde, se clicarmos no link do controlador temos acesso a tela de cadastro, alteração, consulta e exclusão do nosso domínio:

Por fim, com esses simples comandos criamos uma apliação (básica) para lojas de cadastro de produtos.

Lembrando que nossa aplicação esta toda default, em breve veremos como alterar template, linguagem e muito mais. Sempre priorizando a simplicidade e a limpeza de código.

Por: Jonatas Emidio