Esiste un nome per questo modello?

3

Un ciclo while può essere scritto come segue in C # (e in molte altre lingue):

int someValue;
int someTerminatingValue;

while ((someValue = GetSomeValue()) != someTerminatingValue)
{
    // Do something interesting
}

Esiste un nome per questo modello di assegnazione del valore all'interno dell'espressione del ciclo while?

NB Non sto chiedendo se è una buona idea o una cattiva idea, solo se c'è un nome per questo modello. Che sia buono o cattivo, la gente lo vedrà quindi hanno bisogno di sapere di cosa si tratta. Se non c'è un nome per questo allora va bene, sto solo chiedendo se ce n'è uno.

    
posta BanksySan 12.07.2015 - 19:30
fonte

2 risposte

5

Non esiste un nome per questo specifico linguaggio.

Ed è una buona idea ™ per scrivere codice idiomatico , invece di cercare di ridurlo ulteriormente o scrivere codice che è troppo intelligente per metà .

Specialmente se qualsiasi alternativa è prolissa, noiosa, ripetitiva o comunque cattiva.

    
risposta data 12.07.2015 - 23:08
fonte
2

Idiom

A questa scala, i motivi ricorrenti sono chiamati idiomi anziché schemi di progettazione. Gli schemi di progettazione funzionano su una scala più ampia rispetto a una singola riga di codice o un singolo ciclo.

Codice intelligente

Ciò si qualifica anche come anti-pattern code . Il codice intelligente non è consigliabile, perché sarà più difficile leggere per i tuoi compagni di squadra e per te stesso 6 mesi dopo.

Migliori alternative

Inizializzazione del ciclo, loop "propulsione", condizioni di uscita del ciclo sono separate.

    int someValue;
    int someTerminatingValue;

    for (someValue = GetSomeValue();         // initialize the loop variable
         someValue = GetSomeValue();         // move the loop onward
         someValue != someTerminatingValue)  // exit condition
    {
        // Do something interesting
    }

Ma questo è ancora codice intelligente . McConnell chiama questo " un while loop abusivamente stipato in un'intestazione di ciclo for " (vedi Codice completo 2, p.374). propone anche un'alternativa migliore.

    someValue = GetSomeValue();                 // initialize the loop variable
    while (someValue != someTerminatingValue)   // exit condition
    {
        // Do something interesting
        someValue = GetSomeValue();             // move the loop onward
    }

Related:

( fonte )

    
risposta data 12.07.2015 - 20:34
fonte

Leggi altre domande sui tag