Funcions
Quan una mateixa seqüència d'instruccions apareix una i altra vegada, és el moment de donar-li un nom. En aquest capítol aprendrem def nom():, que ens permet inventar les nostres pròpies instruccions i que en Karel entendrà igual que move() o grab().
Una seqüència d'instruccions que fem servir sovint
Imagina que en Karel ha de pujar una escala de 3 graons. Per pujar un graó, el procés és sempre el mateix: gira a l'esquerra, avança, gira a la dreta, avança.
Com que l'escala té 3 graons — i per cadascun hem dedicat 4 instruccions —, haurem d'escriure 12 instruccions. Si l'escala tingués 10 graons, hauríem d'escriure a mà 40 instruccions, però no té gaire sentit, perquè són repeticions de les 4 instruccions bàsiques.
Primer, observa com es puja un sol graó. Són 4 instruccions:
En Karel ha pujat un graó. Ara imagina que has de repetir-ho per cada graó d'una escala llarga.
Escriure una instrucció nova: def nom():
def (abreviació de define, «definir») permet crear una instrucció nova que en Karel reconeixerà igual que move() o turn_left(). La seva sintaxi és aquesta:
def nom():
instrucció1()
instrucció2()
...
El nom que tries hauria de descriure clarament el que fa la funció. puja_grao() és molt millor que cosa() o a().
Ara definim puja_grao() i pugem tres graons. Compara el codi d'aquí amb el que necessitaries sense def:
Amb 7 línies, aconseguim el mateix que amb 12 línies. A més de ser més breu, el codi és més llegible. De fet, quan llegim puja_grao(), sabem exactament el que fa, sense haver de desxifrar les quatre instruccions que conté.
Les funcions es poden combinar
Una funció pot cridar altres funcions al seu interior. Pots construir accions complexes a partir d'accions més simples, com en un joc de construccions.
Per exemple, si vols que en Karel faci «puja un graó i recull una perla», pots definir una nova funció:
def puja_i_recull():
puja_grao()
grab()
Això funciona sempre que puja_grao() ja estigui definit abans de ser cridat.
Regla important: les definicions def han d'anar sempre al principi del programa, abans del nostre programa principal.
Exercici
puja_grao() i usa-la per arribar a la perla i recollir-la.
Pista: defineix puja_grao() amb quatre instruccions. Llavors crida-la quatre vegades i afegeix un grab() al final.