PDA

Visualizza versione completa : VB6 ... "End Function"; "Exit Function"


Eteria
21-01-2002, 02.02.17
Che differenza c'è tra:

"End Function" ed "Exit Function" ???

Non servono tutte e due a chiudere una funzione??? "Exit Function" cos'ha di particolare???

Tnx a todos :)

badmood
21-01-2002, 10.15.04
L'istruzione End Function definisce la fine della tua funzione:

Function Pippo() <- start
xxx
xxx
End Function <- end

L'istruzione Exit Function consente di uscire immediatamente da una routine Function:

Function Pippo() <- start
xxx
If a = b then Exit Function <- uscita forzata
xxx
End Function <- end

Ciao

P8257 WebMaster
21-01-2002, 10.18.48
In Vb :( lo statement EXIT blocca l'esecuzione della funzione/ciclo/struttura correnti a seguito di un evento condizionato dall'utente.

Lo statemetn EXIT si accoppia con DO, FOR, WHILE, FUNCTION, SUB

nel tuo caso specifico EXIT FUNCTION esce immediatamente dall'esecuzione di quella funzione e preclude l'esecuzione di qualsiasi statement successivo. End function invece termina naturalmente la funzione ed identifica anche la fine di essa.

esempio:
FUNCTION Pippo
dim A
A = A + 1
EXIT FUNCTION
A = A - !
END FUNCTION

in questo caso A = A-1 non VERRA' MAI eseguito.
END FUNCTION invece deve sempre essere messo alla fine, per chiudere il comando FUNCTION.

... Bye!
Appena puoi, CAMBIA LINGUAGGIO!!!! OO OOOO !!! OOO !!! :O (Y)

LoryOne
21-01-2002, 18.03.56
Non capisco perchè "CAMBIA LINGUAGGIO !!!"

Può capitare a volte di dover utilizzare istruzioni di questo tipo ed oltretutto sono di una estrema comodità.

Il consiglio che ti do io è di non cambiare linguaggio di programmazione ma di utilizzare il meno possibile le istruzioni EXIT Function,EXIT Sub,EXIT Do, ecc...

Un vero programmatore non ne fa mai uso (o quanto meno ci prova):(

Black
30-01-2002, 16.10.11
confermo quanto detto da LoryOne ;)
Di solito si usa Exit Function solo quando si intercetta un errore e non si vuole che vengano eseguite altre istruzioni di quella routine ;)

Eteria
04-02-2002, 16.38.28
Azzz vi ringrazio, a dire il vero non ho intenzione di cambiare linguaggio ma nemmeno di restare sul VB a vita :D ... sto solo cercando di darmi un po' da fare con la programmazione e il VB mi sembrava il più easy per partire :)

Per quanto riguarda "End Function" senza dubbio il concetto è chiaro, "Exit" invece mi lascia ancora un po' poco convinto. Sembra un po' paradossale scrivere una funzione e poi piazzarci dentro qualcosa che ne blocca l'esecuzione completa, sopratutto per uno come me che sta cercando di imparare e le prime cose che mi sono state insegnate sono la stesura di codice in maniera più nitida leggera e comprensibile possibile... alla fine al di fuori della sintassi nel codice e dell'effetto a livello strettamente tecnico che può avere, in quali contesti si usa sto "Exit" ???

Tnkz :)

LoryOne
05-02-2002, 08.18.39
Non esistono contesti precisi in cui piazzare l' istruzione EXIT.

Ora non mi vengono in mente esempi da farti ma uno degli utilizzi più ricorrenti di EXIT è quando è necessario interrompere l'esecuzione di un' iterazione o di un cliclo al verificarsi di una particolare condizione. :)

Hai scritto "Sembra un po' paradossale scrivere una funzione e poi piazzarci dentro qualcosa che ne blocca l'esecuzione completa"

Sono della tua stessa idea, in fondo nella stesura di un programma è necessario inserire il codice indispensabile per renderlo efficiente, eliminando con cura il superfluo.:D :D :D

P8257 WebMaster
05-02-2002, 08.54.49
Il caso della "Ricerca dei caratteri" - un caso pratico

Ciao,
L'istruzione di terminazione forzata (come EXIT in Basic) la troviamo in tutti i linguaggi proprio perché è un elemento essenziale per "cavarsela" in certi casi obbligati e rendere quindi il codice più stabile ed efficiente.

Un esempio?
- La classica ricerca in una stringa.

Supponi di dover scrivere una routine che accetti o meno la presenza di certi caratteri in una stringa.
Per renderla parametrizzabile al massimo il modo migliore è creare un vettore con i caratteri che è possibile accettare (o non accettare, dipendentemente dalla quantità) e confrontarlo con la stringa sorgente.
Supponi di dover ritornare VERO se la stringa contiene qualche carattere non permesso. Nel ciclo di scansione principale inserirai l'istruzione EXIT FOR che ti aiuterà a mantenere l'efficienza della struttura in quanto terminerai il ciclo forzatamente al primo carattere sbagliato che trovi sgravando così l'impegno di altre risorse di sistema nella scansione dei caratteri rimanenti. Col risultato finale di rendere la funzione più veloce.
Comodo e corretto allo stesso tempo.

Ciò che si deve fare a meno di usare è il cosiddetto GO TO perché sposta il controllo creando una soluzione di continuità nel codice sorgente. E' talmente dannoso che in alcuni linguaggi non c'é neanche, e nelle nuove versioni di alcuni linguaggi che lo implementavano è stato tolto.

Bye! :cool:

Eteria
06-02-2002, 02.48.56
Grazie anche per il consiglio sul GO TO, ma tornando al discorso dell'EXIT, volevo un piccolo chiarimento riguardo a:

"Nel ciclo di scansione principale inserirai l'istruzione EXIT FOR che ti aiuterà a mantenere l'efficienza della struttura in quanto terminerai il ciclo forzatamente al primo carattere sbagliato che trovi sgravando così l'impegno di altre risorse di sistema nella scansione dei caratteri rimanenti. Col risultato finale di rendere la funzione più veloce."

Che significa rendere la funzione "più veloce"??? Che il programma una volta compilato sarà più performante perchè quell'EXIT mi snellisce la funzione stessa o che ne trarrò vantatggio nel mettere a punto il codice del meccanismo in maniera più pulita e chiara nel mio sorgente???

P8257 WebMaster
06-02-2002, 08.59.00
L'efficienza del codice è uno dei traguardi che qualsiasi programmatore dovrebbe raggiungere. Forse nel mio scorso post mi sono espresso male, al posto di "veloce" avrei dovuto scrivere "efficiente". Rendere efficiente una funzione non è obbligatorio (per questo molti non se ne curano) ma alla lunga distanza è l'unico modo per costruire applicazioni leggere, che necessitino di poche risorse e prive di inutili ridondanze di codice.
Nel caso specifico che ho descritto nello scorso post, siccome la funzione non deve accettare che in una stringa compaiano certi caratteri, è sufficiente che il cuore di essa termini la sua esecuzione quando il primo di questi viene individuato senza continuare inutilmente a scansionare la stringa.
E' vero infatti che il processo in se è comunque abbastanza veloce grazie all'enorme potenza dei processori moderni, ma immagina di dover 'dare in pasto' alla funzione tutte le righe di un file magari lungo 30Mb!!!

Nello specifico (pseudocodifica):



// primo ciclo
PER contatore = 1 A lunghezza(stringasorgente), contatore++

// ciclo interno
PER contatore2 = 1 A lunghezza(arraycaratteri), contatore2++

// condizione di scansione
SE PORZIONE(stringasorgente, contatore, 1) == arraycaratteri[contatore2] ALLORA
SCRIVI "la stringa contiene caratteri non permessi."
ESCI CICLO // termina il ciclo

PROSSIMO
PROSSIMO

Forse sono stato un po' confusionario ma spero di averti reso l'idea.

Bye! :cool:

Eteria
06-02-2002, 19.18.32
Originariamente inviato da P8257 WebMaster
L'efficienza del codice è uno dei traguardi che qualsiasi programmatore dovrebbe raggiungere. Forse nel mio scorso post mi sono espresso male, al posto di "veloce" avrei dovuto scrivere "efficiente". Rendere efficiente una funzione non è obbligatorio (per questo molti non se ne curano) ma alla lunga distanza è l'unico modo per costruire applicazioni leggere, che necessitino di poche risorse e prive di inutili ridondanze di codice.
Nel caso specifico che ho descritto nello scorso post, siccome la funzione non deve accettare che in una stringa compaiano certi caratteri, è sufficiente che il cuore di essa termini la sua esecuzione quando il primo di questi viene individuato senza continuare inutilmente a scansionare la stringa.
E' vero infatti che il processo in se è comunque abbastanza veloce grazie all'enorme potenza dei processori moderni, ma immagina di dover 'dare in pasto' alla funzione tutte le righe di un file magari lungo 30Mb!!!

Nello specifico (pseudocodifica):



// primo ciclo
PER contatore = 1 A lunghezza(stringasorgente), contatore++

// ciclo interno
PER contatore2 = 1 A lunghezza(arraycaratteri), contatore2++

// condizione di scansione
SE PORZIONE(stringasorgente, contatore, 1) == arraycaratteri[contatore2] ALLORA
SCRIVI "la stringa contiene caratteri non permessi."
ESCI CICLO // termina il ciclo

PROSSIMO
PROSSIMO

Forse sono stato un po' confusionario ma spero di averti reso l'idea.

Bye! :cool:

Tnx for all :) ho inteso :)