1. Compilador Java
Aliás, você ainda vai ouvir muitas vezes que a vantagem incontestável do Java sobre outras linguagens é a sua multiplataforma. O que é isso e com o que se come? Vamos começar do começo.
O fato é que o computador sabe executar apenas os comandos mais simples.
Para cachorros existem comandos como “Perto”, “Pata” e outros; ao ouvi-los, o cão faz algo importante. No computador, o papel desses comandos é desempenhado por números: cada comando é codificado por um número (também chamado de código de máquina).
Escrever um programa na forma de números é muito difícil, por isso as pessoas inventaram linguagens de programação e compiladores. Uma linguagem assim, por um lado, é compreensível para humanos e, por outro — para o compilador. Um compilador é um programa especial que traduz o texto do programa, escrito em uma linguagem de programação, para um conjunto de códigos de máquina.
Normalmente, o programador escreve o programa em uma linguagem de programação e, em seguida, executa o compilador, que, com base nos arquivos de código escritos pelo programador, cria um único arquivo com código de máquina — o programa final (compilado).
- Programa na linguagem C++
-
Compilador
- Programa, composto por códigos de máquina
O programa resultante pode ser executado imediatamente no computador. A desvantagem dessa abordagem é que o código do programa gerado depende muito do processador e do sistema operacional. Um programa compilado para Windows não funcionará em um telefone com Android.
Se você escreveu um programa para Android, ele no sistema operacional Windows não vai iniciar!
Mas o Java tem uma abordagem muito mais inovadora.
- Programa na linguagem Java
-
Compilador Java
- Programa, composto por códigos especiais (bytecode)
-
Java VM
- Programa, composto por códigos de máquina
O compilador Java não compila todas as classes em um único programa de códigos de máquina. Em vez disso, ele compila cada classe separadamente e não em códigos de máquina, mas em um código intermediário especial (bytecode). A compilação para código de máquina é feita na execução do programa.
Mas quem compila o programa em código de máquina quando ele é executado?
Para isso existe um programa especial chamado JVM (Java Virtual Machine) — Máquina Virtual Java. Primeiro você a inicia e, depois, o programa composto por bytecode. E a JVM, antes de executar o programa desejado, o compila para código de máquina.
Se você tiver um processador potente que suporta um conjunto maior de instruções de máquina, durante a “segunda compilação” será gerado um código de máquina levando em conta especificamente o seu processador e SO. É por isso que o Java às vezes é mais rápido que o C++, que compila diretamente em código de máquina e pode usar apenas as instruções de processador mais difundidas.
2. Erros comuns durante a compilação
Velocidade e otimização de código, por enquanto, não são tão importantes; o que importa é que o compilador verifica seu programa em busca de erros. Ele verifica a correção do código e não deixa passar adiante se encontrar até um errinho.
Exemplo de erro:
Você está tentando atribuir um número a uma variável que só pode armazenar texto.
String userName = 42; // Opa! Não pode fazer isso.
O compilador imediatamente emitirá um erro dizendo que os tipos não correspondem: Cannot implicitly convert type 'int' to 'string'.
Outro exemplo — um erro de digitação no comando println:
System.out.printline("Olá!"); // Erro no nome do método
O compilador dirá: “Não existe esse método — verifique a sintaxe!”
Como ler os erros?
A maioria dos compiladores indica onde está o erro no código e às vezes até sugere opções de correção. Não tenha medo dos erros: cada um deles é um passo rumo ao esclarecimento e a derrotar o seu “chefe” interior.
3. Comentários
Então, imagine: você está escrevendo um programa complexo. Tudo funciona, você é um gênio! Mas, um mês depois, você abre aquele código e... não entende nada. Umas linhas de código aqui, uma variável estranha ali. Na cabeça só: “Com certeza isso foi escrito por qualquer um, menos por mim!”. É aí que os comentários salvam o dia.
Comentários são como bilhetes nas margens de um livro didático ou recados na geladeira (“Cerveja. Não beber. Para amanhã!”). O compilador os ignora, as pessoas — o contrário. Comentários permitem explicar o sentido do código, marcar detalhes importantes e até “desligar” trechos do programa sem apagá-los.
Importante: nenhum compilador lê seus comentários — eles são completamente ignorados!
Comentários de uma linha
No Java há dois tipos de comentários — de uma linha e de múltiplas linhas. Os de uma linha começam com duas barras // e vão até o fim da linha. Tudo o que vem depois de // é considerado comentário e é totalmente ignorado pelo compilador.
Exemplo:
System.out.println("Olá, mundo!"); // Isto imprime uma saudação na tela
Aqui, // Isto imprime uma saudação na tela — é um comentário. Se algo no código não parece claro, escreva assim explicando para que serve a linha!
Mais um exemplo:
int x = 42; // Valor da idade do programador
Você também pode escrever comentários de uma linha em linhas separadas:
// Inicialização da variável com o nome do usuário
String userName = "Vasya";
É quase como falas num roteiro: o comentário explica o quê e o porquê.
Comentários de múltiplas linhas
E se você tiver muita coisa acumulada? Uma história de verdade? Para isso existem os comentários de múltiplas linhas, que começam com /* e terminam com */. Tudo entre esses símbolos é ignorado pelo compilador, mesmo que sejam várias linhas.
Exemplo:
/*
Aqui exibimos o nome do usuário na tela.
Se o nome estiver ausente, escreveremos "Convidado".
*/
System.out.println("Digite seu nome:");
Ou assim:
int age = 18; /* Valor inicial da idade
para o novo usuário */
Atenção: não é possível aninhar comentários de múltiplas linhas dentro de outros. Não tente ser mais esperto que o compilador — isso não vai funcionar.
Ilustração:
| Tipo | Sintaxe | Exemplo |
|---|---|---|
| De uma linha | |
|
| De múltiplas linhas | |
|
4. Exemplos da vida real
“Desativar” uma linha de código:
Às vezes você quer desativar temporariamente algum fragmento de código. Comentários são perfeitos para isso:
// System.out.println("Texto que não é necessário temporariamente");
A linha ficou, mas o compilador não a “vê”.
Anotações TODO e FIXME
Programadores também são gente, e às vezes é preciso lembrar a si mesmo que o código ainda não está pronto ou que há um bug aqui. Para isso, costuma-se escrever:
// TODO: implementar verificação de entrada vazia
// FIXME: esta função calcula a soma de forma incorreta
Muitos editores e IDEs até destacam essas palavras!
Programadores brincam
// Eu não me responsabilizo por este código. Fui obrigado a escrevê-lo contra a minha vontade.
// Querido, eu_sou_do_futuro! Por favor, me perdoe por este código.
// Se eu vir isso de novo, vou ter que começar a levar uma arma para o trabalho.
// Se esta condição algum dia for satisfeita, por favor me avise pelo tel. xxx-xxx-xxx por uma recompensa.
// Caro programador:
//
// Quando você terminar de "otimizar" esta sub-rotina
// e entender o quão grande foi o erro de fazer isso,
// por favor, aumente o contador abaixo como um aviso
// para o próximo cara:
//
// kolichestvo_chasov_potrachennykh_zdes = 42
// Quando comecei a escrever isto, só Deus e eu entendíamos o que eu estava fazendo.
// Agora só restou Deus
// Às vezes me parece que o compilador ignora todos os meus comentários
// Dedico todo o meu código, todo o meu trabalho à minha esposa Darlin, que
// terá que sustentar a mim, nossos três filhos e o cachorro quando
// isso for para produção.
Sim, comentários podem ser muito engraçados. Afinal, são escritos por pessoas de verdade.
GO TO FULL VERSION