Funcions

Una funció és un "tros de codi" que realitza una determinada acció. Quan ha finalitzat l'execució de la funció el flux de programa retorna a la següent instrucció a la crida de la funció.

Bash - Declaració d'una funció

Per a crear una funció en bash utilitzem la paraula clau function seguit del nom de la funció. Totes les instruccions que formen part de la funció s'inclouen entre claus.

function nomFuncio() {
    instrucció1
    instrucció2
    ...
}

Bash - Crida d'una funció

Per a cridar una funció utilitzant bash script ho farem a través del seu nom. Cal que TOTES les funcions estiguin definides abans del codi principal (codi que s'executa quan s'inicia el script). Quan una funció crida a una altra funció l'ordre no és important.

Exemple

function imprimir() {
    echo "Imprimint des d'una funció"
}

# CODI PRINCIPAL
echo "Abans de cridar la funció"
imprimir
echo "Després de cridar la funció"

Exemple de programa on una funció crida a una segona funció. L'ordre en què estan definides la funció no és important a nivell d'execució, sempre i quan estiguin abans del codi principal del programa.

function imprimir11() {
    echo "Imprimint des d'una funció"
    imprimir12            # Crida correcte, la funció està definida abans del codi principal
}

function imprimir12() {
    echo "Imprimint des d'una funció"
}

# CODI PRINCIPAL
echo "Abans de cridar la funció"
imprimir11
echo "Després de cridar la funció"

Codi incorrecte! Quan es crida a la funció "imprimir12" aquesta encara no ha estat definida dins el script.

function imprimir11() {
    echo "Imprimint des d'una funció"
    imprimir12            # Crida incorrecte, la funció està definida després del codi principal
}

# CODI PRINCIPAL
echo "Abans de cridar la funció"
imprimir11
echo "Després de cridar la funció"

function imprimir12() {
    echo "Imprimint des d'una funció"
}

Paràmetres

La utilització de paràmetres ens permet que una funció sigui adaptable a més d'una situació. Per exemple, suposem que disposem d'una funció que ens retorna si un suposat fitxer (/var/my.lock) existeix o no en el sistema. Aquesta funció és poc útil: només serveix per a comprovar aquest fitxer concret. És més interessant diposar d'una funció que permeti saber si un fitxer determinat existeix o no en el sistema. Per aconseguir aquest objectiu és necessari enviar a la funció el fitxer a comprovar l'existència.

La informació que es vulgui enviar a una funció s'inclourà després del nom de la funció en la crida de la funció.

nomFunció dada1 dada2...

Per a obtenir aquesta informació dins la funció utilitzarem $1 , $2 ...

Exemple

#!/bin/bash
function printfunct() {
        echo "Inside function"
        echo "DATA SENT: $1 $2 $3"
}

echo "Before calling function"
info="Variable!"
printfunct "Literal" "$info" 34         # enviant un literal, una variable i un número
echo "After function"

Retorn d'informació

En un programa en bash totes les variables són globals. Per tant, els canvis que es faci a una variable en una funció afectarà a totes les referències de la variable en tot el programa.

De forma opcional una funció pot retornar un número, que normalment és l'estat en què ha finalitzat l'execució d'una funció. Així, per exemple, una funció que hagi d'escriure un text en un fitxer, podria tenir la següent codificació d'errors:

0: Sense error 1: Fitxer no existeix 2: Fitxer sense permisos

Per a retornar un valor d'una funció utilitzem la paraula reservada "return" seguida del valor a retornar.

#!/bin/bash
function returnValue() {
        echo "Some work!"
        return 10
}

printfunct
echo "Valor retornat per la funció: $?"

Python - Declaració d'una funció

Les funcions en Python es defineixen a través de la paraula especial "def" (enlloc de function de bash). Després del parèntesis s'inclouran els dos punts (:) que indiquen l'inici del bloc d'instruccions de la funció. Les instruccions de la funció han d'estar indentades tal i com es mostra en l'exemple.

Exemple

def nomFuncio():
    instrucció1
    instrucció2
    ...

Python - Crida d'una funció

Per a cridar una funció utilitzant python ho farem a través del seu nom.

#!/usr/bin/env python3

def myfunc():
        print("Dins la funció")

print("Abans de la funció")
myfunc()        # calling the function
print("Després d'executar la funció")

Python - Paràmetres

La utilització de paràmetres ens permet que una funció sigui adaptable a més d'una situació. Per exemple, suposem que disposem d'una funció que ens retorna si un suposat fitxer (/var/my.lock) existeix o no en el sistema. Aquesta funció és poc útil: només serveix per a comprovar aquest fitxer concret. És més interessant diposar d'una funció que permeti saber si un fitxer determinat existeix o no en el sistema. Per aconseguir aquest objectiu és necessari enviar a la funció el fitxer a comprovar l'existència.

Python ens dóna molta flexibilitat en relació a l'utilització de paràmetres. La definició general d'una funció amb paràmetres és:

def nomFuncio([paràmetre1[=valor1]][,paràmetre2[=valor2]...) {
    instrucció1
    instrucció2
    ...
}

La correlació entre els paràmetres de la definició de la funció amb els valors de la crida es fa segons la seva posició.

#!/usr/bin/env python3

def mesGran(num1,num2) {
    if num1>num2:
        print(num1,"és el valor més gran")
    elif num2>num1:
        print(num2,"és el valor més gran")
    else:
        print("Són iguals")
}

mesGran(5,3)
mesGran(3,5)
mesGran(5,5)

Python - Paràmetres opcionals

Els paràmetres opcionals són aquells que no precisen de l'assignació d'un valor o una variable en la crida a la funció. Quan el valor del paràmetre opcional no està especificat en la crida, el sistema assigna el valor per defecte associat en la definició de la funció.

Per a l'utilització dels paràmetres opcionals cal tenir en compte que no pot haver-hi cap paràmetre que sigui obligatori després d'un paràmetre opcional.

Exemple

La següent funció defineix un paràmetre obligatori, de nom strng, i dos paràmetres opcionals: sep i max . Si no s'especifica el nom dels paràmetres sep i max, els valors associats a aquests paràmetres serà la coma (,) i el valor 2.

#!/usr/bin/env python3

def imprimir(strng,sep=",",max=2):
        print("Info: strng="+strng,"sep="+sep,"max="+str(max))

Python - Paràmetres opcionals - Crida funció

Quan es fa una crida a una funció definida amb paràmetres opcionals, hi ha diverses opcions correctes per a l'execució de la seva funció.

Correlació a través de la posició del paràmetre

  1. Especificar un valor per a tots els paràmetres. Els valors per defecte dels paràmetres seran substituits pels nous valors associats. La correlació amb els paràmetres entre la crida i la definició de la funció és posicional.
  2. Especificar només els paràmetres que no tenen cap valor associat. La correlació amb els paràmetres entre la crida i la definició de la funció és posicional.
  3. Especificar els paràmetres obligatoris, per ordre, i alguns dels opcionals, mantenint l'ordre.
#!/usr/bin/env python3

def imprimir(strng,sep=",",max=2):
        print("Info: strng="+strng,"sep="+sep,"max="+str(max))

imprimir("Obligatori",";",4)                # cas 1
imprimir("Obligatori")                      # cas 2
imprimir("Obligatori",":")                  # cas 3

Correlació a través del nom del paràmetre

S'utilitza el nom del paràmetre per associar-li el valor en la crida a la funció. En aquest cas, el paràmetre pot aparèixer en qualsevol lloc en la crida, però sempre després dels paràmetres obligatoris.

#!/usr/bin/env python3

def imprimir(strng,sep=",",max=2):
        print("Info: strng="+strng,"sep="+sep,"max="+str(max))

imprimir("Obligatori",max=1)              
imprimir("Obligatori",sep=";",max=5)        

imprimir(max=1,"Obligatori")     # Opció incorrecte

results matching ""

    No results matching ""