www.isidoroghezzi.net

Assegnamento per sbaglio

descrizione e soluzione definitiva
18 dicembre 2007
L'errore:
E' il più classico e forse diffuso errore di programmazione in C/C++ (ma anche, ovviamente con sintassi leggermente differenti, in Java, JavaScript, PHP, Visual Basic, SQL ecc...)
Per scovarlo, sono necessarie ore, se non giorni, di debug.
E' un semplice errore di battitura: = anziché ==.
In altre parole viene effettuato un assegnamento anziché un confronto.
if (x = 5) // assegnamento
if (x == 5)  // confronto
Spesso l'assegnamento genera un warning del compilatore, che però purtroppo viene ignorato, in quanto sepolto da innumerevoli altri warning anch'essi purtroppo ignorati.

Soluzione definitiva:
Per evitarlo per sempre, in qualunque linguaggio, c'è un modo semplicissimo. Talmente semplice che d'ora in avanti non avrete più alcun motivo per commetterlo: mettendo, nei confronti, la costante a sinistra.
Infatti se per sbaglio si cerca di assegnare un valore ad una costante, il compilatore ne impedisce la compilazione.
if (5 = x)  // assegnamento ad una costante, il compilatore genera un errore
quindi lo sviluppatore si dovrebbe accorgere subito dell'errore commesso, correggendo in:
if (5 == x)  // confronto con costante a sinistra
Per estensione, non solo nell'uguaglianza, ma anche in tutti gli altri confronti:
for (int i = 0; 100 > i; ++i)
In C++, addirittura si ottiene anche un teorico guadagno prestazionale; infatti, con la costante a sinistra, viene chiamato (se presente) il relativo metodo const associato alla classe della costante.
isidoro punto ghezzi chiocciola icloud punto com
copyright 2006 - 2007 - 2008 - 2009 - 2010 - 2011 - 2012 - 2013 - 2014 - 2015 - 2016 - 2017 - 2018 - 2019, isidoro ghezzi
tutti i marchi citati sono di proprietà dei rispettivi proprietari
www.isidoroghezzi.net non è legato ad alcun ente: pubblico o privato, militare o civile.
www.isidoroghezzi.net è totalmente "demicrosoftizzato".
1MqUrGb6SiebJ6tJZT272kbVQCryS6pFWd
1MqUrGb6SiebJ6tJZT272kbVQCryS6pFWd

Valid HTML 4.01 Transitional Valid CSS!