Fare un grosso affare con == vero?


105

C'è un mio collega che scrive costantemente:

if (someBool == true)

Mi spinge verso il muro! Dovrei farne una grande quantità o lasciarlo cadere?


12
Preferisco l'esplicito if (some_flag == true)ma l'implicito if (is_something)o if (has_something). Nota i nomi delle variabili.
fredoverflow,

69
Ricorda al tuo collega che anche il tipo di someBool == trueè booleano, quindi con la stessa logica dovrebbe essere if ((someBool == true) == true).
Mike Seymour,

2
@GSto: suppongo che tu lo sappia, ma in PHP puoi farlo per "lanciare" qualsiasi cosa a un bool e può essere effettivamente utile.
zneak,

2
@zneak O potresti essere più chiaro e usare $var = (bool) some_expression. E nella maggior parte dei casi, non importa nemmeno perché PHP eseguirà le conversioni necessarie in modo dinamico.
waiwai933,

4
controlla sempre prima la costante, if (true == someBool), nel caso in cui tu abbia digitato accidentalmente = invece di == [sì, sto scherzando!]
Steven A. Lowe,

Risposte:


126

È solo codice ridondante, non vita o morte. Però....

Se sta accadendo molto, potrebbe essere un problema con come someBoolviene nominato. Un buon nome può fare molto per eliminare la necessità di==true

if(IsSomeCondition)

o

if(hasCondition)

o

if(somethingExists)

per esempio.


Questo suona molto vero per me. Si tratta di chiarezza e arte della denominazione, la sintassi originale non è poi così male, ma questa è la strada giusta per un codice migliore.
TJB,

2
Sconfiggimi! Senza una denominazione appropriata, l'equivalenza più concisa non ha alcun senso.
Troy Hunt,

4
Ho dovuto usare someBool == truepiù volte il codice legacy per chiarezza. Ma se scrivo da zero if (isSomething)
assegno

Sono d'accordo, anche se la denominazione risolverebbe questo, supponendo che il nome fosse SomeBool, potrebbe significare qualsiasi cosa ed essere di qualsiasi tipo (un numero intero uguale alla quantità di booleani in un array forse?). I booleani hanno bisogno di una sorta di verbo esistenziale, o saranno sempre difficili da leggere da soli.
Morgan Herlocker,

Sono d'accordo, si tratta di leggibilità. Se le variabili hanno un buon nome, non è necessario. Se l'espressione legge meglio con essa, sceglierei "== true", inoltre è coerente se usi "== false" invece di (il brutto) "if (! ())".
Ronny Brendel,

71

Quando vedo someBool == true, non posso fare a meno di pensare che il programmatore non abbia interiorizzato l'idea della valutazione , che è una carenza piuttosto fondamentale.

Tuttavia, la mia prospettiva è distorta perché ho trascorso diverse estati al college insegnando la programmazione ai bambini, che spesso scrivevano espressioni come questa perché sinceramente non avevano padroneggiato l'esercizio mentale della valutazione di un'espressione. Una volta che hanno criticato il concetto, la ridondanza è diventata ovvia.

Per un programmatore professionista altrimenti competente, probabilmente non è così. Probabilmente è solo una cattiva abitudine che hanno sviluppato nei loro primi giorni di programmazione e non hanno mai tremato del tutto. Ma mi spaventerebbe ancora un po 'se fosse la prima cosa che vedo qualcuno fare in un'intervista.


Non mi affretterei così rapidamente a prendere l'abitudine. Ho sentito alcune cose davvero straordinarie dalla bocca dei programmatori professionisti. Di solito seguito poco dopo da uno dei grokker, "come ha mai funzionato?"
dash-tom-bang,

12
Concordare con tutto il cuore sulla valutazione. In occasione mi sono chiesto, "Dove si ferma?" if ((((x == true) == true) == true)! = false) // e così via ...
yawmark

1
A volte scrivo if (c == true) return true; else return false;, ma il 99% delle volte (l'1% è lì dato che non posso mai essere sicuro di non averne perso qualcuno) Noterò immediatamente e sostituirò il tutto con return c. Mi aspetto che i programmatori più competenti dovrebbero fare qualcosa di simile se hanno sviluppato l'abitudine all'inizio della loro carriera. Quello che non mi aspetterei è una risposta wtf.
Lie Ryan,

1
Oh ragazzo, l'arte di pensare. L'ho trovato letteralmente nel nostro codice la scorsa settimana. if (!someCondition) { someCondition = false; }Ho visto alcuni (er, molti) licenziamenti e alcune impossibilità nel nostro codice, ma questo era così semplice ma così aggravante da pensare che qualcuno lo abbia effettivamente scritto. Più volte, anche.
Anthony Pegram,

1
Basta notare che ho visto alcuni casi di if(x) x=true;cui NON erano ridondanti, ma piuttosto l'equivalente di x=!!x;(normalizzare x a 0/1)
jkerian

58

Anche questo mi fa impazzire, ma direi che la ridondanza per loro in modo costruttivo e poi lo faccio cadere anche se non sono d'accordo.

In alternativa, puoi provare questo approccio:
Tu: puoi iniziare a utilizzare la seguente convenzione di codice per valutare i booleani?

if (someBool==true)&&(true==true) {}

Loro: perché dovremmo farlo? La seconda metà di tale affermazione è ridondante, valuterebbe sempre come vero.

Tu: George, hai ragione. Sciocco me Andiamo con una versione senza ridondanza quindi. Che ne dite di?

if (someBool) {}

6
Sì, d'accordo. È sciocco, ma devi scegliere i tuoi combattimenti, e questo codice sta davvero facendo ciò che i tuoi colleghi faranno. Menzionalo in un non- "Che diavolo c'è di sbagliato in te ?!" tipo di modo, quindi rilasciarlo. Anche se se iniziano a tirare cazzate come "if (someBool! = True)" o "if (! SomeBool == true)" o altre simili convoluzioni, potrebbe essere una lotta che vale la pena raccogliere ....
BlairHippo,

3
In che modo (someBool == false) è peggio di se (someBool == true)?
FinnNk,

5
true=truenon compilare, non è possibile assegnare a true;-)
fredoverflow

1
Mi sono abituato if(somebool == false)o !=, ma sempre contro falso e non vero. Lo trovo ridondante, ma poiché lo standard di codifica insiste che if()sembra una funzione, lo spazio bianco tra le parentesi mi aiuta a leggerlo. Da solo, un bool è un bool, ma if (somePointer)non vola; Preferisco if (somePointer != NULL)poiché un puntatore non è un bool.
dash-tom-bang,

5
Riguarda la leggibilità, non illogica o (micro) ridondanza
Ronny Brendel,

45

Penso che, se qualcosa di così banale è il tuo problema più grande con i tuoi colleghi, dovresti considerarti piuttosto fortunato.


5
Ben detto, è bello lottare per la perfezione, ma sicuramente ci sono pesci più grandi da friggere
TJB

3
Penso che tu lo dica su ogni problema che merita discussione.
Dave Van den Eynde,

2
È potenzialmente indicativo di problemi molto più grandi. Una piccola macchia marrone sul soffitto del tuo garage potrebbe non sembrare un grosso problema, ma potrebbe significare che hai una grande perdita d'acqua.
Josh,

42

Dovresti assolutamente fermare questa cattiva abitudine. Delicatamente...

È facile dimenticare di scrivere il doppio segno uguale, trasformando il codice in:

if (someBool = true)

In C # per esempio questo produrrà solo un avvertimento, non un errore. Quindi, a meno che tu non consideri gli avvisi come errori, il codice verrà eseguito, imposta la variabile su true e inserisci sempre la condizione.


6
Questo non è un argomento rilevante. Se stai lavorando in una lingua del genere, potresti semplicemente spostare il vero dall'altra parte. La domanda è se includere o meno il vero.
Cam

8
@Cam: manca il punto sei tu. Logica all'indietro non sto suggerendo.
Guffa,

15
@Cam - Sta dando un esempio nel mondo reale di quando questo può essere un problema. Direi che questo è abbastanza rilevante.
ChaosPandion,

1
@Guffa Cam ha ragione. Questo non è un motivo per smettere di usare == (anyType) in if blocchi.
Ronny Brendel,

2
@Ronny: No, non può succedere con nessun tipo (a meno che la lingua non consenta effettivamente qualsiasi tipo come condizione). L'istruzione if (answer = 42) {}semplicemente non viene compilata perché l'espressione non è un bool.
Guffa,

21

Sono d'accordo con te, ma qui interpreto l'avvocato del diavolo:


A seconda della lingua e del nome della variabile, x == true è appropriato:

Considera la seguente situazione in una lingua con tipizzazione statica e coercizione dei tipi per i tipi integrali:

if (actionsAllowed){
    //do actions, since they are allowed
    //...
}

Qualcuno che legge questa sezione del codice potrebbe non rendersi immediatamente conto che actionsAllowed è una variabile booleana - potrebbe anche essere un numero intero, che rappresenta il numero di azioni consentite. Quindi aggiungendo == true, diventa chiaro che x è un valore booleano e non un intero che viene forzato in un valore booleano:

if (actionsAllowed == true){
    //do actions, since they are allowed
    //...
}

13
leggibilità == GoodThing
Muad'Dib

5
if ((readability == GoodThing) == true) ...
JoelFan,

1
bool isGoodThing = leggibilità? true: (codingStandards? true: (internalizationOfConcept? true: false));
johnc,

17
Quindi rinomina la variabile actionsAreAllowed.
Graeme Perrow,

9
Scrivendo if (x) { ...affermi già che xè un booleano o è convertibile in un booleano. Ciò che lo chiami è irrilevante.
Daniel Earwicker,

15

Che dire boolli nullable?

bool? MyFlag = null;

if (MyFlag == true)
    ;  

if (MyFlag)  // error, doesn't compile!
    ; 

if (MyFlag.Value)
johnc

1
Non tutte le lingue hanno bool di nulla, e molte di quelle che accetteranno accettano il tuo secondo costrutto.
zneak,

1
@johnc: "if (MyFlag.Value)" potrebbe non fare davvero quello che vuoi in quanto può generare un'eccezione se MyFlag è nullo (che puoi verificare controllando MyFlag.HasValue).
Ludovic Chabant,

4
Questa è la mia pipì per animali domestici con boolli nullable :)
Jarrod Dixon

3
bool? isValid = null; if (isValid ?? false);
skolima,

11

In genere, non si vuole fare molto con le convenzioni di codifica a meno che detta convenzione non impedisca in qualche modo al progetto in modo significativo. Ho visto molti argomenti accesi intensificare su cose piccole come le regioni di codice e le sottolineature principali.

Detto questo, non vedo alcun problema con l'aggiunta == truea una dichiarazione condizionale. È un dato di fatto, ho l'abitudine di utilizzare == falseal contrario di un punto esclamativo principale quando testare condizioni negative. Penso che sia più leggibile.

Se esiste una convenzione stabilita, dico seguirla a meno che non ci siano motivi per cambiare. Tuttavia, non vale davvero la pena sollevare un grosso puzzo.


1
A seconda della lingua, someValue potrebbe non essere necessariamente l'equivalente di true anche se viene valutato come true. Ad esempio, (9 == True)valuta falso in Python e immaginerei simile in C ++.
dash-tom-bang,

le regioni in codice e le sottolineature principali mi fanno venire voglia di dare un pugno in faccia alle persone.
MGOwen,

11

Ack. Sono quel ragazzo. La vergogna, la vergogna. È come ho imparato, ed è come "auto-formattare" nella mia testa. L'unica volta che utilizzo la sintassi preferita di Joel è quando la variabile bool ha un prefisso verbale come "is". Ho bisogno del verbo, sia "is", "can", "did", oppure ho bisogno del == per fornire il verbo "equals". Potrei non rompere mai questa abitudine, quindi capirò se non mi saluti per strada.


7
Non è una brutta cosa. Il codice che legge come il testo reale è molto meglio di quello implicito. Mantieni l'abitudine per motivi di leggibilità.
Ronny Brendel,

11

mi ricorda il "codice della follia booleana", è come questi

if(someBool == true)
   otherBool = false;
else
   otherBool = true

Invece di:

 otherBool = !someBool

È divertente, ho dovuto mantenere un sistema che aveva quei rifiuti disseminati dappertutto. Mi ha fatto impazzire.
Tjaart,

8

Personalmente, non mi piace molto il modo di dire "non" nei linguaggi basati su C. Quel piccolo punto esclamativo è troppo facile da trascurare.

Quindi lo scrivo per intero:

if (someCondition == false) {

Dopo averlo letto per un po ', voglio anche la simmetria con

if (someCondition == true) {

Quindi consideralo un artefatto di C usando !invece di not.


3
C ++ ha effettivamente l' notoperatore, così come C (una volta inclusa l'intestazione standard <iso646.h>). Se non si vuole (o non può) utilizzare questa intestazione (o se sei bloccato con Java o C #), suggerisco di mettere uno spazio dopo il punto esclamativo: if (! condition). Questo lo rende un po 'più evidente.
Konrad Rudolph,

1
Faccio Java. notnon è un'opzione.

6

Dipende dalla lingua, ma di solito è una cattiva idea ...

In C, non farlo mai . È troppo facile trovare una situazione in cui il valore che si sta testando non è falso (diverso da zero), ma non è uguale al singolo valore definito come "vero".

In Ruby, fallo solo se sei assolutamente certo di voler fallire su tutto tranne che su Boolean true.

In C ++ e in altri linguaggi statici con un tipo bool, è ridondante e può causare errori di programmazione quando si digita in modo errato =invece di ==, oppure errori di promozione come menzionato nei commenti.


In realtà, nelle lingue in cui l'operatore di assegnazione restituisce un valore ... come C ++ ... if (b == true) {non è solo ridondante. È anche un po 'rischioso, perché potresti essere accidentalmente assegnato truea b.
Stephen C,

4
Non è solo ridondante in C ++, è pericoloso. Se scrivi if (b == true)e bnon è un bool, le conversioni di tipo vanno nella direzione sbagliata. Una boolè un tipo integrale che normalmente viene promosso a un tipo integrale appropriato con il valore 1. Se si scrive, per esempio, int b(2); if (b == true)allora truediventa una intcon valore di 1 ai fini del confronto, piuttosto che bessere costretti a tipo bool, che darebbe il risultato giusto.
David Thornley,

@DavidThornley, attiva gli avvisi nel tuo compilatore. Trattare gli avvisi come errori è una migliore tecnica di programmazione difensiva piuttosto che evitare ==.
Abyx,

5

Pensi che sia male? Che ne dite di:

if(someCondition) {
  return true;
} else {
  return false;
}

2
Ragazzo quante volte l'ho visto. Questo è un buon caso per uno strumento come ReSharper.
Giobbe

Sì, se assumi zolle, acquista ReSharper.
Kirk Broadhurst,

4

preferisco

if (bVal)

o

if (!bVal)

anche, ma temo che tirarlo su farà arrabbiare le persone, quindi il mio consiglio è di dimenticarlo. Scusate!


4
Per l'amore di tutto ciò che è santo, purché non lo sia if (!bNotVal) o if (bNotVal)anche in primo luogo. I negativi nei nomi rendono tutto più difficile da leggere.
dash-tom-bang,

2
Conoscevo un dev che avrebbe boolso isNotConnected; if (isNotConnected == true) ... yuck
johnc,

4

dovresti dirgli che sta sbagliando.

suo

if (true == someBool) {

}

se mai ne dimentica uno = è nei guai nel suo stile di scrittura.


3

Che ne dite di

if (x == "true")

PERCHÉ È UNA STRINGA ?!


Sto lavorando su un codice php legacy giusto e ogni tanto trovo qualcosa di simile if(preg_match('/title/', implode($_POST))){. PHP, abbastanza detto, devo trovare un lavoro migliore.
Keyo,

4
sì, vedo anche se (x == "1"), ma di solito ciò è dovuto a un design db scadente.
atfergs

Ho usato costrutti simili quando xprovenivano dall'input dell'utente (file di configurazione o servizio web, ad esempio). Tuttavia, di solito permetto altri valori reali, quindi finisce più simileif x.lower().strip() in ["true", "yes", "on", "1"]
eswald


3

Scrivo codice così!

Ecco perché:

"if bla == true" si legge come una frase, dove in molti casi "if bla" non lo fa. Sembra sbagliato quando LEGGI il codice reale.

Inoltre il compilatore avverte delle assegnazioni in if block, quindi non c'è davvero alcun pericolo nell'utilizzare == true. (confondendolo con =)

Anche i ragazzi che non scrivono "== true", usano "! ()" Per "== false"? Lo trovo davvero brutto. E se usi "== false", è anche molto coerente usare anche "== true", invece di avere due modi distinti di verificare la verità.


3
Dici "se bla" non legge come una frase ... significa che la tua variabile non ha un nome corretto ... cosa c'è di sbagliato in questo: if (userHasRights) doSomething ()
JoelFan

"in molti casi". Si hai ragione. Anche la ridenominazione va bene. Con "if (QWidget :: acceptDrops () == true)" non hai la possibilità di rinominare. forse sarebbe bene nominarlo doAcceptDrops () ... È troppo seccante (ed è impossibile essere coerenti usando quella regola di omissione in qualsiasi API), quindi essere coerente con altre "== qualunque" -if, Consiglio vivamente di non ometterlo, quindi non "sembra" diverso, quindi sembra coerente.
Ronny Brendel,

3

Ricorda che stai lavorando come parte di un team, quindi è necessario elaborare queste cose insieme. "Gioca bene con gli altri" è ancora un tratto importante della personalità anche dopo le elementari :)


2

Generalmente ometterà '== true', ma non vale nemmeno un minuto per discuterne a meno che tu non l'abbia incluso negli standard di codifica del tuo team.


3
Inoltre, se rientra negli standard di codifica del team, è davvero necessario rivalutare gli standard per sbarazzarsi di curiosità come questa.
JohnFx,

Concordato! Per ogni evenienza ...
FinnNk,

2

Mentre sono d'accordo come sviluppatore principalmente C #, non posso dire che sia sempre così. Ad esempio, in Javascript, il === eseguirà la coalescenza di tipo. Quindi supponendo var x = 3 quindi:

if(x) --> true

mentre

if (x === true) --> false

Immagino che sia diverso da == poiché anche in JS non userei if (x == true) ma solo qualcosa a cui pensare.

Questo tipo di tocchi su un altro punto che è emerso nel mio ufficio:

bool b = false;

In C #, bool b; basterebbe e inizializzare b su falso . Tuttavia, è più esplicito scrivere la riga sopra e comunque dovrebbe essere strappato dal compilatore durante l'ottimizzazione.

Quindi suppongo che il mio punto sia che non è sempre così ovvio ciò che è e non è una buona pratica e molto si riduce alle preferenze e alle caratteristiche / stranezze del linguaggio.


bool b;viene inizializzato su false solo quando bè un campo. È necessario inizializzare le variabili locali in modo esplicito.
Matthew Flaschen,

+1 concordato. È lo stesso problema anche con altre lingue (di scripting). Devi essere esplicito se vuoi testare per booleano trueo semplicemente "vero". Ad esempio, qualsiasi stringa non vuota viene considerata == truema non === truein alcune lingue.
Martin Wickman,

2

Ah sì, ma cosa succede se la variabile è nullable? (Bool?)

Alcune lingue (C #) richiederanno il cast o il confronto con "true".

bool? isAccepted = true;

if((bool)isAccepted)
{...}

if(isAccepted == true)
{...}

2

I giovani conoscono le regole, ma i vecchi conoscono le eccezioni;)

In ultimo C#, se hai a che fare con un null-able bool, allora devi:

bool? x = null;
bool? y = true;
bool? z = false;
if (x == true || y == true || z == true) {
    // That was the only way that is reasonably readable that I know of
    // to accomplish this expression.
}

Se il tristato non è un problema, di solito non dovrebbe esserci un motivo per confrontare qualcosa con true/ True. Tuttavia, in Pythone in molte altre lingue come C/C++è possibile eseguire ifun'espressione su non-bool. Queste lingue hanno regole uniche per interpretare numeri interi, puntatori, elenchi, ecc. Come vero o falso. A volte non lo vuoi. Ad esempio, in questo frammento di Python:

x = True
y = 'abcdef'
z1 = x and y
z2 = (x == True) and (y == True)

Qui zdovrebbe essere True, ma z2dovrebbe esserlo False. Ora, un Clojurelinguaggio si avvicina a questo in un altro modo: la andfunzione non necessariamente valuta un bool, ma ifpuò gestirlo.

Indipendentemente dalla lingua, ogni volta che ti trovi a confrontare qualcosa con Trueo False, probabilmente vale la pena commentare.


Il primo problema deriva da una falsa premessa IMO utilizzando nomi di variabili orribili. X Supponiamo, y, z sono stati nominati notExceptButHasX, exceptNotButIsntY, doNotUnlessIsExceptZ? In che modo ciò rende leggibile il tuo problema? Se x, y, z sono stati denominati in modo simile a "isEnabled", "isEffective", "hasProperty", allora la tua affermazione diventa isEnabled || isEffective || hasPropertymolto più leggibile rispetto al confronto con trueo false.
Thomas,

1

Una simile codifica mi avrebbe sfregato nel modo sbagliato anche prima. Sebbene l'identificatore di esempio sia denominato "someBool", l'utilizzo involontario di quello stile di codifica su una variabile che non era garantita come booleana potrebbe comportare un comportamento indesiderato. Se il valore di "someBool" non è esattamente "vero" o "falso", il risultato sarà falso.

L'anno scorso ho riscontrato un bug molto sottile causato da un tale stile di programmazione che era difficile da identificare perché gli occhi di uno guardano su tali costrutti. Penseresti: "Come potrebbe essere sbagliato?" Lo stesso vale per espressioni così ben comprese come "(var)" o "(! Var)", che le leggi o le codifichi senza verificarne il comportamento.

Quindi ho introdotto un paio di standard di codifica per ridurre l'esistenza di tali bug nella base di codice e la probabilità che tali bug sottili si insinuino accidentalmente in futuro.

  1. Tutte le espressioni devono essere racchiuse tra parentesi secondo il loro intento.
  2. Tutti i test booleani devono essere espressi in negativo, come "suchBool! = False".

Ripulendo il codice non conforme al nuovo stile, ho identificato e corretto alcuni altri casi di bug così sottili.


1
Avere un po 'di Bool in grado di essere qualcosa di diverso da VERO / FALSO è una cattiva pratica di programmazione.
Attaccando

@AttackingHobo, questa è una delle insidie ​​di non avere tipi booleani in una lingua e / o non usare una classe per fornire il comportamento esatto desiderato.
Huperniketes,

1

Ho dovuto usarlo tutto il tempo in ActionScript 2 (devo ammettere che ora è una lingua morta), perché:

var something:Boolean = org.black.box.unknown.ThisMightNotExistYet();

// this is slightly ambiguous
if(something)
{
}

// because if you allow undefined you might actually mean
if(false != something)
{
}

// which can mean something different than
if(true == something)
{
}

// and comparing against what you actually MEAN is less script than
if(undefined != value && value)
{
}

Quindi era quasi sempre meglio essere specifici.


1

Sono d'accordo. È una costruzione ridondante, specialmente in linguaggi tipicamente forti.

Per aggiungere un altro uso improprio di booleani, ho trovato questo tipo di costruzione un sacco di volte in Javascript, (specialmente in alcune funzioni di mostri simili a spaghetti, come in oltre 100 righe):

//create the variable, not initializing it
var flag;
//...
//assing a value to the var, by the example 
flag=$("mycheckbox").selected;
//...

//and at the moment of use it:
if(flag!=true) {
   //code to execute when the checkbox is unchecked
}

Sembra che a causa della mancanza di una definizione rigorosa del tipo in questo linguaggio, alcuni programmatori preferiscano non dover fare confusione con i false|undefinedvalori.


1

Ho un collega che avrà un codice come questo:

if(something == true)

E poi, per una sorta di test / debugging, vorrà non chiamare questo blocco, quindi lo cambierà in:

if(something == true && false)

E poi occasionalmente lo cambierà in:

if(false)

La cosa peggiore è che questo tipo di debug mi si è cancellato di tanto in tanto ed è davvero brutto da leggere per gli altri sviluppatori!


0

Direi che la coerenza è il re in una base di codice. Quindi dovresti usare lo stile, che è usato principalmente nella tua organizzazione. Cerca di rendere il tuo stile preferito parte delle linee guida ufficiali sulla codifica aziendale. Se è già nelle linee guida, basta seguirlo.

(Detto questo, mi infastidirebbe molto, ma probabilmente non abbastanza per farne un grosso problema).


0

Preferisco non posizionare il extra == vero, ma a volte lo includo accidentalmente e non lo noto. La persona potrebbe non averlo notato e collocato accidentalmente. Rileggo il mio codice e talvolta noto che ho inserito extra == true, quindi rimuovo quello == true. A volte non me ne accorgo e accolgo volentieri qualcuno che mi dice che l'ho posizionato in modo ridondante.


0

che ne dite di:

int j = 1;
for (int i=1; i>=j; i++) ...

Sì, l'ho visto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.