Domanda

Dovrebbe sviluppatori di evitare l'uso continua in C# o il suo equivalente in altre lingue per forza la prossima iterazione di un ciclo?Sarebbe argomenti a favore o contro sovrapposizione con argomentazioni in merito Goto?

È stato utile?

Soluzione

Penso che ci dovrebbe essere più uso di continuare!

Troppo spesso mi imbatto in codice come:

for (...)
{
   if (!cond1)
   {
      if (!cond2)
      {
          ... highly indented lines ...
      }
   }
}

invece di

for (...)
{
   if (cond1 || cond2)
   {
      continue;
   }

   ...
}

Si usa per rendere il codice più leggibile!

Altri suggerimenti

È continue più dannoso rispetto, ad esempio, break?

Se non altro, nella maggior parte dei casi in cui mi incontro/uso, lo trovo rende il codice più chiaro e meno spaghetti.

È possibile scrivere buon codice, con o senza continuare a scrivere il codice cattivo con o senza continuare.

Probabilmente c'è una certa sovrapposizione con le argomentazioni circa goto, ma, per quanto mi riguarda l'utilizzo di continuare è equivalente all'utilizzo di interruzione di istruzioni (in loop) o dichiarazione di ritorno da qualsiasi parte del corpo di un metodo - se usato correttamente può semplificare il codice (meno probabilità di contenere bug, più facile da gestire).

Non sono dannosi parole chiave.C'è solo l'uso nocivo di loro.

Goto non è dannoso di per sé, non è né continuare.Essi devono essere utilizzati con attenzione, tutto qui.

Se continua sta causando un problema con la leggibilità, quindi le probabilità sono voi hanno altri problemi.Per esempio, grandi quantità di codice all'interno di un ciclo for.Se si dispone di scrivere grandi cicli for, vorrei provare a bastone all'utilizzo di continuare vicino alla parte superiore del ciclo.Altrimenti, continua sepolto in profondità nel mezzo di un ciclo for può essere facilmente perso.

Mi piace utilizzare continuare all'inizio del loop per la gestione di semplici se le condizioni.

Per me rende il codice più leggibile perché non c'è un extra di nidificazione e si può vedere che ho espressamente previsto in questi casi.

Questo è lo stesso motivo per cui vorrei usare un goto?Forse.Faccio uso di loro per migliorare la leggibilità, a volte e per interrompere la nidificazione di codice, ma io di solito li uso più per la pulizia/gestione dell'errore.

Io direi:"dipende".

Se si dispone di un ragionevolmente piccolo codice di ciclo (dove si può vedere l'intero ciclo-codice senza scorrimento) di solito è ok per utilizzare una continua.

Tuttavia, se i cicli del corpo è di grandi dimensioni (per esempio a causa di un interruttore grande), e c'è un po di follow-up codice (diciamo sotto lo switch), si può facilmente introdurre bug con l'aggiunta di un continua e, quindi, ignorando del tutto che il codice a volte.Ho trovato questo nel cuore di un interprete di bytecode, dove alcuni strumentazione codice a volte non eseguito a causa di una continua, in qualche caso-rami.

Questo potrebbe essere un po ' costruita artificialmente caso, ma io di solito cercare di evitare di continuare e utilizzare un se (ma non troppi livelli di nidificazione, come in Rob codice di esempio).

Non credo che continuare potrebbe mai essere così difficile come goto dal continuare non si muove mai esecuzione del blocco di codice che si trova in.

Se si scorre qualsiasi tipo di un set di risultati, e l'esecuzione di operazioni su tali risultati, e.g all'interno di una per ciascuno, e se un particolare risultato ha causato un problema, piuttosto utile a catturare un errore previsto (via try-catch), di registrazione e di passare alla successiva risultato continuare.Continuare è particolarmente utile, imo, per il servizio automatico che fare i lavori alle ore dispari, e una eccezione non dovrebbe influenzare gli altri x numero di record.

  1. Utilizzando continuare all'inizio di un ciclo per evitare di iterazione su elementi non necessari non è dannoso e può essere molto utile, ma il suo utilizzo nel mezzo di nidificati ifs e qualcun'altro può trasformare il codice di ciclo in un labirinto complesso, di capire e di convalidare.

  2. Penso che il suo utilizzo evasione è anche il risultato di un equivoco semantico.Gente che non fa mai vedere/scrivere 'continua', parola chiave sul loro codice, vedendo con un codice per continuare la può interpretare come "la continuazione del flusso naturale".Se invece di continuare abbiamo avuto accanto, per esempio, penso che più persone avrebbero apprezzato questa preziosa funzione di cursore.

goto può essere utilizzato come continuare, ma non l'inverso.

Si può "goto" ovunque, così interruzione del flusso di controllo in modo arbitrario.

Continuare così, non è quasi dannoso.

Altri hanno suggerito che...ma continue e break sono applicate dal compilatore e hanno le loro regole associate.Goto ha nessuna di tali limitazioni, anche se l'effetto netto potrebbe quasi la stessa, in alcune circostanze.

Io non considero la continua rottura o di essere dannoso per se, anche se sono sicuro che entrambi possono essere usati poco in un modo che avrebbe fatto qualsiasi sano di mente programmatore gag.

Direi di sì.Per me, si rompe solo il 'flusso' di un fluido-scritto un pezzo di codice.

Un altro argomento potrebbe anche essere che se si bastone per le parole chiave supportato dalle più moderne lingue, quindi il flusso del programma (se non la logica o il codice) potrebbe essere portato su qualsiasi altra lingua.Avere una parola chiave non supportata (vale a dire, continuare o goto) sarebbe rompere.

È molto più di una preferenza personale, ma non ho mai dovuto usarlo e non davvero considerare un'opzione quando sto scrivendo il nuovo codice.(come goto.)

Per quanto questo programmatore è interessato, If/else considerato nocivo.

Continue è una funzione davvero utile nella maggior parte delle lingue, perché permette di blocchi di codice per essere saltato, per determinate condizioni.

Una alternativa potrebbe essere utilizza variabili booleane a, se le istruzioni, ma questi avrebbe bisogno di essere resettato dopo ogni utilizzo.

continuare sente sbagliato per me.break si ottiene fuori di lì, ma continua sembra essere spaghetti.

D'altra parte, è possibile emulare continuare con la rottura (almeno in Java).

for (String str : strs) contLp: {
    ...
       continue contLp;
    ...
}

continua, può essere utile in alcune circostanze, ma si sente ancora sporco per me.

for (char c : cs) {
    final int i;
    if ('0' <= c && c <= '9') {
        i = c - '0';
    } else if ('a' <= c && c <= 'z') {
        i = c - 'a' + 10;
    } else {
        continue;
    }
    ... use i ...
}

Credo che la linea di fondo argomento contro di continuare è che rende più difficile DIMOSTRARE che il codice è corretto.Questa è la prova in senso matematico.Ma probabilmente non importa a voi, perché nessuno ha le risorse per "dimostrare" un programma per computer che è notevolmente complessa.

Inserire la statica-strumenti di analisi.Si può rendere le cose più difficile su di loro...

E vai, che suona come un incubo per gli stessi motivi, ma anche in qualsiasi altro posto a caso nel codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top