31 Mar
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:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
28 Mar

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.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
26 Mar

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.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
24 Mar
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:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.