@Binod es una información agradable, ¡gracias por eso!
Robin K
Respuestas:
291
No es el "operador doble no", es el operador no aplicado dos veces. El derecho !dará como resultado un booleano, independientemente del operando . Entonces la izquierda !negará ese booleano.
Esto significa que para cualquier valor verdadero (números que no sean cero, cadenas y matrices no vacías, etc.) obtendrá el valor booleano TRUE, y para cualquier valor falso (0, 0.0, NULLcadenas vacías o matrices vacías) obtendrá El valor booleano FALSE.
Funcionalmente es equivalente a un elenco para boolean:
"double-not-operator" o "double-not-operator" ... depende de cómo lo leas.
nickf
9
@nickf no realmente, "el operador no doble" se refiere a un operador, no el acto de usar el operador no dos veces.
Theo
3
@Theo, ¿en realidad es un operador? ¿El intérprete lo considera !!igual (bool)en este caso? ¿O se ejecutará un código de máquina diferente según cuál se use?
Puedes usar tantos como quieras. Si hay un número impar de 'golpes' (puntos de exclamación), la operación NO será la misma que !value, y si hay un número par de golpes, será el mismo (bool) value.
diamondsea
51
Es lo mismo (o casi lo mismo, puede haber algún caso de esquina) como lanzar a bool. Si $rowse convertiría en verdadero, entonces !! $rowtambién es cierto.
Pero si quieres lograrlo (bool) $row, probablemente deberías usar solo eso, y no algunas expresiones "interesantes";)
Gracias que realmente tiene sentido, nunca he visto algo así en otro lenguaje de programación.
Andrei
16
Usar !!es un hábito restante de la programación en C (++). En C hacer un lanzamiento no es tan fácil como en PHP, puede obtener muchos problemas diferentes, compilar advertencias, etc. Así las personas lanzan al boll usando !!.
NikiC
1
@nikic - Suena extraño, OMI ... ya que operator!es sobrecargable, usarlo C++sería peligroso. Tampoco puedes lanzar estructuras en C, o usarlas !con ellas. Además, si se puede negar algo, lo más probable es que pueda devolverlo desde una función que devuelve int, lo que lo convierte en un booleano. ¿Estás seguro de que estás hablando de C?
viraptor
2
He visto !! en muchos programas C como una conversión segura a 1/0. (Como booleano realmente no es más que 0 / "no cero" en C.)
Prof. Falken
1
@viraptor, !!no es nada "interesante" como lo has dicho. Está por todas partes desde C a JavaScript.
Pacerier
18
Significa que si $rowtiene un valor verdadero , devolverá true, de lo contrario false, se convertirá en un valor booleano.
Aquí hay expresiones de ejemplo para la conversión booleana de documentos php.
"no no" es una forma conveniente en muchos idiomas para comprender qué valor de verdad asigna el lenguaje al resultado de cualquier expresión. Por ejemplo, en Python :
>>>notnot[]False>>>notnot[False]True
Puede ser conveniente en lugares donde desea reducir un valor complejo a algo como "¿hay algún valor?".
Otra forma más humana, quizás más simple, de "leer" el no no:
El primero '!' hace 2 cosas: 'convierte' el valor a booleano, luego genera su opuesto. Entonces dará verdadero si el valor es 'falso'.
El segundo '!' es solo para generar el opuesto al primero.
Entonces, básicamente, el valor de entrada puede ser cualquier cosa, tal vez una cadena, pero desea una salida booleana, así que use el primer '!'. En este punto, si desea VERDADERO cuando el valor de entrada es 'falso', deténgase aquí y use un solo '!'; de lo contrario, si desea VERDADERO cuando el valor de entrada es 'verdadero', agregue otro '!'.
return (bool) $row;
Respuestas:
No es el "operador doble no", es el operador no aplicado dos veces. El derecho
!
dará como resultado un booleano, independientemente del operando . Entonces la izquierda!
negará ese booleano.Esto significa que para cualquier valor verdadero (números que no sean cero, cadenas y matrices no vacías, etc.) obtendrá el valor booleano
TRUE
, y para cualquier valor falso (0, 0.0,NULL
cadenas vacías o matrices vacías) obtendrá El valor booleanoFALSE
.Funcionalmente es equivalente a un elenco para
boolean
:fuente
!!
igual(bool)
en este caso? ¿O se ejecutará un código de máquina diferente según cuál se use?!value
, y si hay un número par de golpes, será el mismo(bool) value
.Es lo mismo (o casi lo mismo, puede haber algún caso de esquina) como lanzar a bool. Si
$row
se convertiría en verdadero, entonces!! $row
también es cierto.Pero si quieres lograrlo
(bool) $row
, probablemente deberías usar solo eso, y no algunas expresiones "interesantes";)fuente
!!
es un hábito restante de la programación en C (++). En C hacer un lanzamiento no es tan fácil como en PHP, puede obtener muchos problemas diferentes, compilar advertencias, etc. Así las personas lanzan al boll usando!!
.operator!
es sobrecargable, usarloC++
sería peligroso. Tampoco puedes lanzar estructuras en C, o usarlas!
con ellas. Además, si se puede negar algo, lo más probable es que pueda devolverlo desde una función que devuelve int, lo que lo convierte en un booleano. ¿Estás seguro de que estás hablando de C?!!
no es nada "interesante" como lo has dicho. Está por todas partes desde C a JavaScript.Significa que si
$row
tiene un valor verdadero , devolverátrue
, de lo contrariofalse
, se convertirá en un valor booleano.Aquí hay expresiones de ejemplo para la conversión booleana de documentos php.
fuente
"no no" es una forma conveniente en muchos idiomas para comprender qué valor de verdad asigna el lenguaje al resultado de cualquier expresión. Por ejemplo, en Python :
Puede ser conveniente en lugares donde desea reducir un valor complejo a algo como "¿hay algún valor?".
fuente
Otra forma más humana, quizás más simple, de "leer" el no no:
El primero '!' hace 2 cosas: 'convierte' el valor a booleano, luego genera su opuesto. Entonces dará verdadero si el valor es 'falso'.
El segundo '!' es solo para generar el opuesto al primero.
Entonces, básicamente, el valor de entrada puede ser cualquier cosa, tal vez una cadena, pero desea una salida booleana, así que use el primer '!'. En este punto, si desea VERDADERO cuando el valor de entrada es 'falso', deténgase aquí y use un solo '!'; de lo contrario, si desea VERDADERO cuando el valor de entrada es 'verdadero', agregue otro '!'.
fuente
Miremos a
En lugar de interpretar el! operador como tomar el
Opuesto booleano del valor a su derecha
leer
tomar el opuesto booleano de la expresión a su derecha
En este caso
podría ser una expresión
así es
Asi es
y
y así, como cada una de estas es una expresión válida, el! El operador puede anteponerse a cada uno de ellos.
fuente