Gestió d'errors en un codi
Quan un programa no fa el que volem, diem que hi ha un error. Però no tots els errors són iguals. N'hi ha uns que apareixen abans que en Karel faci cap moviment, i n'hi ha que apareixen un cop s'ha iniciat el programa.
On pot fallar un programa?
Quan prems ▶ Executa, el sistema fa dues coses, i en aquest ordre:
- En primer lloc, llegeix el codi sencer, per entendre què ha de fer.
- En segon lloc, executa les instruccions, una per una.
Els errors poden ocorrer a la primera fase o a la segona. Els que apareixen a la primera fase s'anomenen errors de sintaxi. Els que apareixen a la segona, errors d'execució.
Error de sintaxi: el codi està mal escrit
Un error de sintaxi vol dir que el codi té alguna paraula o símbol que el sistema no entén.
Exemples habituals d'errors de sintaxi:
- Oblidar els parèntesis:
moveen lloc demove(). - Escriure malament una ordre:
mov()oturnleft()en lloc deturn_left(). - Oblidar els dos punts:
for i in range(3)en lloc defor i in range(3):. - Indentar malament les línies d'un bloc.
La característica clau és aquesta: aquest error es detecta abans que en Karel faci cap acció. El sistema llegeix el codi, troba que no l'entén, i s'atura immediatament. En Karel ni arriba a sortir de la seva casella.
En l'exemple següent, el codi té dues línies correctes i una tercera amb un error de sintaxi (falta els parèntesis a move). Executa'l i observa què passa:
En Karel no s'ha mogut gens, tot i que les dues primeres línies eren correctes. Per què? Perquè el sistema llegeix el codi sencer abans d'executar-lo. Com que la tercera línia no s'entén, rebutja tot el programa sense executar-ne cap part.
Per corregir un error de sintaxi, llegeix el missatge d'error al log (la finestra inferior): t'indicarà en quina línia és el problema. Després revisa aquella línia amb atenció, busca el detall tipogràfic (un parèntesi, un caràcter oblidat, una paraula mal escrita) i corregeix-lo.
Error d'execució: en Karel fa una cosa no permesa
Un error d'execució vol dir que el codi està ben escrit (el sistema l'entén), però a mig camí en Karel intenta fer una cosa que no és permesa amb les regles d'aquell món. El programa comença bé, es va executant, i en un moment concret s'atura amb un error.
Exemples típics d'errors d'execució:
- Intentar avançar quan tens una paret al davant (en Karel xoca).
- Intentar avançar quan tens una roca al davant (en Karel xoca).
- Fer
grab()en una casella on no hi ha cap perla. - Fer
drop()quan la motxilla no conté cap perla.
La característica clau és aquesta: aquest error es detecta durant l'execució. En Karel comença a fer diverses accions, i s'atura just en el moment concret en què l'acció no és correcta.
En l'exemple següent, el codi té cinc ordres move(). Però el món només té cinc columnes i en Karel comença a la primera. Executa'l i observa que en Karel avança unes quantes caselles abans que el programa s'aturi:
Veus la diferència? En el cas anterior (error de sintaxi) en Karel no es movia gens. Ara en Karel ha fet part del camí abans d'aturar-se. El codi estava ben escrit; el problema és que la lògica no encaixa amb el món.
Comparativa dels dos tipus
Aquesta taula resumeix la diferència:
| Error de sintaxi | Error d'execució | |
|---|---|---|
| Quan es detecta | L'error s'assenyala immediatament i el programa no s'inicia. | L'error ocorre durant l'execució del codi, en l'instant on en Karel realitza una acció no permesa. |
| Què fa en Karel | En Karel no fa res, perquè no s'executa ni la primera línia de codi. | En Karel es mou i fa accions, fins al moment on hi ha una acció no permesa. Llavors, s'atura. |
| Com es corregeix | Els errors de sintaxi són senzills de resoldre: has de trobar una errada tipogràfica o de descuit (parèntesis, dos punts, nom mal escrit). | Els errors d'execució no sempre són immediats de resoldre: has de repensar la lògica del programa, o bé canviar l'ordre de les accions, o bé afegir o treure instruccions. |