Capítol 2 — Agafa i deixa
Capítol 2

Agafa i deixa

En Karel pot recollir perles del fons marí i deixar-les en qualsevol altra casella. En aquest capítol aprendrem grab(), drop() i la condició pearl_here(), i descobrirem que els errors també formen part de la programació.

La motxilla d'en Karel

En Karel porta sempre una motxilla. Quan recull una perla, la guarda a la motxilla. Quan deixa una perla, la treu de la motxilla i la col·loca a la casella on és ell en aquell moment.

Pots veure el contingut de la motxilla a la barra superior del simulador: el número al costat de l'icona de la motxilla indica quantes perles porta en Karel en aquell moment.

Al principi, la motxilla sempre és buida.

Recollir una perla: grab()

grab() fa que en Karel reculli la perla de la casella on ell és i la guardi a la motxilla. Fixa't bé: no és la casella del davant, sinó la casella on en Karel es troba en aquell moment.

Si en Karel fa grab() en una casella sense perla, el programa s'atura amb un error. Això té sentit: no es pot agafar el que no hi és.

En l'exemple, en Karel avança fins a la perla i la recull:

Observa com la perla desapareix de la casella i el comptador de la motxilla puja a 1. En Karel ha recollit la perla correctament.

Deixar una perla: drop()

drop() fa que en Karel tregui una perla de la motxilla i la deixi a la casella on ell és. Igual que grab(), opera sobre la casella actual, no sobre la del davant.

Si en Karel fa drop() però la motxilla és buida, el programa s'atura amb un error. No es pot deixar el que no es té.

Observa com en Karel recull la perla, avança, i la deixa en una altra casella:

La perla ha viatjat tres caselles cap a la dreta. En Karel és el seu transportista.

Saber si hi ha una perla: pearl_here()

pearl_here() no és una ordre: és una condició. Respon la pregunta «hi ha una perla a la casella on sóc ara?» amb veritat o fals.

Ara mateix no pots usar pearl_here() sola — aprendre a usar condicions és la feina del Capítol 6. Però és important que coneguis el seu nom i el seu significat, perquè el faràs servir molt aviat.

Fixa't en la coherència del disseny:

  • grab() opera sobre la casella actual.
  • drop() opera sobre la casella actual.
  • pearl_here() pregunta per la casella actual.

Les tres paraules parlen del mateix lloc. No cal recordar excepcions.

Els errors no són fracassos

Quan en Karel troba un error — una roca al davant, una casella buida quan vol fer grab(), o la motxilla buida quan vol fer drop() — el programa s'atura i mostra un missatge al log.

Això és normal i útil. L'error t'indica exactament on ha anat malament. Llegeix-lo, corregeix el codi, i torna a prémer ▶ Executa.

Prova-ho: en l'exemple següent el codi té un error deliberat. En Karel intenta fer grab() en una casella buida. Executa'l i mira el missatge:

L'error no ha espatllat res. Prem ⟳ Reinicia i el món torna al seu estat inicial. Pots tornar a intentar-ho tantes vegades com vulguis.

Exercici

Hi ha dues perles al fons marí. En Karel ha de recollir-les totes dues i portar-les fins a la casella de destí, marcada a l'extrem dret de la fila del mig. Quan acabis, la motxilla d'en Karel ha de tenir dues perles i ell ha d'estar a la casella de destí.

Pista: recorda que grab() recull una perla per execució. Si n'hi ha dues al llarg del camí, hauràs de fer grab() dues vegades, cada cop a la casella correcta. Al final, fes drop() dues vegades per deixar-les totes dues.