Come si opera per la creazione di una nuova funzione? Cio ammettendo che io voglia creare una funzione che chiamo per esempio incremento e che accetti in input un valore float e lo incrementi secondo la seguente sintassi:
incremento(valore_da_inserire)
come devo operare?
Il mio è un esempio è ovvio che creare una funzioane per una cosa così è solo una stupidaggine.
Attualmente le funzioni in Gambas 2.0 accettano i parametri per valore, vale a dire come nel VB con BYVAL specificato.
In Gambas 3 potranno essere passati anche per riferimento (BYREF): ciò significa che se la funzione modificherà il parametro passato, la modifica avrà effetto anche sul valore della variabile passata dal chiamante.
In soldoni, attualmente per operare una cosa come la tua devi impostare una variabile a livello di classe, così che le modifiche abbiano effetto anche sulla variabile passata.
Quindi, se vuoi ad esempio creare una funzione che incrementi, diciamo, di 2 unità una variabile, devi fare:
'Gambas class file
PRIVATE Variabile AS Integer
PUBLIC FUNCTION Incrementa(Valore AS Integer) AS Integer
Incrementa += 2
RETURN Incrementa
END
PUBLIC SUB Form_Load()
DIM A AS Integer
A = Incrementa(3)
PRINT A
END
A varrà 5.
Nel dettaglio, la funzione viene definita come una normale procedura, con un nome, i parametri con i loro tipi fra parentesi, ed il tipo di dati che restituirà.
I parametri possono essere usati dalla funzione senza ridichiararli (in pratica, Valore AS Integer è come se dicessi DIM Valore AS Integer all'interno della funzione), e con Return assegno il valore da restituire al nome della funzione.
Immaginiamo di voler creare una classe matematica con nuove funzioni.
All'interno di questa classe abbiamo la nostra funzione Incrementa.
Facciamo così. Creiamo una nuova classe clsFunzioniMatematiche e mettiamoci dentro questo codice:
PUBLIC FUNCTION IncrementaPerDue(Valore AS Variant) AS Variant
Valore += 2
RETURN Valore
END
Nel form dal quale vuoi usare le tue funzioni dichiara un'istanza della classe clsFunzioniMatematiche a livello globale del form, quindi nell'intestazione dello stesso:
'Gambas class file
PRIVATE FunzioniMatematiche AS NEW clsFunzioniMatematiche
In questa maniera, la nuova classe istanzanziata FunzioniMatematiche sarà accessibile dall'interno di tutto il tuo form.
Adesso mettiamo il caso che hai una procedura da cui richiami la tua nuova funzione:
PUBLIC SUB CalcoliVari()
[...]
A = FunzioniMatematiche.IncrementaPerDue(7)
PRINT A
[...]
END
Essendo la classe FunzioniMatematiche un'istanza della classe clsFunzioniMatematiche, essa eredita tutte le sue funzioni. E per chiamare una funzione di una classe basta utilizzare la forma classe.metodo, quindi nel nostro caso FunzioniMatematiche.IncrementaPerDue.
A varrà 9.
P.S.:
sì, hai ragione. Ho sbagliato sintassi :-P
Cmq, puoi anche ridurre il tutto a RETURN (Valore + 2).