Practica4 PC (Laboratori Integrat) (2016)

Ejercicio Catalán
Universidad Universidad Autónoma de Barcelona (UAB)
Grado Genética - 2º curso
Asignatura Tècniques Instrumentals
Año del apunte 2016
Páginas 7
Fecha de subida 06/04/2016
Descargas 8
Subido por

Vista previa del texto

Grau de Genètica curs 2015-2016 Laboratori Integrat IV Tècniques Instrumentals pràctica 4: Subrutines, llibreries i mòduls Professors: Raquel Egea (raquel.egea@uab.cat) Sergi Hervás (sergi.hervas@uab.cat) Introducció Quan programem ens trobem molt sovint amb la necessitat de repetir les mateixes tasques diverses vegades (per exemple, si hem de transcriure de DNA a RNA no només una sinó diverses seqüències dins de variables diferents).
En aquest cas podem crear subrutines, elements que ens permeten reutilitzar un mateix bloc de codi sense tenir que escriure'l cada vegada. Les subrutines es poden agrupar en arxius externs en forma de mòduls i llibreries, així doncs podem reutilitzar les subrutines, no només al nostre codi actual, sinó a futurs programes.
Activitat 1: Subrutines.
1.1 Definir i cridar a una subrutina.
Les subrutines (o funcions), són blocs de codi que podem reutilitzar dins dels nostres programes. Les definim d'aquesta manera: sub nomSubrutina { #codi } Posem la paraula sub, a continuació el nom que li volguem donar a la subrutina i entre claus posarem les instruccions que s’executaran cada vegada que invoquem a la subrutina. Els noms de les subrutines segueixen la mateix norma dels noms de variable, és a dir, podem anomenar-les de qualsevol manera, però el més habitual és fer servir d'una a poques paraules que indiquen "què" fa la subrutina en qüestió. Les subrutines es poden escriure a qualsevol part del nostre codi, en són independents fins que no les cridem, però s'acostumen a escriure al final com podeu veure a aquest exemple: #sub_helloWorld.pl sayHelloWorld(); exit; sub sayHelloWorld { print "Hello World from a subroutine!"; } Hem escrit la subrutina després de la línia "exit;" per que es vegi bé aquesta "independència" del codi. A més, si posem el “sayHelloWorld();” després del exit, la subrutina no s’executarà quan la invoquem. Com hem vist, el print de la subrutina només s'ha executat quan l'hem "cridat" pel seu nom dins del nostre codi. Per cridar a una subrutina ho fem tal i com ho faríem amb qualsevol altra funció.
Exercici 1A: Crea un programa amb el codi de l'exemple per veure com funcionen les subrutines.
1.2 Passar paràmetres dins d'una subrutina.
L'anterior exemple només ens ha servit per aprendre com definim i cridem les subrutines, l'autèntic potencial el tenim quan podem passar valors dins de les nostres subrutines com a l'exemple següent de suma de variables: #sub_suma.pl $val1 = 10; $val2 = 25; sumValues ($val1, $val2); exit; sub sumValues { my ($var1, $var2) = @_ ; my $total = $var1 + $var2; print "La suma és $total"; } Simplement hem posat els valors que volem utilitzar dins el parèntesis quan cridem a la subrutina. Aquests valors els podem escriure directament o podem posar variables que els continguin, com a l’exemple. Dins la subrutina, els nostres valors s’han emmagatzemat automàticament en una matriu, cada valor que vulguem passar s’emmagatzemarà per ordre en la matriu @_. Una vegada dins la subrutina, podem recuperar els valors, en l’exemple anterior, la instrucció " ($var1, $var2) = @_ ; " és equivalent a: $var1 = $_[0]; $var2 = $_[1]; Finalment, cal destacar el "my" que hi ha davant de les declaracions de variables dins de la subrutina. En aquest cas quan posem el "my" fem que les variables siguin locals, és a dir, només existeixen dins la subrutina, així evitem problemes amb variables amb el mateix nom al nostre codi i dins les nostres subrutines.
Exercici 1B: Modifica el codi de l'exercici anterior per a crear una subrutina que en comptes d'una salutació genèrica, saludi a un hipotètic usuari. Quan cridis a la subrutina, has d’indicar el nom de la persona a la que ha de saludar.
1.3 Retornar valors.
Les funcions que utilitzem no solen imprimir missatges, normalment fan una sèrie de càlculs i ens retornen un o més valors. Si volem que les nostres subrutines ens retornin valors, haurem d’utilitzar la instrucció return.
#sub_suma.pl $var1 = 10; $var2 = 25; $total = sumValues ($var1, $var2); print "El total és $total"; exit; sub sumValues { my ($var1, $var2) = @_ ; my $result = $var1 + $var2; return ($result); } Quan una subrutina es troba amb la instrucció return retorna el valor o valors que s’indiquen i deixa d’executar-se. En el cas que ens interessi tornar un valor o un altre en funció d’unes determinades condicions, podrem utilitzar diversos return, però només s’executarà un d’ells. Mireu com s'utilitza en una subrutina per buscar el menor valor entre 2 variables: sub compareValues { my ($var1, $var2) = @_ ; if ($var1 > $var2) { return ($var2); } elsif ($var1 < $var2) { return ($var1); } else { return ("les variables són iguals"); } } Exercici 1C: Crea un programa amb el codi de l'exemple i executa’l passant diferents valors per veure com canvia el resultat.
Activitat 2: Llibreries i Mòduls.
2.1 Crear una llibreria de subrutines.
Les subrutines ens serveixen per reutilitzar el mateix codi diverses vegades, però, i si volem reutilitzar les subrutines en programes diferents? En aquest cas podem crear Mòduls o Paquets (Modules/Packages). En aquest cas, l’arxiu d’un mòdul acaba amb .pm. Tant el programa com l’arxiu del mòdul han d’estar a la mateixa carpeta, si no, hauríem d’indicar a quina carpeta es troba el mòdul.
Al tipus de mòdul més senzill l'anomenem llibreria, i no és més que un arxiu de Perl amb les nostres subrutines i que cridem dins del nostre codi amb la instrucció use. Fent disponibles totes les subrutines al nostre programa com la resta de funcions. Dins d'un mòdul és obligatori acabar amb "1;".
#myLib.pm #hello.pl sub sayHelloWorld { print "Hello Word from a module!"; } use myLib; 1; exit; sayHelloWorld(); Un altre tipus de mòdul, son els paquets. En aquest cas, la primera instrucció del mòdul es "package" més el nom del paquet. L’arxiu s’ha de dir igual (més l’extensió .pm).
#myLib.pm #hello.pl package myLib; use myLib; sub sayHelloWorld { print "Hello Word from a module!"; } myLib->sayHelloWorld(); exit; 1; Fixeu-vos que després podem fer servir les subrutines de la llibreria amb aquesta estructura.
nomModul->nomFuncio(); Exercici 2A (per entregar): Crea una llibreria amb subrutines variades que realitzin tasques que hem practicat en sessions anteriors per treballar amb seqüències (obrir arxius de seqüències, passar de DNA a RNA, comptar nucleòtids, complementària reversa...). Crea un programa que cridi el teu mòdul i utilitzi cada funció sobre un arxiu de seqüència.
2.2 Utilitzar mòduls i llibreries creades per altres persones.
Com heu vist, creant un mòdul per guardar les nostres subrutines ens permet reutilitzarles als nostres programes facilitant escriure el codi de les coses que més habitualment repetim. Una altra avantatge és que el codi només està escrit una vegada, si hi ha errors només cal corregir-ho dins el mòdul.
Moltes de les accions que ens podem plantejar a l'hora de programar ja han estat un problema segurament per alguna altra persona en el passat. En certes ocasions, un cop solucionat aquest problema, aquesta persona ha decidit compartir el seu mòdul penjant-lo a la xarxa per a que d'altres persones el puguin utilitzar.
Moltes situacions ja han estat solucionades com per exemple connectar a bases de dades i realitzar consultes SQL amb Perl (mòdul DBI), interaccionar i crear pàgines web (mòdul CGI) o operacions diverses amb dades biològiques com seqüències de DNA o proteïna (col·lecció de mòduls de BioPerl).
Amb "Active Perl" podem instal·lar aquests mòduls amb el PPM (Perl Package Manager) i la informació de cadascun la tenim a la web de CPAN (http://www.cpan.org).
...