Sovint, haurem d'escriure fragments de codi que s'han d'invocar més d'una vegada perquè la nostra aplicació realitzi la seva feina. Haver de repetir aquest codi dins del nostre programa ens provoca dos inconvenients:
Haurem d'escriure més del necessari per poder duplicar la funcionalitat en qüestió (pèrdua de temps).
Al repetir aquests fragments feim que el codi sigui cada vegada més difícil de llegir (pèrdua de claredat).
Per això, els llenguatges de programació ens donen la possibilitat de definir funcions (fragments de codi) que es poden cridar i executar tantes vegades com sigui necessari.
Anem a centrar-nos a la calculadora de matrius (exercici resolt de l'apartat anterior) per tal d'entendre bé els avantatges de definir funcions. En primer lloc, fixem-nos en que el fragment de codi encarregat d'imprimir per pantalla les matrius s'ha de repetir fins a 7 vegades dins del nostre programa. Això és una pèrdua de temps que es pot resoldre definint una funció per imprimir i cridant-la sempre que sigui necessari.
Sintaxi: Cal notar que per declarar la funció es fa servir la paraula clau "def" (definir) seguida pel nom que li donam ("impr"). Convé que aquest nom estigui relacionat amb la funcionalitat i sigui prou descriptiu, i a més, no pot coincidir amb cap paraula clau predefinida dins Python.
A continuació i entre parèntesi s'han d'incloure els paràmetres que la funció farà servir per dur a terme la seva tasca. D'això s'en diu "passar paràmetres". Després del dos punts, només falta incloure el codi desitjat.
D'aquesta manera es solventa el problema del punt 1, pèrdua de temps. Però les funcions també ens ajuden a escriure codi amb molta més claretat. Continuem amb l'exemple de les matrius i comparem les dues versions següents:
Fixem-nos a la part dels condicionals. Com que ara hi ha molt menys codi i hem triat el nom de les funcions d'una manera prou clara, ara l'algoritme es pot llegir molt més fàcilment. Això resol el problema 2 (pèrdua de claretat).
Sintaxi: A les noves funcions ha aparegut la nova paraula clau "return". Aquesta serveix per retornar el valor del càlcul de la funció al programa i poder-lo utilitzar a altres bandes, encara que hi ha funcions com "impr" que no necessiten retornar cap valor.
D'altra banda, programar així és més fàcil ja que ens ajuda a dividir un problema gran en molts de petits que després es poden assemblar. D'això es diu modularitat i és una molt bona pràctica de programació. Aquesta propietat ens permet dividir el treball entre les persones d'un grup quan s'han d'escriure aplicacions grans.
Exercicis:
1. Escriu el codi d'una calculadora de nombres reals amb les operacions de suma, resta, multiplicació, divisió, exponenciació, ... Arriba fins allà on consideris, però fes-ho fent servir funcions i escrivint els comentaris necessaris per augmentar la claretat del teu codi.