Programar implica errar! Por mais experiente que um programador seja, há sempre um erro “à espreita”, que aproveita a mais pequena distração para se instalar no programa.
Há erros de vários tipos e mais ou menos difíceis de detetar. Encontrar erros pode ser um desafio altamente interessante.
2.4.1. Erros de compilação (sintáticos)
A sintaxe de uma linguagem define as regras de construção de frases dessa linguagem. Um erro de sintaxe numa frase em língua natural pode não ser grave – as pessoas que lêem ou ouvem essa frase conseguem entendê-la, pois fazem como que uma correção automática no seu cérebro. Claro que isto pode trazer alguma ambiguidade, pois essa correção pode não ser no sentido exato da frase original.
Quando o “interlocutor” é um computador e a linguagem é uma linguagem de programação, as regras têm que ser muito mais restritas e completas pois o computador não pode ter dúvidas acerca de como traduzir as instruções do programa.
O compilador verifica todas as instruções do programa e só as traduz se estiverem corretas do ponto de vista sintático e coerentes do ponto de vista das componentes que o formam.
Exemplos de erros de sintaxe:
Falta de algum { , ( ou ;
Palavra desconhecida onde devia estar uma palavra reservada. Exemplo: public clast MyFirstProgram {
Ficheiro onde é guardado o texto de uma classe ter um nome diferente. Exemplo: classe de nome MyProgram guardada num ficheiro chamado YourChocolate.java
2.4.2. Erros semânticos
Há erros que o compilador não consegue detetar pois são erros que não têm a ver com a sintaxe mas com a semântica do programa, ou seja, com o significado das instruções e do programa (uma exceção a esta regra são os erros de tipos, como veremos no próximo capítulo, que, apesar de serem erros semânticos, são detetados pelo compilador).
Uma instrução pode estar correta do ponto de vista sintático ou dos tipos, mas o seu significado ser errado do ponto de vista do programa onde está incluída. No entanto, o compilador gera o ficheiro de bytecode e o programa pode ser executado.
Erros de execução. Alguns destes erros semânticos provocam situações em que o computador não consegue continuar a executar o programa. Como exemplo temos uma divisão por zero. Pode ser complicado detetar estes erros porque podem aparecer só em algumas execuções do programa, quando estão envolvidos valores específicos que os provocam.
Erros lógicos. Este tipo de erros abrange as situações em que as instruções do programa não fazem exatamente o pretendido, ou seja, implementam de forma errada aquilo que foi especificado. Exemplo: o programa aplica mal as regras de cálculo de um imposto. Estes erros são os mais difíceis de detetar pois o programa é executado sem problemas do início ao fim; é aquilo que ele faz que está errado relativamente ao que foi especificado.