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 TextBox en lugar de un valor, porque tenemos el valor anterior, pero no el nuevo.
NULL
es un estado , no un valor, lo que significa que no conoce el valor. Para SQL, normalmente uso la analogía de la fiesta para demostrar.Respuestas:
Para explicar a un jefe la diferencia entre "cero" y "nulo":
"Cero" es un valor. Es la cantidad única y conocida de cero, lo que es significativo en aritmética y otras matemáticas.
"Nulo" es un no valor. Es un "marcador de posición" para un valor de datos que no se conoce o no se especifica. Solo tiene sentido en este contexto; las operaciones matemáticas no se pueden realizar en nulo (el resultado de cualquier operación de este tipo no está definido y, por lo tanto, también se representa generalmente 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 por inversiones. Si el usuario no ingresa ningún valor, no necesariamente gana dinero; simplemente no querían decirle a su software cuánto (o poco) hacen. Es un desconocido, no especificado; por lo tanto, para permitir que el software continúe, usted especifica 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 comercial 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 umbrales que determinan los beneficios).
En las computadoras, prácticamente cualquier operación en una variable que contenga nulo resultará en nula o en una condición de error, porque dado que uno de los valores de la variable no se conoce, el resultado de la expresión no se puede conocer. El equivalente a realizar matemática en nulo sería si te preguntara "¿Qué son cinco más el número en el que estoy pensando ahora?". Es imposible para usted dar una respuesta definitiva porque no sabe el número en el que estoy pensando. Una operación en cero, a excepción de dividirla, suele ser válida y devolverá otro valor único conocido.
fuente
NULL
.NULL
es la explict FALTA de los datos, no es un marcador de posición, que es una representación única solitaria de no hay datos.Hablar al jefe siempre es duro ...
Cero es un número para que puedas hacer cosas con él.
Null es un unicornio. No existe, por lo que no puede hacer nada con él.
fuente
NVL(somefield,'UNICORN')
)Simplemente reformule las ecuaciones en oraciones:
y
Por supuesto, la respuesta a ambas es "No se puede calcular, porque falta una de las piezas críticas del cálculo". Esa es la esencia de 'nulo'.
Entonces debería ser fácil descubrir las oraciones equivalentes con cero y ver cómo son fundamentalmente diferentes:
y
Aunque las respuestas pueden no tener mucho sentido (con ceros), al menos se puede calcular . Con nulo, el cálculo ni siquiera es posible .
fuente
unknown
que simplemente no existe porque en el caso de unNULL
porcentaje no hay NINGÚN valor numérico (porcentaje) o de otro modo valor porcentual.Cuando hable con su jefe, solo use
0
para cero y?
para nulo. Captura correctamente que es un marcador de posición para algo pero que no sabes lo que es.fuente
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 un hombre sin hijos:
0
NULL
La diferencia básica es que
0
se trata de una cantidad medible, mientras queNULL
se trata de la existencia. Ser una cantidad0
representa algo , es decir, una cantidad, es decir0
,0.000000001
representa una cantidad (una que en los problemas de la vida cotidiana es, de hecho, indistinguible0
). En contraste con eso noNULL
representa nada . De hecho no hay nada cercaNULL
. El valor de cualquier variable (y expresiones) esNULL
o algo.fuente
Así es como siempre lo explico con éxito:
0 es el número 0.
NULL es nirvana, nada, nada, niente, inexistencia, ausencia.
Las operaciones aritméticas definidas en NULL siempre producen NULL como resultado.
... funcionó para mí hasta ahora.
fuente
¿Por qué no comenzaría haciendo la pregunta "por qué el valor es igual a NULL?" Eso podría ayudarlo a explicar por qué un cálculo podría ser inválido.
Si estaba haciendo actualizaciones periódicas y el nuevo valor no se presentaba (error de red, por ejemplo), entonces NULL podría significar que el cálculo no se puede realizar y el valor de porcentaje anterior está obsoleto. Es posible que desee mostrar un símbolo que indique que tiene datos obsoletos, 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 agote y se pierdan los datos). Pero es posible que desee muestra un símbolo que también indica esta condición.
En cualquier caso, no desea que esto suceda:
Fuente de imagen
fuente
OldValue=Null
no conoce el valor anterior, por lo que la diferencia es desconocida (nula)OldValue=0
Conoces el valor anterior, 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 muéstrelo 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 haga de ninguna manera que esto sea un problema de computadora. Es una cuestión de negocios.
fuente
He tenido mucho éxito con 'blank'.
Con personas que entienden el álgebra básica (o la simple idea de que puede asignar un valor a un símbolo), la idea de un valor "en blanco" parece ser bastante sencilla y distinta de un valor cero.
fuente
NULL no es un valor, es la falta de uno. Cero sigue siendo un valor. (incluso si se puede usar en casos donde no se puede evaluar completamente.
Por analogía (una buena forma de explicar a los no teckies;
Aunque en este caso los dos pueden tener el mismo valor (dependiendo de su idioma) son conceptualmente muy diferentes
fuente
Realmente no es relevante si tu jefe es un programador. La cuestión es conceptual, no técnica.
Pídele que asuma que tienes un aumento. Su antiguo salario era 175k, pero su nuevo salario es desconocido. Luego pregúntele: ¿qué porcentaje de aumento recibió?
Si está deshabilitado aritméticamente, guíelo a través del proceso hasta que pueda ver dónde está el enlace que falta.
fuente
Yo uso el lanzamiento de moneda. Verdadero es cara, falso es cruz, y una mano ahuecada sobre la otra escondiendo la moneda es NULO. Si sabe que la moneda es cara, es muy fácil responder la pregunta "¿cuál es el valor opuesto de este valor?". Una mano que oculta la moneda muestra muy fácilmente que la persona podría responder si le permitiera ver el valor actual, pero como no lo hará, no puede darle una respuesta. Por lo que saben, ¡ni siquiera tienes una moneda debajo de tu mano!
fuente
En un campo, NULL dice que no tengo idea; no hay datos aquí, es equivalente al espacio en blanco. Cero (0) dice que sé que el valor de este campo es precisamente 0, por ejemplo, el entero que es uno 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 C debe NULL (????), porque la cantidad que el cliente C debe debe ser eliminada (alguien dibujó una línea negra sobre ella y es ilegible; o había una nota que decía que su factura aún no está lista). Puedo decir cómodamente que el cliente B debe $ 0, y puedo decir cómodamente que no sé qué debe el cliente C. No quiero cobrarle al cliente C $ 0 (porque pueden deber dinero).
fuente
Suponiendo que no nos estamos metiendo en cosas específicas del idioma como:
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", pero también puede estar vacía. Nulo sigue siendo un valor, pero lo ha 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 para el caso especial.
Lo que significa nulo depende de cómo se interpreten los datos:
fuente
NULL == 0
funciona bien cuando se trata de punteros nulos en C et al. Si estás tratando de explicarle la idea a tu jefe no programador mostrándoles el código, lo estás haciendo mal.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, se vería más profesional que mostrar un valor NULL, lo que parece que tiene un error (lo que, por supuesto, no tiene, pero así es como se ve para un no ingeniero) .
fuente
Parece en su mente, no tener un nuevo valor no significa que sea desconocido; Es lo mismo que el valor anterior. Puede codificar eso en consecuencia sin explicar nulo porque, en su opinión, nunca es nulo.
En lugar de discutir el punto sobre NULL, solo asegúrese de que esto no cree otros problemas. ¿Cuáles son las ramificaciones de tener datos que son demasiado viejos? Cuando alguien ve un cambio de 0%, ¿presiona el botón de pánico? ¿Esto sesgará algún análisis o agregado a lo largo del tiempo?
Simplemente no creo que necesite un tutorial de programación de computadoras, pero sería bueno si supiera lo que era un nulo y, en su lugar, hiciera la pregunta correcta.
fuente
Si el
old value
valor es nulo, el resultado de las ecuaciones debería serlo. Esto se debe a que nulo no es un número, significa un valor desconocido. Por lo tanto, el cálculo no puede continuar.Por supuesto, su ecuación también falla si
old value = 0
no puede dividir por cero.Por lo general, maneja estas cosas con una declaración de caso que lo llevará por el camino de lo que desea mostrar. Entonces, si desea que el resultado se muestre como nulo cuando no puede calcular (como con un nulo o un cero, entonces haría una declaración de caso similar a
fuente
Una 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 cambiante y relevante aplicada a su problema específico, puede responderse más específicamente, creo.
En el caso del porcentaje de foros modificados, se deben representar dos cosas: cuándo se mide algo por primera vez y cuándo no se mide nada para un aspecto en particular.
Cuando algo se mide por primera vez (oldValue === NULL), el cambio porcentual no es aplicable; y podría / debería notarse 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 resultante es en realidad el valor de cero (suponiendo que no sea nulo en el ciclo anterior). Generalmente, cero es la respuesta adecuada a la fórmula en este caso. No hubo mediciones en este ciclo más reciente y, por lo tanto, no hubo cambios medidos. Eso no debería implicar que no cambió, solo que nada fue medido, registrado o comunicado con respecto a ese aspecto.
fuente
Ciertamente, entienden el concepto de poner "N / A" en un formulario cuando significan "no disponible". Por ejemplo, para responder la pregunta: "¿Cuántos años tiene Benjamin 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.
fuente
Si tuviera que explicar estos conceptos a alguien, dibujaría dos cuadros.
fuente
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.
fuente
Esto se explica mejor con punteros.
Debido a esto, si su idioma no realiza un seguimiento de las variables NULL por usted, entonces usará lo que ya estaba allí . Esto puede provocar desbordamientos, corrupciones de la pila u otros efectos secundarios desagradables.
Si el lenguaje hace un seguimiento de las variables NULL, entonces tendrá un caso establecido para manejar esto. IE trata NULL como cero, lanza una excepción, trata como nop, etc.
Para demostrarle a su jefe, obtenga algunas piezas de papel usado.
fuente
A juzgar por la variedad de respuestas a esta pregunta, se puede concluir lo que ya sabemos: nulo puede significar muchas cosas.
O significa que los datos son:
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).
fuente
La persona que hizo esto no tiene sentido del humor. FWIW Soy Arquitecto yo mismo.
Nulo es vacío. Según la leyenda, hay 17 sabores (posibles significados) de Null, incluidos "No sé", "No dijeron" y "alguien rompió esto". Nadie sabe por qué, excepto los DBA y los arquitectos que fruncen el ceño desde cuartos traseros oscuros a simples programadores. Sonríen cortésmente a los jefes y mueven la lengua con profunda preocupación por una sabiduría imposiblemente compleja que debe ser así, y es profundamente importante pero no muy clara, porque los jefes brindan un desempeño importante al DBA y al Arquitecto. Un cheque de pago. Aun así, los nulos nunca cuentan sus secretos. Son agujeros negros de vacío. Un nulo nunca es igual a otro nulo porque cada vacío está vacío de igualdad y se niega a admitir que podría no estar tan vacío. Por supuesto, esto es una conjetura porque ningún nulo que se respete a sí mismo podría admitirlo. A veces, los valores nulos absorben grandes cantidades de datos reales en su (). Esto se llama un error, pero realmente es solo el vacío de la mente del programador que se olvida de los nulos. Entonces ves que a veces se reproducen. Pero cómo o por qué siempre se olvida rápidamente. () es a veces un signo de nulo o de 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 vagos y no agregan mucho al resultado.
Para la aburrida y precisa respuesta precisa, Null es una representación de "información faltante e información inaplicable" EF 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 ignora por completo. Suceden cosas similares cuando se introduce el diseño orientado a objetos. Y nunca nos complace dejarlo solo, por lo que viene un desajuste de impedancia para agregar a la refriega.
fuente