L'abstracció és un concepte clau en la resolució i programació de problemes. Quan algú et diu: "Ves a rentar-te les dents", en realitat t'està dient: Ves al lavabo, agafa el raspall de dents, posa-hi pasta, raspalla't les dents, etc. Això és l'abstracció, posar un nom per a un nombre més detallat d'operacions i, en programació, es realitza a través de les funcions.
El principal propòsit de les funcions és agrupar el codi que s’executa diverses vegades. En general, sempre cal evitar la duplicació de codi perquè si alguna vegada decidiu actualitzar el codi, si, per exemple, trobeu un error que heu de corregir, haureu de recordar de canviar el codi a tot arreu on l’heu copiat.
Les funcions també faciliten la lectura del codi, fent-lo més entenedor, així com resoldre grans problemes dividint-los en petites parts.
Per exemple, si mirem al codi de l'aplicació de preguntes de matemàtiques, veiem que hi ha uns trossos de codi que es repeteixen molt, el codi que navega a una pantalla, reinicialitza el temps i canvia la pregunta:
Per tant, el codi quedarà molt més entenedor si creem una funció que faci aquestes operacions i la utilitzem cada cop que s'hagin de realitzar:
Aquest tipus de modificacions per tal de millorar el codi s'anomenen refactorització i són molt habituals en programació. És quan canviem el codi intern d'una aplicació sense canviar el seu comportament extern per l'usuari.
Abans de poder utilitzar les funcions s'han de definir. Les funcions es defineixen amb el bloc to de la secció Functions de l'editor de blocs.
Canvia do something per un nom descriptiu del què fa la funció. Quan crees una funció, automàticament apareix un nou bloc a la secció Functions amb el nom de la teva funció. Aquest bloc és el que et permetrà utilitzar la teva funció en qualsevol punt del programa i els cops que vulguis.
Sovint tenim un codi que es repeteix però amb alguna petita diferència, p.ex., en el cas anterior del canvi de pantalla, a vegades ha de navegar a la pantalla "Correcte", a vegades a la "Incorrecte" i a vegades a la "ForaDeTemps". Aquests casos es poden solucionar amb els paràmetres. Els paràmetres són variables locals que només es poden utilitzar a dins de la funció. Quan creem una funció, podem especificar els paràmetres (variables locals) que tindrà fent clic a la rodeta i posant un nom per al paràmetres:
En aquest cas, la funció canviPantalla tindrà una variable anomenada pantalla. Una funció pot tenir tots els paràmetres que vulguem. Si ara anem a la secció Variables veurem que s'ha creat una nova variable anomenada pantalla (alerta!, aquesta variable només l'he d'utilitzar dins de la funció on s'ha creat). Ara ja podem canviar el nom de la pantalla al bloc navigate.to per la variable.
I si mirem al bloc per utilitzar la funció veurem que cada cop que l'utilitzem ens demana quin és el valor dels paràmetres, en aquest cas pantalla. Això ens permet reutilitzar les funcions en moltes situacions diferents.
Si ens fixem en la funció anterior veiem que podria ser interessant introduir altres paràmetres com per exemple el valor del LabelCount o el valor que es suma a l'índex. Introduir aquests valors com a paràmetres (és a dir variables locals) ens permetria modificar el temps o la pregunta que es mostra aprofitant la mateixa funció.
A més d’acceptar paràmetres d’entrada, una funció també pot retornar un valor. A vegades les funcions poden generar un resultat o un valor que ens interessa utilitzar en un altre punt del programa. p.ex., en funcions que realitzen operacions matemàtiques o modifiquen els elements d'una llista. En aquests casos podem definir una funció amb retorn i emmagatzemar aquest retorn en una variable global per utilitzar-lo en un altre lloc.
Una pràctica molt utilitzada en el desenvolupament de programari de qualitat, és realitzar programes amb funcions que funcionen com a caixes negres, és a dir funcions on només cal saber quins són els paràmetres d'entrada i quin és el valor de retorn. El que passi a dins la funció és totalment independent de la resta del programa. Això també permet la col·laboració entre diferents equips de desenvolupadors que treballen en un mateix programa i cadascú en resol una petita part.
Refactoritza l'app del viatger per tal que el codi sigui més entenedor i menys repetitiu. Has de:
Buscar aquelles instruccions que es repeteixen en diverses ocasions i substitueix-les per una funció.
Identifica els grups d'instruccions que realitzen una subtasca i substitueix-los per una funció amb el nom de la tasca que realitzen. Això farà que el teu codi sigui més entenedor.
Refactoritza el teu projecte Trivial App per tal que el codi sigui més entenedor i menys repetitiu. Has de:
Buscar aquelles instruccions que es repeteixen en diverses ocasions i substitueix-les per una funció.
Identifica els grups d'instruccions que realitzen una subtasca i substitueix-los per una funció amb el nom de la tasca que realitzen. Això farà que el teu codi sigui més entenedor.