Domanda

Se "flag" è vero devo eseguire il passaggio n.1 altrimenti saltatelo.Esiste una via d'uscita per saltare questo controllo ripetitivo non necessario all'interno del ciclo.(Poiché il valore del flag non cambia durante l'esecuzione del ciclo)

private void method(boolean flag) {
        while (man > woman) {
            if (flag) {
                // Step no. 1
                System.out.println(flag);
            }
        }
    }
È stato utile?

Soluzione

Non sono sicuro che è produttivo di preoccuparsi di ottimizzazioni a questo livello. In genere è più importante per ottenere il funzionamento del programma e passare al problema successivo.

Detto questo, v'è un'ottimizzazione chiamato ciclo unswitching che alcuni compilatori farà per voi. Essi duplicare il ciclo, una volta con e una volta senza la condizionale, e spostare il condizionale verso l'esterno per selezionare il loop. (Nel tuo esempio si potrebbe rendere l'intero ciclo condizionale, ma presumo che è solo un artefatto di semplificazione per Stack Overflow.)

Ma questo è solo un motivo in più per non preoccuparsi troppo di ottimizzazioni, almeno, non fino a quando si dispone di un profilo e si sa che questa regione del codice è responsabile per quantità rilevabili di runtime.

Ancora, è meglio scrivere codice in modo pulito, come si può e sconcertante attraverso temi come questo ti insegnerà le cose buone ...

In realtà, condizionali di loop-invariante mi preoccupa troppo. Non credo che ci sia una risposta generale. Ci sono risposte fantasia che coinvolgono funzioni di ordine superiore o lambda, risposte "leave-it-to-the-compilatore", refactoring-the-integrali-esterno-routine di risposte ... Io in genere l'approvazione di ciò rende il codice appaiono più piccoli. Bisogna dare la priorità al fine di discriminare ...

Altri suggerimenti

Dipende dalla portata del do. Se do è sempre vero, non è necessario controllare per essa ed è possibile rimuovere if (do). Non v'è alcuna ragione per impostare una variabile su true se sarà sempre vero. Qual è la portata?

Se il valore di Fare modifiche in qualsiasi momento nel ciclo, è necessario verificarlo ogni volta a meno che tu non riscriva il codice in modo che il fare == vero lo stato viene gestito all'esterno del ciclo corrente (magari in un ciclo più piccolo;dipende da cosa stai cercando di fare [nessun gioco di parole]).

while (man > woman) {

Attenzione ai cicli infiniti qui: -)

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