_antoniobernardo
(90 punti)
4' di lettura
4 / 5 (1)

Funzioni e script files

I programmi più complicati di octave possono spesso essere semplificati definendo funzioni.

Le funzioni possono essere definite direttamente sul prompt di comando o in files esterni e possono essere richiamate solo come funzioni già  impostate.

Definire funzioni

La forma più semplice è

Function name

Body

endfunction

Un nome di funzioni valido, come per la variabile, può essere una sequenza di lettere, numeri e underscores, ma non iniziare con un numero.

Il body è la parte più importante perché dice cosa la funzione effettivamente fa. Normalmente ci stanno delle informazioni sulla funzione e la sintassi per passare i parametri alla funzione è:

function name(arg-list)

body

endfunction

dove arg-list è una lista di argomenti della funzione separati da virgola.

Lo scopo dell'inserimento della funzione è quello di ottenere informazioni di output della funzione definita. La sintassi, per esempio, di una funzione che ritorna un valore è:

function ret-var=nome(arg-list)

body

endfunction

ret-var è il nome della variabile che contiene il valore di output della funzione.

Le variabili usate nel corpo della funzione sono variabili locali.

Valori di output multipli

Al contrario di altri programmi Octave consente di definire funzioni che danno come output più valori. La sintassi è:

function[ret-list]=nome(arg-list)

body

endfunction

dove ret-list è una lista di nomi di variabili separate da una virgola che conterranno il valore di output della funzione. La lista dei valori di output (ret-list in tal caso) deve avere almeno un elemento.

Script files

E' un file che contiene ogni sequenza dei comandi octave.

Al contrario di un file function non deve iniziare con la parola function. Un'altra differenza sta nel fatto che le variabili richiamate in uno script non sono locali.

E' possibile definire più di una funzione in uno script files e caricarle (ma non eseguirle) tutte, una per volta.

Salvare file di fuzioni

I file vengono salvati con l'estensione .m, questo per mantenere una compatibilità  con la nomenclatura usata da Matlab.

I file possono essere memorizzati in una qualsiasi directory che poi deve essere specificata all'interno di octave. Octave quando incontra una funzione cerca il suo nome in quelle predefinite, nel caso non vengano trovate va a cercarla in file esterni (.m) specificata nella lista di directory all'interno della variabile d'ambiente LOADPATH.

Ad esempio LOADPATH=”?:/root/octave”? specifica che i file .m si troveranno nella directory “/root/octave”? . In caso di più directory queste vengono separate dai due punti (“:”?).

Comandi

Sono speciali classi di funzioni.

Un comando può essere chiamato come una funzione ordinaria, ma può anche essere richiamato senza parentesi. Esempio

my_command hello world

equivale a

my_command(“hello”?,”?world”?)

Una funzione può essere usata come comando se accetta stringhe come argomenti di input. Per far ciò, la funzione deve essere definita come un comando, che può essere fatto con il comando “mark_as_command”?. Esempio

mark_as_command name

dove name è la funzione che deve essere chiamata come un comando.

Una difficoltà  si ha quando le stringhe di argomenti di input sono memorizzate in una variabile.

Siccome octave non può dire la differenza tra il nome di una variabile e una stringa ordinaria, non è possibile passare una variabile come input al comando.