Hay un colega mío que escribe constantemente:
if (someBool == true)
¡Me saca de quicio! ¿Debo hacer un gran negocio o simplemente dejarlo caer?
Hay un colega mío que escribe constantemente:
if (someBool == true)
¡Me saca de quicio! ¿Debo hacer un gran negocio o simplemente dejarlo caer?
if (some_flag == true)
pero lo implícitoif (is_something)
oif (has_something)
. Tenga en cuenta los nombres de las variables.someBool == true
también es booleano, por lo que, según la misma lógica, debería serloif ((someBool == true) == true)
.$var = (bool) some_expression
. Y en la mayoría de los casos, ni siquiera importará, ya que PHP hará las conversiones necesarias de forma dinámica.Respuestas:
Es solo código redundante, no vida o muerte. Sin embargo....
Si sucede mucho, podría ser un problema con cómo
someBool
se nombra. Un buen nombre puede contribuir en gran medida a eliminar la necesidad de==true
o
o
por ejemplo.
fuente
someBool == true
código heredado varias veces para mayor claridad. Pero si escribo desde ceroif (isSomething)
Cuando veo
someBool == true
, no puedo evitar sentir que el programador no ha internalizado la idea de la evaluación , que es una deficiencia bastante fundamental.Sin embargo, mi perspectiva es sesgada porque pasé varios veranos en la universidad enseñando programación a niños, quienes frecuentemente escribían expresiones como esta porque realmente no habían dominado el ejercicio mental de evaluar una expresión. Una vez que asimilaron el concepto, la redundancia se hizo evidente.
Para un programador profesional competente, este no es el caso. Probablemente sea solo un mal hábito que desarrollaron en sus primeros días de programación y nunca temblaron. Pero aún así me asustaría un poco si fuera lo primero que vi hacer a alguien en una entrevista.
fuente
if (c == true) return true; else return false;
, pero el 99% de las veces (el 1% está ahí, ya que nunca puedo estar seguro de que no me perdí algo), notaré inmediatamente y reemplazaré todoreturn c
. Esperaré que los programadores más competentes hagan algo similar si desarrollaron el hábito temprano en su carrera. Lo que no esperaría es una respuesta wtf.if (!someCondition) { someCondition = false; }
He visto algunas (er, muchas) redundancias, así como algunas imposibilidades en nuestro código, pero este fue tan simple pero tan irritante para pensar que alguien realmente lo escribió. Múltiples veces, incluso.if(x) x=true;
cuales NO eran redundantes, sino más bien el equivalente dex=!!x;
(normalizar x a 0/1)Eso también me vuelve loco, pero diría que les menciono la redundancia de manera constructiva y luego la dejo caer si no están de acuerdo.
Alternativamente, puede probar este enfoque:
Usted: ¿Puede comenzar a usar la siguiente convención de código para evaluar booleanos?
Ellos: ¿Por qué haríamos eso? La segunda mitad de esa declaración es redundante, siempre se evaluaría como verdadera.
Tú: Por George, tienes razón. Tonto de mí. Vayamos con una versión sin toda la redundancia entonces. ¿Qué tal si?
fuente
true=true
no se compila, no se puede asignar atrue
;-)if(somebool == false)
o!=
, pero siempre contra falso y no verdadero. Lo encuentro redundante, pero dado que el estándar de codificación insiste en queif()
parece una función llamar al espacio en blanco entre los parens me ayuda a leerlo. Por mi cuenta, un bool es un bool, peroif (somePointer)
no vuela; Prefieroif (somePointer != NULL)
ya que un puntero no es un bool.Creo que, si algo tan trivial es su mayor problema con sus compañeros de trabajo, debería considerarse bastante afortunado.
fuente
Definitivamente deberías dejar este mal hábito. Suavemente...
Es fácil olvidar escribir los signos de doble igualdad, convirtiendo el código en:
En C #, por ejemplo, esto solo generará una advertencia, no un error. Entonces, a menos que trate las advertencias como errores, el código se ejecutará, establezca la variable en verdadero y siempre ingrese la condición.
fuente
if (answer = 42) {}
simplemente no se compila porque la expresión no es un bool.Estoy de acuerdo contigo, pero voy a jugar al abogado del diablo aquí:
Dependiendo del idioma y el nombre de la variable, x == verdadero es apropiado:
Considere la siguiente situación en un lenguaje con tipeo estático y coerción de tipos para tipos integrales:
Alguien que lea esta sección del código podría no darse cuenta de inmediato de que actionsAllowed es una variable booleana; también podría ser un número entero, que representa el número de acciones permitidas. Entonces, al agregar == verdadero, queda claro que x es un valor booleano, y no un número entero que se coacciona a un valor booleano:
fuente
actionsAreAllowed
.if (x) { ...
, ya está afirmando quex
es un valor booleano o convertible en un valor booleano. Lo que llamas es irrelevante.¿Qué pasa con las boletas anulables?
fuente
Por lo general, no desea hacer un gran problema con las convenciones de codificación a menos que dicha convención de alguna manera impida el proyecto de manera significativa. He visto muchos argumentos acalorados sobre cosas tan pequeñas como regiones de código y guiones bajos.
Dicho esto, no veo ningún problema
== true
para agregar a una declaración condicional. De hecho, tengo la costumbre de usar== false
en lugar de un signo de exclamación principal cuando hago pruebas para detectar condiciones negativas. Creo que es más legible.Si hay una convención establecida, digo que la sigan a menos que haya una razón para cambiar. Sin embargo, realmente no vale la pena plantear un gran problema.
fuente
(9 == True)
evalúa como falso en Python y me imagino que es similar en C ++.Ack Soy ese chico La vergüenza, la vergüenza. Así es como aprendí, y así es como "formateo automático" en mi cabeza. La única vez que uso la sintaxis preferida de Joel es cuando la variable bool tiene un prefijo verbal como "es". Necesito el verbo, ya sea "es", "puede", "hizo", o de lo contrario necesito el == para proporcionar el verbo "igual". Puede que nunca rompa ese hábito, así que lo entenderé si no me dices 'hola' en la calle.
fuente
recuérdame el "código de locura booleana", es así
En lugar de:
fuente
Personalmente, no me gusta la forma de decir "no" en lenguajes basados en C. Ese pequeño signo de exclamación es demasiado fácil de pasar por alto.
Por eso lo escribo en su totalidad:
Después de leer eso por un tiempo, también quiero simetría con
Así que considérelo un artefacto de C usando en
!
lugar denot
.fuente
not
operador, y también C (una vez que incluye el encabezado estándar<iso646.h>
). Si no quiere (o no puede) usar esta cabecera (o si le pegan con Java o C #), yo sugeriría poner un espacio después del signo de exclamación:if (! condition)
. Esto lo hace algo más visible.not
no es una opinión.Depende del idioma, pero generalmente es una mala idea ...
En C, nunca hagas esto. Es demasiado fácil encontrar una situación en la que el valor que está probando no sea falso (distinto de cero), pero tampoco sea igual al valor único definido como "verdadero".
En Ruby, haga esto solo si está absolutamente seguro de que desea fallar en todo excepto en el booleano verdadero.
En C ++ y otros lenguajes estáticos con un tipo bool, es redundante y puede provocar errores de programación cuando escribe incorrectamente en
=
lugar de==
errores de promoción como se menciona en los comentarios.fuente
if (b == true) {
no es solo redundante. También es un poco arriesgado, porque es posible que accidentalmente asignadotrue
ab
.if (b == true)
, yb
no es un bool, las conversiones de tipo van por el camino equivocado. Abool
es un tipo integral que normalmente se promueve a un tipo integral apropiado con valor 1. Si escribe, digamos,int b(2); if (b == true)
entonces setrue
convierte en unint
valor 1 para fines de la comparación, en lugar deb
ser coaccionado en tipobool
, lo que daría el resultado correcto.==
.¿Crees que es malo? Qué tal si:
fuente
yo prefiero
o
también, pero me temo que mencionarlo molestaría a la gente, así que mi consejo es que lo olviden. ¡Lo siento!
fuente
if (!bNotVal)
oif (bNotVal)
incluso en primer lugar. Ugh negativos en los nombres hace que todo sea más difícil de leer.deberías decirle que lo está haciendo mal.
sus
if (true == someBool) {
}
si alguna vez olvida uno = está en grandes problemas en su estilo de escritura.
fuente
Qué tal si
¿POR QUÉ ES UNA CADENA?
fuente
if(preg_match('/title/', implode($_POST))){
. PHP, dicho lo suficiente, necesito encontrar un mejor trabajo.x
provienen de la entrada del usuario (archivo de configuración o servicio web, por ejemplo). Sin embargo, generalmente permito otros valores de mejora, por lo que termina más comoif x.lower().strip() in ["true", "yes", "on", "1"]
En realidad, si es anulable, sería necesario probar x == verdadero. :)
fuente
¡Escribo un código así!
Aquí es por qué:
"if bla == true" se lee como una oración, mientras que "if bla" en muchos casos no. Simplemente suena mal, al LEER el código real.
Además, el compilador advierte sobre las asignaciones en los bloques if, por lo que realmente no hay peligro al usar == verdadero. (confundiéndolo con =)
¿También los tipos que no escriben "== verdadero", usan eso "! ()" Para "== falso"? Lo encuentro realmente feo. Y si usa "== falso", es muy consistente también usar "== verdadero", en lugar de tener dos formas distintas de verificar la verdad.
fuente
Recuerde que está trabajando como parte de un equipo, por lo que debe resolver estas cosas juntos. "Jugar bien con los demás" sigue siendo un rasgo de personalidad importante incluso después de la escuela primaria :)
fuente
En general, omitirá el '== verdadero', pero no vale la pena ni siquiera un minuto para discutirlo a menos que lo incluya en los estándares de codificación de su equipo.
fuente
Si bien estoy de acuerdo como desarrollador principalmente de C #, no puedo decir que este sea siempre el caso. Por ejemplo, en Javascript, el === realizará una fusión de tipos. Asumiendo var x = 3 entonces:
mientras
Supongo que es diferente a == ya que incluso en JS no usaría if (x == true) sino algo en lo que pensar.
Este tipo de toques en otro punto que ha surgido en mi oficina:
En C #, bool b; sería suficiente e inicializaría b a falso . Sin embargo, es más explícito escribir la línea anterior y, de todos modos, el compilador debe extraerlo durante la optimización.
Así que supongo que mi punto es que no siempre es tan obvio lo que es y no es una buena práctica y mucho se reduce a la preferencia, así como a las características / peculiaridades del lenguaje.
fuente
bool b;
solo se inicializa en falso cuandob
es un campo. Debe inicializar las variables locales explícitamente.true
o simplemente "verdadero". Por ejemplo, es decir, cualquier cadena no vacía se considera== true
pero no=== true
en algunos idiomas.Ah sí, pero ¿y si la variable es anulable? (bool?)
Algunos lenguajes (C #) requerirán una conversión o comparación con 'verdadero'.
fuente
Los jóvenes conocen las reglas, pero los viejos conocen las excepciones;)
En el último
C#
caso, si está tratando con unnull-able bool
, entonces debe:Si tristate no es un problema, generalmente no debería haber una razón para comparar algo con
true
/True
. Sin embargo, enPython
y en varios otros idiomas, comoC/C++
puede realizar unaif
expresión no bool. Estos lenguajes tienen reglas únicas para interpretar enteros, punteros, listas, etc. como verdaderos o falsos. En algún momento no quieres eso. Por ejemplo, en este fragmento de Python:Aquí
z
debería serTrue
, peroz2
debería serFalse
. Ahora, unClojure
lenguaje se acerca a esto de otra manera: suand
función no necesariamente se evalúa como abool
, pero la funciónif
puede manejar eso.Independientemente del idioma, cada vez que te encuentres comparando algo
True
oFalse
, probablemente valga la pena comentarlo.fuente
notExceptButHasX
,exceptNotButIsntY
,doNotUnlessIsExceptZ
? ¿Cómo eso hace legibilidad en su problema? Si x, y, z fueron nombrados algo así como "isEnabled", "isEffective", "hasProperty", entonces su declaración se convierte enisEnabled || isEffective || hasProperty
algo mucho más legible que compararlo contrue
ofalse
.Tal codificación también me habría molestado antes. Aunque su identificador de ejemplo se llama "someBool", usar ese estilo de codificación inadvertidamente en una variable que no se garantizó que sea booleana podría tener un comportamiento involuntario. Si el valor de "someBool" no es exactamente "verdadero" o "falso", el resultado será falso.
Encontré un error muy sutil el año pasado causado por un estilo de codificación tan difícil de identificar porque los ojos de uno brillan sobre tales construcciones. Uno pensaría: "¿Cómo podría estar mal?" Lo mismo se aplica a expresiones tan bien entendidas como "(var)" o "(! Var)", que las lee o las codifica sin verificar su comportamiento.
Así que introduje un par de estándares de codificación para reducir la existencia de tales errores en la base de código y la probabilidad de que tales errores sutiles se cuelen accidentalmente en algún momento en el futuro.
Al limpiar el código que no se ajusta al nuevo estilo, he identificado y corregido algunas instancias más de errores tan sutiles.
fuente
Tuve que usar esto todo el tiempo en ActionScript 2 (ciertamente es un lenguaje muerto), porque:
Así que casi siempre era mejor ser específico.
fuente
Estoy de acuerdo. Es una construcción redundante, especialmente en lenguajes mecanografiados fuertes.
Para agregar otro mal uso de booleanos, he encontrado este tipo de construcción muchas veces en Javascript, (especialmente en algunas funciones de monstruos tipo espagueti, como en más de 100 líneas):
Parece que debido a la falta de una definición de tipo estricta en este lenguaje, algunos programadores prefieren no tener que perder el tiempo con los
false|undefined
valores.fuente
Tengo un colega que tendrá un código como este:
Y luego, para algún tipo de prueba / depuración, deseará no llamar a este bloque, por lo que lo cambiará a:
Y luego ocasionalmente lo cambiará a:
Lo peor es que este tipo de depuración se me ha pegado en ocasiones y es realmente malo para que otros desarrolladores lo lean.
fuente
Yo diría que la consistencia es el rey en una base de código. Entonces deberías usar el estilo, eso es principalmente usa en su organización. Intente que su estilo preferido forme parte de las pautas oficiales de codificación de la compañía. Si ya está en las pautas, solo sígala.
(Dicho esto, también realmente me molestaría, pero probablemente no lo suficiente como para hacer un gran problema).
fuente
Prefiero no colocar el extra == verdadero, pero a veces lo incluyo accidentalmente y no lo noto. Es posible que la persona no se haya dado cuenta y los haya colocado accidentalmente. Vuelvo a leer mi código y a veces me doy cuenta de que coloqué el extra == verdadero, así que elimino ese == verdadero. A veces no me doy cuenta y agradecería a alguien que me dijera que lo coloqué de forma redundante.
fuente
qué tal si:
Sí, lo he visto.
fuente