¿Cómo puedo explicar la diferencia entre NULL y cero?

59

Trabajando en un problema que usa la fórmula de cambio porcentual:

percent change =  100 * [(new value - old value) / old value]

¿Cómo explicaría la diferencia si new value or old value = NULL , en lugar de 0 a alguien que podría no ser un programador?

Mi jefe se pregunta por qué hay una cadena vacía en el TextBox en lugar de un valor, porque tenemos el valor antiguo, pero no el nuevo.

    
pregunta O.O 21.04.2015 - 10:48

24 respuestas

100

Para explicar a un jefe la diferencia entre "cero" y "nulo":

"Cero" es un valor. Es la cantidad única y conocida de cero, que es significativa en aritmética y otras matemáticas.

"Null" no es un valor. Es un "marcador de posición" para un valor de datos que no se conoce o no se especifica. Sólo es significativo en este contexto; las operaciones matemáticas no se pueden realizar en nulo (el resultado de una operación de este tipo no está definido, y por lo tanto, generalmente también se representa como nulo).

Por ejemplo, como en los comentarios: "¿Cuál es su ingreso anual?" Es una pregunta que requiere una respuesta numérica. "0" es una respuesta perfectamente válida para alguien que no trabaja y no tiene ingresos de inversión. Si el usuario no ingresa un valor, no necesariamente no gana dinero; simplemente no querían decirle a su software cuánto (o poco) ganan. Es un desconocido, no especificado; por lo tanto, para permitir que el software continúe, especifique el marcador de posición "nulo" para ese campo de datos dentro del software. Eso es técnicamente válido desde una perspectiva de datos; si es válido a nivel de negocio depende de si se requiere un valor numérico real (incluso cero) para realizar una operación matemática (como el cálculo de impuestos o la comparación con los umbrales que determinan los beneficios).

En las computadoras, virtualmente cualquier operación en una variable que contenga nulo resultará en nula o en una condición de error, porque como no se conoce uno de los valores de la variable, el resultado de la expresión no se puede conocer. El equivalente a realizar matemáticas en nulo sería si te preguntara "¿Cuál es el número de cinco más el que estoy pensando en este momento?". Es imposible para usted dar una respuesta definitiva porque no sabe el número que estoy pensando. Una operación en cero, a excepción de la división por ella, suele ser válida y devolverá otro valor único conocido.

    
respondido por el KeithS 24.01.2013 - 18:29
171

Hablar con jefes siempre es difícil ...

El cero es un número para que puedas hacer cosas con él.

Null es un unicornio. No existe, por lo que no puedes hacer nada con él.

    
respondido por el Dave Wise 13.02.2012 - 21:08
38

Solo reformula las ecuaciones en oraciones:

  

"¿Cuál es el cambio porcentual si comienza con un valor desconocido y   Terminas con 150? "

y

  

"¿Cuál es el cambio porcentual si empiezas con 85 y terminas   con algún valor desconocido ? "

Por supuesto, la respuesta a ambas es "No se puede calcular, porque falta una de las partes críticas del cálculo". Esa es la esencia de 'null'.

Debería ser fácil calcular las oraciones equivalentes con cero y ver cómo son fundamentalmente diferentes:

  

"¿Cuál es el cambio porcentual si comienzas con un 0 y terminas   con 150? "

y

  

"¿Cuál es el cambio porcentual si empiezas con 85 y terminas   con 0? "

Aunque las respuestas pueden no tener mucho sentido (con ceros), al menos se puede calcular . Con nulo, el cálculo ni siquiera es posible .

    
respondido por el Eric King 13.02.2012 - 23:03
20

Cuando hable con su jefe, use 0 para cero, y ? para nulo. Captura correctamente que es un marcador de posición para algo pero que no sabes qué es.

    
respondido por el Michael Haren 13.02.2012 - 22:18
13

¿Qué tal esto?

  • 0 es la respuesta a "¿cuánto líquido hay en una botella vacía?".
  • NULL es la respuesta a "¿cuál es el contenido de una botella vacía?".

O si te imaginas a un hombre sin hijos:

  • el número de sus hijos es 0
  • su hijo mayor es NULL

La diferencia básica es que 0 es sobre una cantidad medible, mientras que NULL es sobre la existencia. Al ser una cantidad, 0 representa algo , es decir, una cantidad, que es 0 , al igual que 0.000000001 representa una cantidad (una que en los problemas de la vida cotidiana es, de hecho, indistinguiblemente próxima a %código%). En contraste con eso, 0 representa nada . De hecho, no hay nada cerca de NULL . El valor de cualquier variable (y expresiones) es NULL o algo así.

    
respondido por el back2dos 13.02.2012 - 21:18
7

Así es como siempre lo explico con éxito:

0 es el número 0.

NULL es nirvana, nada, nada, niente, no existencia, ausencia.

Las operaciones aritemédicas definidas en NULL siempre producen NULL como resultado.

... trabajó para mí hasta ahora.

    
respondido por el Falcon 13.02.2012 - 21:15
7

¿Por qué no empezarías haciendo la pregunta "por qué el valor es igual a NULL?" Eso podría ayudarlo a explicar por qué un cálculo podría no ser válido.

Si estaba realizando actualizaciones periódicas y el nuevo valor no se presentó (por ejemplo, error de red), NULL puede significar que no se puede realizar el cálculo y que el valor de porcentaje anterior está obsoleto. Es posible que desee mostrar un símbolo que indique que tiene datos obsoletos, que la actualización no se realizó como se esperaba.

Lo mismo podría ser cierto para un valor antiguo faltante, pero me cuesta entender cómo se puede perder un valor antiguo (a menos que este sea el primer cálculo, o la batería se agotó y los datos se perdieron). Pero usted podría querer mostrar un símbolo que indique esta condición también.

En cualquier caso, no quieres que esto suceda:

Fuente de imagen

    
respondido por el Jim 13.02.2012 - 22:27
5

OldValue=Null no conoce el valor anterior, por lo que la diferencia es desconocida (nula)

OldValue=0 Ya sabes el valor Antiguo, es 0, por lo que la Diferencia es Infinito (Nulo)

Si es importante distinguir entre estos dos, simplemente almacene el valor Antiguo como PreviousValue y muestre su valor en algún lugar.

Edite según el comentario a continuación:
Solo le preguntaría qué quiere hacer en las siguientes situaciones y le mostraré ejemplos de cada una de ellas. Luego, y pregúntale "¿Qué valor quieres mostrar para estos?"

No hagas que esto sea un problema informático ... Es una pregunta de negocios.

    
respondido por el Morons 13.02.2012 - 21:00
4

He tenido mucho éxito con "en blanco".

Con personas que entienden el álgebra básica (o la idea simple de que puede asignar un valor a un símbolo), la idea de un valor "en blanco" parece ser bastante directa y distinta de un valor cero.

    
respondido por el Jonathan Rich 13.02.2012 - 21:00
4

NULL no es un valor, es una falta de uno. Cero sigue siendo un valor. (incluso si se puede usar en los casos en que no se puede evaluar por completo.

Por analogía (una buena manera de explicar a los no teckies;

if I have three apples then I subtract three apples how many apples do I have? is 0

If I have a bag of apples and I never look in the bag, how many apples do I have? is null

Aunque en este caso, los dos pueden tener el mismo valor (dependiendo de su idioma) son conceptualmente muy diferentes

    
respondido por el Tom Squires 13.02.2012 - 21:03
4

Realmente no es relevante si tu jefe es un programador. El problema es conceptual, no técnico.

Pídele que asuma que tienes un aumento de sueldo. Su antiguo salario era de 175k, pero su nuevo salario es desconocido. Luego pregúntele: ¿qué porcentaje de aumento recibió?

Si está discapacitado aritméticamente, guíelo a través del proceso hasta que pueda ver dónde está el enlace que falta.

    
respondido por el Jonathan Maddison 13.02.2012 - 22:31
3

Yo uso el lanzamiento de la moneda. Verdadero es cara, falso es cola, y una mano ahuecada sobre la otra escondiendo la moneda es NULA. Si sabe que la moneda es cara, es muy fácil responder a la pregunta "¿cuál es el opuesto de este valor?". Una mano que esconde la moneda muestra muy fácilmente que la persona podría responder si usted le permite ver el valor actual, pero como no lo hace, no puede darle una respuesta. ¡Por lo que saben, ni siquiera tienes una moneda bajo tu mano!

    
respondido por el Bryan Boettcher 13.02.2012 - 22:16
1

En un campo, NULL dice que no tengo idea; No hay datos aquí, es equivalente a un espacio en blanco. Cero (0) dice que sé que el valor de este campo es exactamente 0, por ejemplo, el número entero que es más bajo que el número uno.

Por ejemplo, podría tener una hoja de papel que estoy escribiendo en el sistema informático que dice cuánto debe cada cliente. El cliente A debe $ 50, el cliente B debe $ 0 y el cliente debe NULL (????), porque la cantidad que el cliente C debe debe ser redimida (alguien dibujó una línea negra sobre él y es ilegible; o fue una nota que dice que su cuenta para no está lista todavía). Puedo decir confortablemente que el cliente B debe $ 0, y puedo decir con comodidad que no sé lo que el cliente debe. No quiero cobrarle al cliente C $ 0 (porque pueden deber dinero).

    
respondido por el dr jimbob 13.02.2012 - 22:24
1

Suponiendo que no nos estamos metiendo en temas específicos del idioma como:

#define NULL 0

La diferencia es que 0 es un valor numérico donde NULL no lo es. Es como una celda vacía en una hoja de papel cuadriculado. Una celda puede tener un "0" en ella, pero también puede estar vacía. Nulo sigue siendo un valor, pero lo has considerado especial. Por ejemplo, si sus celdas ahora eran caracteres, puede usar la celda vacía como un espacio y una celda nula ya no es posible a menos que designe o cree un carácter como caso especial.

Lo que significa nulo depende de cómo se interpretan los datos:

  • Los datos nulos pueden significar "aún no se han proporcionado", y un programa esperará un tiempo antes de verificar el valor nuevamente.
  • Es posible que los datos no puedan tener un valor nulo. Puede interpretarse estrictamente como un entero, y sería imposible un valor no entero.
  • Comúnmente en la memoria, la dirección 0 se interpreta como nula, lo que significa que no se puede usar.
respondido por el Vasiliy Sharapov 13.02.2012 - 23:01
1

Ejecutaría la comprobación de NVL y si uno de los parámetros es NULL, mostraría la Cadena "N / A" (no devuelva "0", ya que simplemente no es cierto).

Esto es algo que, desde el punto de vista del administrador, parecería más profesional que mostrar un valor NULL que parezca que tienes un error (que por supuesto que no, pero esa es la forma en que se ve a un no -ingeniería).

    
respondido por el alfasin 13.02.2012 - 23:06
1
  

tenemos el valor anterior, pero no el nuevo.

Parece que en su mente, no tener un nuevo valor no significa que sea desconocido; es el mismo que el valor antiguo. Puede codificar eso en consecuencia sin explicar nulo porque en su mente, nunca es nulo.

En lugar de discutir el punto sobre los valores nulos, simplemente asegúrese de que esto no genere otros problemas. ¿Cuáles son las ramificaciones de tener datos que son demasiado viejos? Cuando alguien ve un cambio de 0%, ¿presionan el botón de pánico? ¿Esto sesgará algún análisis o agregados en el tiempo?

Simplemente no creo que necesite un tutorial de programación de computadoras, pero sería bueno si supiera lo que es un nulo y en su lugar formulara la pregunta correcta.

    
respondido por el JeffO 13.02.2012 - 23:27
1

Si el old value es nulo, el resultado de las ecuaciones debe ser, con razón, nulo. Esto se debe a que nulo no es un número, significa un valor desconocido. Por lo tanto el cálculo no puede proceder.

Por supuesto, tu ecuación también falla si old value = 0 ya que no puedes dividir por cero.

Por lo general, estas cosas se manejan con una declaración de caso que le llevará a la ruta de lo que desea mostrar. Por lo tanto, si desea que el resultado se muestre como nulo cuando no pueda calcularlo (como con un nulo o un cero, entonces haría una declaración del caso similar a la de

case when [old value] = 0 then null 
else 100 * (([old value] - [new value]) /[old value]) 
end
    
respondido por el HLGEM 14.02.2012 - 14:54
1

Alguna gran discusión sobre analogías para explicar los aspectos mecánicos de un símbolo nulo en comparación con otros valores; sin embargo, el quid de esta pregunta, tal vez desde la perspectiva del gerente al expresar adecuadamente los resultados en la interfaz de usuario, representando los límites significativos de la fórmula modificada de perecnt aplicada a su problema específico, se puede responder más específicamente, creo.

En el caso del porcentaje de foro cambiado, se deben representar dos cosas: cuando se mide algo por primera vez, y cuando no se mide nada para un aspecto en particular.

Cuando se mide algo por primera vez (oldValue === NULL), el cambio porcentual no es aplicable; y podría / debería señalarse explícitamente que es la medición inicial para ese ciclo de medición.

Cuando no se mide nada (newValue === NULL), el cambio porcentual real es en realidad el valor de cero (suponiendo que no sea nulo en el ciclo anterior). Cero es generalmente la respuesta apropiada a la fórmula en este caso. No hubo ninguna medición en este ciclo más reciente, y por lo tanto no hubo cambios medidos. Eso no debería implicar que no haya cambiado, solo que nada se midió, registró o comunicó con respecto a ese aspecto.

    
respondido por el JustinC 14.02.2012 - 21:21
0

Ciertamente, entienden el concepto de poner "N / A" en un formulario cuando quieren decir "no disponible". Por ejemplo, para responder a la pregunta "¿Cuántos años tiene Benjamín Franklin?" Las respuestas 0 y N / A son obviamente diferentes (y la última es correcta). Del mismo modo, las respuestas 0 y NULL son diferentes.

    
respondido por el Scott Whitlock 14.02.2012 - 12:45
0
  • NULL es la ausencia de un valor.
  • -Zero- es un valor, y ese valor es -Zero-.

Si tuviera que explicar estos conceptos a alguien, dibujaría dos cuadros.

  • Un cuadro vacío representaría NULL.
  • Un cuadro con un número -Zero- en él representaría -Zero-.
respondido por el Jim G. 14.02.2012 - 18:29
0

La diferencia entre 0 y nulo es como la diferencia entre tener una cuenta bancaria con un saldo de 0 y no tener una cuenta bancaria en absoluto.

    
respondido por el JSR 14.02.2012 - 19:00
-1

Esto se explica mejor con punteros.

var a -> [0] // variable a is initialized and set to hold 0
var b -> [123asgeb0] // variable b is initialized but not set, memory is pointed to, but holds whatever was there last

Debido a esto, si su idioma no hace un seguimiento de las variables NULL para usted, entonces usará lo que ya estaba allí . Esto puede provocar desbordamientos, daños en la pila u otros efectos secundarios desagradables.

Si el idioma realiza un seguimiento de las variables NULL, tendrá un caso establecido para manejar esto. ES DECIR. trate a NULL como cero, lance una excepción, trate como nop, etc.

Para demostrarle a tu jefe, obtén algunos pedazos de papel usado.

  1. Toma 2 vasos y un palo blanco.
  2. Borra una sección de la página y escribe un cero
  3. Pon un vaso sobre eso (esto es var a)
  4. Coloque un vaso sobre otra sección de la página (esto es var b)
respondido por el Spencer Rathbun 13.02.2012 - 22:45
-1

A juzgar por la variedad de respuestas a esta pregunta, se puede concluir lo que ya sabemos: null puede significar muchas cosas.

O bien significa que los datos son:

  • no se sabe que se conozca,
  • se sabe que no se conoce,
  • no válido (por ejemplo, error de medición),
  • no accesible (por ejemplo, seguridad),
  • conocido por ser conocido pero irrelevante para el procesamiento de datos actual
  • los datos son infinitos (a menudo se utilizan en bases de datos)
  • probablemente 10 cosas más en las que no pensé

Por esta y muchas otras razones, a menudo es útil definir una estructura de datos que encapsule el significado del valor nulo (por ejemplo, una clase opcional).

    
respondido por el Dibbeke 14.02.2012 - 12:25
-2

La persona que escribió esto no tiene sentido del humor. FWIW Yo soy arquitecto yo mismo.

Nulo es el vacío. Según la leyenda, hay 17 sabores (posibles significados) de Null que incluyen "No sé", "No dijeron" y "Alguien rompió esto". Nadie sabe por qué, excepto los administradores de bases de datos y los arquitectos que fruncen el ceño desde las salas oscuras a los simples programadores. Sonríen cortésmente a los jefes y menean sus lenguas en profunda preocupación con una sabiduría increíblemente compleja que debe ser así, y es muy importante pero no muy clara, porque los jefes ofrecen un rendimiento importante al DBA y al Arquitecto. Un cheque de pago. Aun así, los nulos nunca cuentan sus secretos. Son agujeros negros de vacío. Una nula nunca es igual a otra nula porque cada vacío está vacío de igualdad y se niega a admitir que podría no estar todo lo vacío que hay. Esto, por supuesto, es una conjetura, porque ningún nulo que se respete a sí mismo podría realmente admitirlo. A veces, los nulos absorben vastas cantidades de datos reales en su (). Esto se denomina error, pero en realidad es solo el vacío de la mente del programador olvidando los nulos. Así que ya ves que se reproducen a veces. Pero cómo o por qué siempre se olvida rápidamente. () a veces es un signo de nulo o su primo nulo, pero, paradójicamente, rara vez es un error.

Cero es una cantidad definida de algo. Los ceros son mucho más felices que los nulos. Los ceros son simplemente perezosos y no agregan mucho al resultado.

Para la aburrida respuesta muy antigua y precisa. Null es una representación de "información faltante e información inaplicable" E.F. Codd, creador de SQL.

Codd también inventó la tercera forma normal, que se aplica a las mentes de los jóvenes informáticos como una forma de tortura preliminar. Una vez dominado se desprecia completamente. Algo similar sucede cuando se introduce el Diseño Orientado a Objetos. Y nunca estamos contentos de dejarlo solo, así que a lo largo viene la falta de coincidencia de impedancia que se agrega a la lucha.

    
respondido por el Michael 15.02.2012 - 04:05

Lea otras preguntas en las etiquetas

Comentarios Recientes

(¿Y uso System.getNumGames () en mi definición?) Primero, he tratado de pensar en algún concepto conceptual equivalente a getNumGames (): // juegos que se han movido a límites: virtual void swap_place_games () noexcept noexcept if strcmp (ba, sz)! = -1; // cambia el juego x o y para que sea el mismo si strcmp (ba, z)! = -1; Pero un pequeño cambio hace que el juego se vea algo diferente. Recuerda las coordenadas en el espacio donde no tenemos juegos; Tenemos la posición del juego original. Si el original es ceros,... Lee mas