Autore Topic: [Risolto] Uscita anticipata da una funzione e da cicli FOR/NEXT , DO/LOOP  (Letto 1915 volte)

Offline Sardina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Salve,
Posso fare una domanda anche se banale?
Vorrei tanto sapere, come si fa ad uscire anticipatamente da una funzione nel caso si verifichino determinate condizioni?
In poche parole vorrei forzare l'uscita dalla mia funzione in modo che non venga letto, inutilmente, il resto del codice in essa contenuto!
E già che ci sono, qualcuno mi può anche dire quali sono le parole chiave per uscire anticipatamente dai cicli FOR/NEXT , DO/LOOP e FOR EACH/NEXT in modo che il ciclo non venga portato a termine come previsto?
Grazie per la vostra pazienza!!!!!

 :aiuto:  :aiuto:

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Uscita anticipata da una funzione e da cicli FOR/NEXT , DO/LOOP
« Risposta #1 il: 06 Luglio 2009, 20:59:44 »
IF condizione THEN BREAK.  

Va bene per tutti i cicli che hai citato.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Uscita anticipata da una funzione e da cicli FOR/NEXT , DO/LOOP
« Risposta #2 il: 06 Luglio 2009, 23:38:03 »
BREAK va bene ma non è certo il massimo in quanto a programmazione strutturata...

Sarebbe meglio strutturare il codice con cicli condizionali annidati in modo da evitare il ricorso a questi comandi bruti e brutti...  :-o

Ad esempio:
Codice: [Seleziona]

A=2
FOR I=1 TO 10
  A=A*I
  IF A>10 THEN BREAK
NEXT

può diventare benissimo:
Codice: [Seleziona]

A=2
I=1
DO
  A=A*I
  I+=1
LOOP UNTIL A>10 OR I>10


Non che BREAK sia sintatticamente scorretto (è previsto da Gambas) ma non è "bello". E' un po' come il GOTO del vecchio Basic, istruzione che insegnava a non programmare secondo strutture logiche :-)
Poi, che c'entra, ci possono anche essere situazioni in cui un BREAK è necessario ma nella maggior parte delle volte si può benissimo evitare.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Uscita anticipata da una funzione e da cicli FOR/NEXT , DO/LOOP
« Risposta #3 il: 06 Luglio 2009, 23:59:44 »
@Leo

Fai un esperimento ;-)

Codice: [Seleziona]

cd /gambas2-2.14.0/app/src/gambas2

grep -w BREAK * | wc -l


Se lo usa Benoit, che è un programmatore quadripalluto, lo posso usare io che
sono un sotto-dilettante. :-)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Uscita anticipata da una funzione e da cicli FOR/NEXT , DO/LOOP
« Risposta #4 il: 07 Luglio 2009, 15:57:21 »
Non ho detto che non va usato in assoluto, ho solo detto che secondo i canoni della programmazione usare tale genere di comandi non è sintatticamente carino.
Che lo usi Benoit è scontato, dato che senz'altro l'ha creato a suo uso e consumo prima e poi ad uso e consumo degli utenti di Gambas  :oops:

Però quando si può fare a meno di tutti quei comandi che saltano fuori da cicli o passano sopra a blocchi di codice è meglio: in questo modo si impara più correttamente la logica della programmazione.

Poi, come sempre, Gambas permette di fare una stessa cosa in diversi modi per cui non si può dire a priori se il metodo X è meglio del metodo Y: sono entrambi validi.
Se il BREAK ti aiuta, perché non usarlo?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Sardina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Uscita anticipata da una funzione e da cicli FOR/NEXT , DO/LOOP
« Risposta #5 il: 07 Luglio 2009, 18:00:11 »
Grazie per l'aiuto a tutti e due!!! :2birre:
Ciao! Ciao!
E grazie ancora!!!

 :hammer:  :hammer:  :hammer:  :hammer:  :hammer:  :hammer: