NSA - Non Solo Amiga

SOFTWARE => Linguaggi di programmazione e scripting => Topic aperto da: Allanon - 18 Giugno 2011, 23:22:05

Titolo: [Hollywood] Le funzioni
Inserito da: Allanon - 18 Giugno 2011, 23:22:05
Una caratteristica importantissima di ogni linguaggio sono le funzioni, dei "pezzi" di codice che prendono in ingresso dei parametri e restituiscono dei risultati, o semplicemente elaborano delle informazioni senza restituire nulla.

In Hollywood le funzioni vengono dichiarate con il seguente schema:
Codice: [Seleziona]
Function nome_funzione(parametri)
   ...codice...
   Return(risultati)
EndFunction

<parametri> non sono obbligatori, una funzione può essere invocata anche senza parametri
<Return(risultati)> questo comando si occupa di restituire i valori e ad uscire immediatamente dalla funzione, può anche essere utilizzato per uscire dalla funzione senza restituire nulla omettendo di specificare dei risultati

Piccolo esempio:
Codice: [Seleziona]
Function Add(a, b)
   Return(a+b)
EndFunction

Ma, passiamo ad alcune caratteristiche più interessanti  :ugeek:
------------------------------------------------------------------------
LE FUNZIONI SONO VARIABILI
Esattamente: tutte le funzioni sono trattate come variabili all'interno di Hollywood, compresi i comandi interni di Hollywood. Ma cosa significa questo?
Prendiamo il comando DebugPrint() che stampa una stringa sulla console, se io faccio:
Codice: [Seleziona]
DebugPrint("Ciao baldi giovani!")
Local myPrint = DebugPrint
myPrint("Che figata!")
Con l'assegnazione alla seconda riga abbiamo fatto si che la variabile <myPrint> sia diventata la funzione <DebugPrint>  :D

Questo concetto apre molti orizzonti di programmazione, e qui darò solo un'idea di cosa si può fare con questo concetto.
Immaginiamo un programma che deve disegnare delle forme usando diverse tecniche di disegno, definiamo le funzioni che disegnano con queste diverse tecniche:
Codice: [Seleziona]
Function rendering_method1()
   ...
EndFunction

Function rendering_method2()
   ...
EndFunction

Function rendering_method3()
   ...
EndFunction

Local renderer = rendering_method1

Dopodichè abbiamo la nostra funzione di disegno delle forme:
Codice: [Seleziona]
Function render_shapes()
   ...
   renderer()
   ...
EndFunction

Infine abbiamo una funzione per impostare il metodo di rendering, che potremmo utilizzare nelle preferenze del nostro programma per cambiare metodo di rendering:
Codice: [Seleziona]
Function set_render_method(num)
   If num = 1
      renderer = render_method1
   ElseIf num = 2
      renderer = render_method2
   Else
      renderer = render_method3
   EndIf
EndFunction

Non è una figata? :lol:

Prossimi argomenti sulle funzioni:
- Funzioni con numero variabile di argomenti
- Tabelle di Funzioni