Esiste un nome speciale per una condizione che interromperà un ciclo se incrementa un determinato numero di volte

0

Esiste un nome per includere una limitazione in una struttura di loop per impedirne l'esecuzione se la sua condizione primaria diventa ingombrante.

Ad esempio

for (var i = 0; i < len; i++){

   some_function();

}

ma se len è da qualche parte impostato su dieci milioni, non voglio eseguirlo, quindi vorrei fare qualcosa del tipo:

for (var i = 0; i < len && i < 50; i++){

   some_function();

}

Esiste un nome per questo tipo di condizione hardcoded?

    
posta 1252748 09.12.2013 - 17:05
fonte

2 risposte

5

Questo sembra essere un tipo di guardia . Vedi: link

In computer programming, a guard is a boolean expression that must evaluate to true if the program execution is to continue in the branch in question.

Nel tuo caso, i < 50 è la guardia del ciclo, impedendone l'esecuzione se i è troppo grande.

Penso che di solito una guardia sia scritta come:

if (len< MAX_VALUE)
{
    for (var i = 0; i < len; i++)
    {
        do_stuff();
    }
}
//optional else-clause to warn when guard-condition is violated.
//else 
//   ERROR("Value for i is too big!!"); 

Questo modulo ti consentirebbe di scrivere una clausola else (in cui potresti avvertire l'utente del valore non valido di i , forse). Il tuo modulo compatto, in cui lo includi nella condizione del ciclo non ammette un else , ma forse non ne vuoi uno.

Come hanno notato anche alcuni commentatori, il tuo ciclo eseguirà ancora fino a 50 iterazioni, anche se len è maggiore di 50. L'utilizzo di una protezione if..else tradizionale come scritto sopra non ti consentirà di farlo, quindi è non equivalente al tuo codice (che controlla anche la condizione di guardia a ogni iterazione).

    
risposta data 09.12.2013 - 17:27
fonte
5

Lo definirei come condizione del bordo .

Alcune condizioni al contorno hanno nomi speciali, come ad esempio i timeout e altre condizioni al contorno sono indicative di errori logici, come un errore "off-by-one".

    
risposta data 09.12.2013 - 17:10
fonte

Leggi altre domande sui tag