Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    117

    Uscita da blocco Using con GoTo

    Ciao a tutti,
    ho scritto un codice nel quale ho inserito una istruzione GoTo all'interno di un blocco Using che porta all'esterno di esso. Cerco di spiegare con un esempio di codice:

    codice:
    Sub Esempio()
    Using DT as new DataTable
        '...codice
        If Esci = true then Goto Altro
        '...codice
    End Using
    Altro:
    '...codice
    End Sub
    Ora (data la mia ignoranza) mi domandavo se questa architettura poteva essere sbagliata e quale fosse quella giusta (visto che non esiste il comando Exit Using).

    Grazie in anticipo a tutti quelli che dedicheranno tempo alla mia domanda.

  2. #2
    Ciao, premesso che i Goto è roba preistorica e con vb.net sono da evitare, premesso che il codice postato non è chiaro... quell'If..è dentro un ciclo? Se, ad esempio, è all'interno di un For, basta un "Exit For", altrimenti, se non c'è nessun ciclo all'interno dell'Using, puoi modificare il codice mettendo "If Not esci Then ...tuo codice... End If", in pratica esegui il codice successivo solo se Esci è falsa.
    Ma queste sono tutte supposizioni, visto che non si sa niente di quello che fa la sub...
    Jupynet

  3. #3
    Potresti verificare IL CONTRARIO e non ci sarebbe più bisogno del GoTo

    codice:
    SubEsempio()
        Using DT asnewDataTable
           '...codice
           If Esci = False then  ' Più canonico: If Not Esci then
              '...codice
           End If
        EndUsing
        '...codice
    End Sub

    Opppsss, gia consigliato... sorry.
    Ultima modifica di eziogsv; 18-11-2015 a 01:32

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    117
    Innanzi tutto grazie delle risposte.
    Forse, però, non sono stato chiaro nel pore la domanda, quindi ci riprovo: Come si esce da un blocco using?

    All'interno del blocco, ad un certo punto si verifica una condizione per la quale devo terminare l'esecuzione di quel blocco.
    Quindi il problema che mi ponevo è se uscire con un GoTo influiva (negativamente) sul funzionamento di Using.

  5. #5
    ... ma se in un If... Then "negativo" inserisci tutto il codice da NON leggere se si verificano certe condizioni... esci dal blocco using senza problemi e nella maniera più pulita, quindi dove è il problema?

    Comunque, se proprio vogliamo andare a scavare, io personalmente per uscire da blocchi in cui non esiste un "Exit" uso una soluzione di ripiego trovata sul web tempo fa e che funziona senza problemi: Un Do "senza Loop.."

    codice:
     Do
    
        '... codice
        Exit Do
        'codice da non leggere
     
    Loop Until False

    Il Do è "fasullo", perché non eseguirà mai un Loop. ma ti permette di inserire un Exit
    Ultima modifica di eziogsv; 18-11-2015 a 15:45

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    117
    Quote Originariamente inviata da eziogsv Visualizza il messaggio
    codice:
     Do
    
        '... codice
        Exit Do
        'codice da non leggere
     
    Loop Until False
    Bella idea, credo sia un buon modo di evitare il GoTo che, secondo persone più esperte di me e per motivi che non sono (al momento) in grado di comprendere, non è una buona pratica.
    Grazie e ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Quote Originariamente inviata da genespos Visualizza il messaggio
    Bella idea, credo sia un buon modo di evitare il GoTo che, secondo persone più esperte di me e per motivi che non sono (al momento) in grado di comprendere, non è una buona pratica.
    Non sei (al momento ) in grado di comprendere perché... nessuno lo spiega mai, limitandosi tutti ad affermare che... "è roba preistorica". Fino agli anni '70 (circa) non era stata inventata la programmazione strutturata, ossia quella metodologia di programmazione che raccomanda caldamente di tradurre gli algoritmi in codice utilizzando le strutture fondamentali della programmazione: sequenza, selezione, iterazione. Il risultato era che i sorgenti dei programmi, pieni di istruzioni di salto da una parte all'altra del codice, diventavano illeggibili e difficili da mantenere; si parlava infatti di "programmi-spaghetti". La programmazione strutturata, nei linguaggi che lo permettevano (non tutti !) portò a notevoli miglioramenti nella leggibilità e riusabilità del codice e rese inutili le istruzioni di salto (es. GoTo). Se il GoTo avesse mantenuto una sua utilità lo si userebbe anche oggi indipendentemente dalla sua età.

  8. #8
    Quote Originariamente inviata da genespos Visualizza il messaggio
    Bella idea, credo sia un buon modo di evitare il GoTo che, secondo persone più esperte di me e per motivi che non sono (al momento) in grado di comprendere, non è una buona pratica.
    Grazie e ciao
    Ciao, vedo che ti hanno già dato una spiegazione sul "perché" non usare il GoTo, ma, senza fare polemica (è solo un consiglio), quando si hanno dubbi o non si comprendono determinate cose, in primis è il caso di chiedere a colui che sa tutto (o quasi)..Google (o altri motori), con una semplice ricerca come questa: http://lmgtfy.com/?q=perch%C3%A8+non+usare+goto al secondo risultato già avevi tutte le spiegazioni.
    Detto questo, l'escamotage che ti ha suggerito @eziogsv va più che bene, ma sappi che spesso ci possono essere soluzioni più lineari e pulite, per questo ti avevo detto che bisognerebbe vedere tutto il codice all'interno della sub.
    Jupynet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Quote Originariamente inviata da genespos Visualizza il messaggio
    Bella idea, credo sia un buon modo di evitare il GoTo ...
    Io la trovo invece pessima. Lo scopo della programmazione strutturata non è evitare il GoTo, bensì rendere il codice più leggibile e più manutenibile. L'introduzione di un falso ciclo va ivece nella direzione opposta. Questo è un esempio di come spesso si confonda il fine con il mezzo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.