Autore Topic: Differenza Sub e Function  (Letto 3029 volte)

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Differenza Sub e Function
« il: 12 Novembre 2010, 15:26:07 »
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...

Codice: vb.net [Seleziona]
PUBLIC/PRIVATE SUB [nome_routine]()
  ...
  ...
END


mentre per FUNCTION è così

Codice: vb.net [Seleziona]
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ì:

Codice: vb.net [Seleziona]
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.  :)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Differenza Sub e Function
« Risposta #1 il: 12 Novembre 2010, 18:31:56 »
In effetti la differenza tra SUB e FUNCTION è proprio quella dovuta ad un valore di ritorno restituito o no....la sub non deve restituire nulla mentre una funzione dovrebbe....in realtà puoi usare una sub come una function e una function come una sub ma se io apro il tuo codice e lego che richiami una sub allora non mi aspetterò nulla mentre se ho una function posso assegnarla ad una variabile.....

Siccome molto spesso si programma ma non si ha molta cognizione di ciò che si scrive la differenza può passare inosservata ma c'è e dovrebbe esser rispettata.

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Differenza Sub e Function
« Risposta #2 il: 12 Novembre 2010, 19:22:12 »
Grazie Ceskho per il chiarimento.

Appena ho un po' di tempo rinomino "a norma" tutto il codice finora scritto...  :ok:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Differenza Sub e Function
« Risposta #3 il: 15 Novembre 2010, 13:23:28 »
Comunque è anomalo che il compilatore non evidenzi l'errore...

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Differenza Sub e Function
« Risposta #4 il: 15 Novembre 2010, 18:49:00 »
Comunque è anomalo che il compilatore non evidenzi l'errore...

Il compilatore ti fa notare l'errore solo se una sub restituisce un valore ma se una function non restituisce nulla (e non parlo di NULL) non dice nulla...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Differenza Sub e Function
« Risposta #5 il: 15 Novembre 2010, 21:32:24 »
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:
Codice: gambas [Seleziona]

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.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Differenza Sub e Function
« Risposta #6 il: 16 Novembre 2010, 12:40:37 »
Si, è presumibile...

Non ho provato, ma presumo che SUB e FUNCTION vengano trattati allo stesso modo, ovvero come una funzione...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Differenza Sub e Function
« Risposta #7 il: 22 Novembre 2010, 11:58:59 »
Cmq ho segnalato la cosa proprio ora (mi ero dimenticato di questo 3d).
Visita il mio sito personale: http://www.leonardomiliani.com