Come da oggetto ho deciso di aprire questo thread in quando io ho sempre saputo che la differenza tra SUB e FUNCTION è:
SUB --> è una routine che viene eseguita ogni qualvolta viene chiamata
FUNCTION --> è una routine che viene eseguita e restituisce un VALORE
La dicitura generica per SUB è questa...
PUBLIC/PRIVATE SUB [nome_routine]()
...
...
END
mentre per FUNCTION è così
PUBLIC/PRIVATE FUNCTION [nome_routine]() AS [Tipo_Valore_Restituito]
...
...
RETURN Valore_Restituito
END
Scrivendo di corsa alcune routine nel mio codice però mi sono reso conto che a volte ho chiesto la restituzione di un valore ad una Sub... così:
PUBLIC/PRIVATE SUB [nome_routine]() AS [Tipo_Valore_Restituito]
...
...
RETURN Valore_Restituito
END
Visto che il programma gira senza evidenziare errori a questo punto mi sorge una domanda. Perché il programma non mi va in errore quando chiedo un valore ad una Sub?
La distinzione tra Sub e Function è solo una questione di "scrittura ordinata" o ci sono delle differenze che io ignoro?
Grazie a tutti per i chiarimenti. :)
Sono a lavoro ed ho accesso solo ad una vecchia versione di Gambas (2.08) per cui non so se le cose sono diverse sulle ultime ma....
sia la SUB che la FUNCTION accettano la dichiarazione del tipo di dato ed il comando RETURN per la restituzione di un valore.
Provate infatti a scrivere:
PUBLIC SUB Form_Load()
DIM a AS integer
a=Test_sub()
print a
a=Test_func()
print a
END
PUBLIC SUB Test_sub() AS Integer
RETURN 1
END
PUBLIC FUNCTION Test_func() AS Integer
RETURN 1
END
Vedrete sul terminale 2 begli "1", senza nessun errore.
Sintatticamente questo è un ERRORE grossolano del compilatore.