VidaGeek.net

Linux, Open-source, Programação e Produtividade

Archive for March, 2008

INC - Labelled Loops

Quem disse que java é bonito? C pelo menos tem a coragem de assumir que tem goto. Java disfarça na estrutura que chamamaram de Labelled Loops.

Brincadeiras a parte, embora o goto seja uma palavra reservada do Java, ele não está implementado. Como a única razão para se manter o goto em uma linguagem é você poder quebrar vários laços de uma vez (o que costuma indicar que seu código não deve estar muito bom), Java simplesmente permite que você de nomes aos seus laços e passe, como parâmetro para break e continue o label do seu loop.


public class Teste {
  public static void main(String []args){

  externo:for (int i = 0; i < 10; i++){
                 System.out.println("i = " + i);
                 interno:for (int j = 0; j < 20; j++){
                               System.out.println("j = " + j);
                               if (j < 4 && (j & 1) == 0)
                                 break interno;
                               if ((i * j) / 5 > 0)
                                 break externo;
                            }
               }
  }
}

Quando você rodar esse código feio e nojento, a saída será:


i = 0
j = 0
i = 1
j = 0
i = 2
j = 0
i = 3
j = 0
i = 4
j = 0
i = 5
j = 0
i = 6
j = 0
i = 7
j = 0
i = 8
j = 0
i = 9
j = 0

Fiz o código bem feio pra deixar bem claro que embora exista, isso não deve ser usado nos seus códigos. Um simples break já pode causar confusão. Imaginem um monte de break e continue com uma palavra na frente. Você praticamente está condenando seu projeto ao fracasso (por que dois dias mais tarde você não conseguirá entender o que está escrito).

Posts Relacionados:

  • Retrospectiva 2008
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

    Testes unitários em C++

    CppUnit Logo by Luiz

    De uns tempos para cá, testes unitários ganharam muita importância no desenvolvimento de software. Devido à segurança que eles transmitem e por servirem de documentação, testes unitários deveriam ser utilizados no desenvolvimento de praticamente todos os projetos. Porém, muitas vezes os programadores preferem ou são obrigados a utilizarem linguagens que surgiram antes da popularização dos testes unitários e, portanto, não têm suporte de fácil acesso a bibliotecas de testes unitários. Mas linguagens mais antigas como C++ não foram esquecidas pelos adeptos dos testes unitários. E, para oferecer suporte a testes unitários em C++, existe pelo menos uma biblioteca de testes unitários: CppUnit.

    (more…)

    Posts Relacionados:

  • Os criadores do Skype atacam novamente…
  • Dia C - Usando testes para o desenvolvimento
  • InteGrade: Um Sistema Brasileiro para Computação em Grades
  • Por tudo que é sagrado, escrevam testes!
  • TDD para Ruby - Fibonacci
  • FISL 9.0: Coding Dojo
  • Dia C - Estratégias de depuração (debug)
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

  • 1 Comment
  • Filed under: C, Dicas, Programacao
  • Projeto ooo2gd
    O Open Office já é famoso entre usuário de Linux e começa a se difundir pelos usuários de Mac e Windows. Trata-se de um excelente pacote office, que é capaz (pelo menos na minha opinião) de substituir o Microsoft Office. Por outro lado, existe o Google Docs, bem mais simples mas com outras vantagens como a de manter seus arquivos na internet e portanto os mesmos estão acessíveis a partir de qualquer micro. Mas o interessante é que você pode se aproveitar de ambas as plataformas.

    (more…)

    Posts Relacionados:

  • NeoOffice: Um OpenOffice Nativo para Mac
  • Google remove funcionalidade, usuários reclamam e… nada.
  • O Mal da Google
  • Sincronizando o Address Book do seu mac com os Contatos do Gmail
  • Google para todos os gostos
  • Alguns Videos da Google….
  • Viva aos programadores brasileiros
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

    INC - Bloco Estático

    Em Java, existe um bloco de código que é executado no momento em que o ClassLoader pega a sua classe e carrega ela. Isso ocorre antes de existir uma instância da sua classe.

    
    public class Teste {
    	public static void main(String []args){
    		System.out.println("Antes de criar a variável");
    		A a;
    		System.out.println("Depois de criar a variável");
    		//Vamos criar 10 instâncias de A
    		for (int i = 0; i < 10; i++)
    			a = new A();
    		System.out.println("Depois de criar a instância");
    	}
    }
    
    class A {
    
    	static {
    		System.out.println("Bloco Estático");
    	}
    
    	A(){
    		System.out.println("Construtor");
    	}
    }
    

    se você rodar esse código, a saída será:

    
    Antes de criar a variável
    Depois de criar a variável
    Bloco Estático
    Construtor
    Construtor
    Construtor
    Construtor
    Construtor
    Construtor
    Construtor
    Construtor
    Construtor
    Construtor
    Depois de criar a instância
    

    Notem que o ClassLoader coloca a sua classe na memória apenas uma vez, independente de quantas classes você instancia (ok. Eu já ouvi histórias de magos que conseguem fazer a VM executar o bloco estático várias vezes sem trocar o ClassLoader, mas não faço idéia de como fazer isso.).

    E Antes que os mais rigorosos gritem comigo, nada garante que a variável vai ser alocada entre as duas primeiras chamadas ao println. A VM pode simplesmente criar a variável antes das chamadas.

    Posts Relacionados:

  • INC - Pré construtores
  • Dia C - Pilha do C
  • Combatendo Spammers
  • ACM ICPC - Brasil na maratona de programação 2008
  • Substituindo valores de um Hash em Ruby
  • Dia C - Tuning
  • Retrospectiva 2008
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

  • 0 Comments
  • Filed under: Dicas, Java, Programacao