Se você está desmotivado no seu trabalho, vale a pena assistir ao vídeo.
“Todo mundo neste país deveria aprender como programar um computador, porque isso te ensina como pensar” – Steve Jobs
Se você está desmotivado no seu trabalho, vale a pena assistir ao vídeo.
“Todo mundo neste país deveria aprender como programar um computador, porque isso te ensina como pensar” – Steve Jobs
Manipular datas em Java sempre foi um trabalho complicado para os iniciantes e até para os experts, ainda porque muitos métodos da classe java.util.Date já estão depreciados na versão 1.6 e ainda assim não oferece todas as funcionalidades necessárias.
A classe Calendar é utilizada para suprir essas necessidades, tornando possível manipular dias, meses, anos e até segundos.
*Effective Java (2nd Edition)Boas práticas para retornar null ou lista vazia
Quando seu método necessita retornar uma Collection, retorne uma lista vazia ao invés de um objeto nulo.*
Isso evita IF desnecerssários (NullPointerException) e possibilita melhor leitura do seu código.
Não se preocupe em verificar se a lista está vazia, list.size() > 0, o FOR já se encarrega disso.
Boas práticas para comentários
Evite comentários óbvios. Seu código deve ser auto explicativo, use nomes de variáveis e métodos que representam exatamente o que significam.
// Busca o pais de origem do usuario String pais = buscarPaisPorIP(ip); // Verifica se o pais de origem eh o BRASIL if(pais.equals("BR") return "Brasil!";
Com muito orgulho que apresento o novo domínio do blog.
Coloque em seus favoritos agora mesmo para receber frequentemente dicas sobre tecnologia e programação 🙂
Aproveite e veja como preparar seu ambiente de desenvolvimento para começar a programar em Java.
Boas práticas para nomes de variáveis
Utilize nomes significativos, não utilize acentuação, não utilize nomes muito grandes (+50 letras)
Os famosos modificadores de acesso em Java são palavras-chave que modificam a forma de como podem ser acessadas as classes, os métodos ou suas variáveis.
Entre eles temos o public, private e protected.
Public – Tudo e todos o conhecem
O modificador public faz com que a classe, método ou variável esteja disponível (visível) para tudo e todos do sistema em qualquer momento da execução. Basicamente esse elemento pode ser alterado por qualquer outra classe não importando qual seja e em qual pacote esteja.
Private – Restrição total
O private é exatamente o inverso do public. O membro que for declarado como private poderá ser acessado apenas por sua própria classe.
Normalmente as variáveis private para serem lidas (get) ou alteradas (set) por outras classes do sistema implementam os métodos Gets e Sets para essas variáveis. Demonstrarei alguns exemplos práticos logo mais abaixo.
Protected – Protegido pelo seu pacote
O modificador protected é menos usado, mas mesmo assim importante. Ele seria uma mistura entre o private e o public. Membros de classe protected são visíveis apenas por outros membros de classe de seu mesmo pacote ou por herança.
Exemplo Prático
Vamos demonstrar com alguns códigos práticos o uso desses modificadores de acesso e entender um pouco melhor como utilizar os métodos gets e sets.
Como exemplo utilizarei a classe Carro com alguns métodos e variáveis utilizando os modificadores de acesso citados acima. Preste atenção em qual pacote cada classe está e seus modificadores.
Pacote MeuMecanio
Classe Carro
package MeuMecanico; public class Carro { public boolean pneuEstaCheio = true; private int velocidade; protected Motor motorCarro; // --- Métodos --- public void acelerar(int forca){ this.velocidade += forca; } public int getVelocidade(){ return this.velocidade; } }
Classe Motor
package MeuMecanico; public class Motor { private int qtdValvulas; public int getQtdValvulas() { return qtdValvulas; } public void setQtdValvulas(int qtdValvulas) { this.qtdValvulas = qtdValvulas; } }
Classe MecanicoConfianca
package MeuMecanico; public class MecanicoConfianca { public void consertarCarro(Carro carro){ // Motor Consertado carro.motorCarro = new Motor(); } }
Pacote OutroMecanico
Classe MecanicoConfianca
package OutroMecanico; import MeuMecanico.Carro; import MeuMecanico.Motor; public class MecanicoConfianca { public void consertarCarro(Carro carro){ // Motor Consertado carro.motorCarro = new Motor(); } }
Explicação
Supondo que você tem um carro e ele está quebrado. Mas é claro que você não deixa seu carro na mão de qualquer mecânico. Logo o único MecanicoConfianca que pode mexer no motor do seu carro está no mesmo pacote que sua classe Carro. (protected)
A outra classe MecanicoConfianca que está em outro pacote não tem acesso a variável Motor do seu carro, mesmo essa classe ter sido instanciada como public (vide imagem acima).
Vamos comentar um pouco sobre a linha: public boolean pneuEstaCheio = true;
Coloquei essa variável para uma simples demonstração do public. Qualquer Mecanico ou qualquer outra classe não importando seu pacote pode alterar o valor da variável pneuEstaCheio, já que em teoria, qualquer pessoa poderia dizer se um pneu está cheio ou não, logo posso dar permissão public neste elemento. (public)
Outro ponto em questão é: private int velocidade;
No caso dessa variável, ninguém pode alterar o valor da velocidade a não ser o próprio carro com o método acelerar.
Ao mesmo tempo para eu saber a velocidade atual do carro só preciso chamar o método getVelocidade que me retornará a velocidade em questão. (private)
Espero que tenha ajudado!
Confuso sobre como implementar corretamente Strings no seu sistema?
Leia o tópico em que falamos sobre as Diferença entre String, StringBuilder, StringBuffer.
Veja nosso post sobre isso. Clique Aqui
Vamos divulgar aqui outro evento que acontecerá em São Paulo no Sheraton WTC Hotel dia 16 de setembro.
Dia 16 de setembro, em São Paulo, acontecerá o GDD 2011, que contará com 5 principais temas para palestras e batepapos, entre eles o Android, Chrome e HTML5.
A inscrição é simples bastando apenas informar alguns dados pessoas como telefone, email e endereço. Após esse processo é necessário resolver alguns exercícios de lógica de programação em qualquer linguagem.
Os famosos desafios do Google são bem conhecidos no meio da tecnologia e todo ano eles criam algumas surpresas. Neste ano por exemplo, os desafios são formados a partir de um “pergaminho escrito na linguagem Googlon”. É preciso responder algumas perguntas sobre a quantidade de verbos no pergaminho e depois ordená-los.
Inclusive essa provinha do Google faz parte do processo de inscrição e serve como críterio de seleção dos convidados.
Para quem quiser saber mais acesse o link abaixo.
http://www.google.com/events/developerday/2011/sao-paulo/
O link para a “provinha” segue abaixo:
https://developerquiz.appspot.com/
Talvez para o desafio do google você precise conhecer um pouco mais sobre Strings e StringBuilders.
Veja nossoo post sobre isso. Clique Aqui
Para início de conversa, o mais importante a saber sobre objetos da classe String é que eles são imutáveis, ao contrário dos objetos StringBuffer e StringBuilder que são mutáveis.
Um objeto imutável significa que o seu valor não pode ser alterado em nenhuma circunstancia. Ou seja, caso você tenha um objeto String com o texto “A”, nunca mais você poderá altera-lo. Agora provavelmente você se pergunta: “Se String é imutável, então como eu consigo alterar o valor dela em qualquer momento?”.
Vamos supor que eu tenho o seguinte código:
String pnf = "Pog"; // Quero concatenar com a string "NotFound"; pnf = pnf + "NotFound"; System.out.println(pnf);
A saida do programa seria “PogNotFound”, apesar de termos usado a mesma variável pnf, internamente o Java se encarregou de criar um novo objeto para guardar a concatenação da variável pnf com a string NotFound. Para demonstrar isso vamos imprimir o seguinte código:
String pnf = "Pog"; pnf.concat("NotFound"); System.out.println(pnf);
E Agora qual o resultado? Apenas “Pog” correto? Isso demonstra que a classe String é imutável, ou seja ela não altera seu valor não importando o método utilizado.
Como resultado, cada operação realizada (concat, substring, trim, replace) com a classe String o Java se encarrega de criar todos esses novos objetos.
Isso pode causar problemas de performance?
Sim, causa. Vários sites demonstram o tempo gasto pela JVM para lidar com essas operações. Talvez para nosso exemplo a diferença seja insignificante, mas em casos onde temos milhares de Strings sendo concatenadas, pode ser um problemão.
Então como podemos resolver isso?
Fácil, usando o StringBuffer ou o StringBuilder
Basicamente tanto a classe StringBuilder e o StringBuffer são mutáveis, e possuem os mesmos métodos. A única diferença é que o StringBuffer é sincronizado (usado quando seus métodos implementam Threads) e o StringBuilder não. Resumindo, caso você não esteja trabalhando com Threads, o método mais eficiente para trabalhar com String é o StringBuilder.
Vamos mostrar um exemplo simples de como utilizar o StringBuilder.
public class PogNotFound { public static void main(String[] args) { String s = new String("Pog"); s.concat("NotFound"); System.out.println(s); // Resultado: Pog StringBuilder sb = new StringBuilder("Pog"); sb.append("NotFound"); System.out.println(sb); // Resultado: PogNotFound } }
Caso precise de ajuda em utilizar algumas das classes citadas, por favor deixe um comentário abaixo, será um prazer ajudar!
Dificuldades em comparação de objetos com o operador == e o método .equals() ?
Veja nossoo post sobre isso. Clique Aqui
Para começar, não direciono esse tópico exclusivamente para a área de TI, muito menos para diretores e gerentes da área. O público alvo para este tópico é VOCÊ, jogador de futebol, estagiário de desenvolvedor de software, diretores de grandes corporações, grupos de estudo, entre outros.
Vou começar apontando o erro de qualquer pessoa.