Trabalhando em um problema que usa a fórmula de alteração percentual:
percent change = 100 * [(new value - old value) / old value]
Como eu explicaria a diferença se new value or old value = NULL
, ao invés 0
de alguém que pode não ser um programador?
Meu chefe está se perguntando por que há uma string vazia no TextBox em vez de um valor, porque temos o valor antigo, mas não o novo valor.
NULL
é um estado , não um valor - significa que você não sabe o valor. Para SQL, normalmente uso a analogia da parte para demonstrar.Respostas:
Para explicar a um chefe a diferença entre "zero" e "nulo":
"Zero" é um valor. É a quantidade única e conhecida de zero, que é significativa em aritmética e outras matemáticas.
"Nulo" é um valor não. É um "espaço reservado" para um valor de dados que não é conhecido ou não especificado. É apenas significativo neste contexto; operações matemáticas não podem ser executadas em nulo (o resultado de qualquer operação desse tipo é indefinido e, portanto, geralmente também é representado como nulo).
Por exemplo, como nos comentários: "Qual é a sua renda anual?" é uma pergunta que requer uma resposta numérica. "0" é uma resposta perfeitamente válida para alguém que não trabalha e não tem receita de investimento. Se o usuário não inserir um valor, ele não necessariamente ganha dinheiro; eles simplesmente não queriam dizer ao seu software quanto (ou pouco) eles fazem. É um desconhecido, não especificado; portanto, para permitir que o software continue, você especifica o espaço reservado "nulo" para esse campo de dados no software. Isso é tecnicamente válido da perspectiva de dados; se é válido no nível comercial depende se um valor numérico real (mesmo zero) é necessário para executar uma operação matemática (como cálculo de impostos ou comparação com limites que determinam benefícios).
Em computadores, praticamente qualquer operação em uma variável contendo nulo resultará em condição nula ou em erro, porque como um dos valores da variável não é conhecido, o resultado da expressão não pode ser conhecido. O equivalente a executar matemática em nulo seria se eu lhe perguntasse "O que há cinco mais o número em que estou pensando agora?". É impossível você dar uma resposta definitiva, porque você não sabe o número em que estou pensando. Uma operação em zero, exceto para dividir por ela, geralmente é válida e retornará outro valor conhecido e exclusivo.
fonte
NULL
.NULL
é a FALTA explícita de dados, não é um espaço reservado, é uma representação solitária única de nenhum dado.A fala do chefe é sempre difícil ...
Zero é um número para que você possa fazer coisas com ele.
Nulo é um unicórnio. Não existe, então você não pode fazer nada com isso.
fonte
NVL(somefield,'UNICORN')
;)Apenas reformule as equações em frases:
e
Obviamente, a resposta para ambos é "Não pode ser calculado, porque falta uma das partes críticas do cálculo". Essa é a essência do 'nulo'.
Deve ser fácil, então, descobrir as frases equivalentes com zero e ver como elas são fundamentalmente diferentes:
e
Embora as respostas possam não fazer muito sentido (com zeros), pelo menos elas podem ser calculadas . Com nulo, o cálculo nem é possível .
fonte
unknown
é simplesmente inexistente porque, no caso de umaNULL
porcentagem, na verdade não existe QUALQUER valor numérico (porcentagem) ou outro valor percentual.Ao conversar com seu chefe, use apenas
0
zero e?
nulo. Captura corretamente que é um espaço reservado para algo, mas que você não sabe o que é.fonte
Que tal agora:
0
é a resposta para "quanto líquido há em uma garrafa vazia?".NULL
é a resposta para "qual é o conteúdo de uma garrafa vazia?".Ou se você imaginar um homem sem filhos:
0
NULL
A diferença básica é que
0
se trata de quantidade mensurável, enquantoNULL
se trata de existência. Ser uma quantidade0
representa algo , isto é, uma quantidade, ou seja0
, muito semelhante a0.000000001
uma quantidade (uma que nos problemas da vida cotidiana é de fato indistinguivelmente próxima0
). Em contraste com isso nãoNULL
representa nada . De fato, não há nada próximoNULL
. O valor de qualquer variável (e expressão) éNULL
ou algo assim.fonte
É assim que sempre explico com sucesso:
0 é o número 0.
NULL é nirvana, nada, nada, niente, inexistência, ausência.
As operações aritméticas definidas em NULL sempre produzem NULL como resultado.
... trabalhou para mim até agora.
fonte
Por que você não começou perguntando "por que o valor é igual a NULL?" Isso pode ajudar a explicar por que um cálculo pode ser inválido.
Se você estava fazendo atualizações periódicas e o novo valor não se apresentava (erro de rede, por exemplo), então NULL pode significar que o cálculo não pode ser executado e o valor percentual antigo é obsoleto. Você pode mostrar um símbolo indicando que possui dados obsoletos, a atualização não ocorreu conforme o esperado.
O mesmo pode ser verdade para um valor antigo ausente, mas tenho dificuldade em entender como um valor antigo pode ser perdido (a menos que este seja o primeiro cálculo ou a bateria acabe e os dados sejam perdidos.) Mas você pode querer mostre um símbolo que também indica essa condição.
De qualquer forma, você não quer que isso aconteça:
Fonte da imagem
fonte
OldValue=Null
você não conhece o valor antigo, então a diferença é desconhecida (nulo)OldValue=0
Você conhece o valor antigo, é 0, então a diferença é infinito (nulo)Se for importante distinguir entre esses dois, simplesmente armazene o valor Antigo como
PreviousValue
e exiba seu valor em algum lugar.Edite com base no comentário abaixo:
Gostaria de perguntar o que ele quer fazer nas seguintes situações e mostrar exemplos de cada uma delas. Depois, pergunte a ele: "Qual valor você deseja exibir para eles?"
Não faça de forma alguma um problema de computador. É uma questão de negócios.
fonte
Eu tive muito sucesso com 'blank'.
Com pessoas que entendem álgebra básica (ou a idéia simples de atribuir um valor a um símbolo), a idéia de um valor "em branco" parece ser bem direta e distinta de um valor zero.
fonte
NULL não é um valor, é uma falta de um. Zero ainda é um valor. (mesmo que possa ser usado nos casos em que não pode ser totalmente avaliado.
Por analogia (uma boa maneira de explicar para os não teckies;
Embora neste caso os dois possam ter o mesmo valor (dependendo do seu idioma), eles são conceitualmente muito diferentes
fonte
Realmente não é relevante se seu chefe é um programador. A questão é conceitual, e não técnica.
Peça a ele para assumir que você recebeu um aumento. Seu salário anterior era de 175k, mas seu novo salário é desconhecido. Depois pergunte a ele - que aumento percentual você recebeu?
Se ele estiver aritmeticamente desativado, conduza-o pelo processo até que ele possa ver onde está o link ausente.
fonte
Eu uso a moeda. Verdadeiro é cara, falso é coroa, e uma mão em concha sobre a outra escondendo a moeda é NULL. Se você sabe que a moeda é cara, é muito fácil responder à pergunta "qual é o oposto desse valor?". Uma mão, escondendo a moeda, mostra muito facilmente que a pessoa poderia responder se você deixasse que ela visse o valor atual, mas como você não vê, ela não pode lhe dar uma resposta. Pelo que eles sabem, você nem tem uma moeda na mão!
fonte
Em um campo, NULL diz que não tenho ideia; não há dados aqui - o equivalente a espaço em branco. Zero (0) diz que sei que o valor desse campo é precisamente 0, por exemplo, o número inteiro que é um menor que o número um.
Por exemplo, eu poderia ter uma folha de papel que estou digitando no sistema de computador que diz quanto cada cliente deve. O cliente A deve $ 50, o cliente B deve $ 0 e o cliente C deve NULL (????), porque a quantidade que o cliente C deve número foi redigida (alguém desenhou uma linha preta sobre ele e é ilegível; ou era uma nota dizendo que sua conta ainda não está pronta). Posso dizer comodamente que o cliente B deve US $ 0 e posso dizer comodamente que não sei o que o cliente C deve. Não quero cobrar ao cliente C $ 0 (porque eles podem ter dinheiro).
fonte
Supondo que não estamos entrando em assuntos específicos de idiomas, como:
A diferença é que 0 é um valor numérico em que NULL não é. É como uma célula vazia em uma folha de papel milimetrado. Uma célula pode ter um "0", mas também pode estar vazia. Nulo ainda é um valor, mas você o considerou especial. Por exemplo, se suas células agora eram caracteres, você pode usar a célula vazia como espaço e uma célula nula não é mais possível, a menos que você designe ou crie um caractere para ser o caso especial.
O que significa nulo depende de como os dados são interpretados:
fonte
NULL == 0
funciona bem quando você está lidando com ponteiros nulos em C et al. Se você está tentando explicar a idéia ao seu chefe não programador, mostrando-lhes o código, está fazendo errado.Eu executaria a verificação NVL e, se um dos parâmetros for NULL, exibiria a String "N / A" (não retorne "0", pois isso não é verdade!).
Isso é algo que, do ponto de vista do gerente, pareceria mais profissional do que exibir um valor NULL, que parece com um bug (o que é claro que você não tem - mas é assim que parece para um não-engenheiro) .
fonte
Parece que, em sua mente, não ter um novo valor não significa que ele seja desconhecido; é o mesmo que o valor antigo. Você pode codificar isso de acordo, sem explicar o valor nulo, porque, na cabeça dele, nunca é nulo.
Em vez de discutir o ponto sobre NULLs, verifique se isso não cria outros problemas. Quais são as ramificações de se ter dados muito antigos? Quando alguém vê uma alteração de 0%, pressiona o botão de pânico? Isso distorcerá qualquer análise ou agregação ao longo do tempo?
Só não acho que ele precise de um tutorial de programação de computadores, mas seria bom se ele soubesse o que era um nulo e fizesse a pergunta certa.
fonte
Se
old value
for nulo, o resultado das equações deve ser nulo corretamente. Isso ocorre porque nulo não é um número, significa valor desconhecido. Portanto, o cálculo não pode prosseguir.É claro que sua equação também falha se
old value = 0
você não puder dividir por zero.Normalmente, você lida com essas coisas com uma declaração de caso que o levará ao caminho do que você deseja mostrar. Portanto, se você quiser que o resultado seja nulo quando não puder calcular (como um nulo ou um zero, faça uma declaração de caso como
fonte
Alguma grande discussão sobre analogias para explicar os aspectos mecânicos de um símbolo nulo em comparação com outros valores; no entanto, o cerne dessa questão talvez da perspectiva do gerente em expressar adequadamente os resultados na interface do usuário, representando os limites significativos da fórmula alterada conforme aplicada ao seu problema específico, pode ser respondido mais especificamente, acredito.
No caso do fórum alterado em porcentagem, duas coisas precisam ser representadas: quando algo é medido pela primeira vez e quando nada é medido para um aspecto em particular.
Quando algo é medido pela primeira vez (oldValue === NULL), a alteração percentual não é aplicável; e pode / deve-se notar explicitamente que é a medida inicial para esse ciclo de medição.
Quando nada é medido (newValue === NULL), a alteração percentual real resultante é realmente o valor de zero (assumindo que não é nulo no ciclo anterior). Zero é geralmente a resposta apropriada para a fórmula neste caso. Não houve medição nesse ciclo mais recente e, portanto, nenhuma alteração medida. Isso não deve implicar que não tenha mudado, apenas que nada foi medido, registrado ou comunicado em relação a esse aspecto.
fonte
Certamente eles entendem o conceito de colocar "N / A" em um formulário quando significam "não disponível". Por exemplo, para responder à pergunta "Quantos anos Benjamin Benjamin?" as respostas 0 e N / A são obviamente diferentes (e a última está correta). Da mesma forma, as respostas 0 e NULL são diferentes.
fonte
Se eu tivesse que explicar esses conceitos a alguém, desenharia duas caixas.
fonte
A diferença entre 0 e nulo é como a diferença entre ter uma conta bancária com saldo 0 e não ter uma conta bancária.
fonte
Isso é melhor explicado com ponteiros.
Por esse motivo, se seu idioma não acompanhar as variáveis NULL para você, você usará o que já estiver lá . Isso pode causar estouros, corrupção de pilha ou outros efeitos colaterais desagradáveis.
Se o idioma faz manter o controle de variáveis NULL, então ele vai ter um caso-limite para lidar com isso. O IE trata NULL como zero, lança exceção, trata como nop, etc.
Para demonstrar pelo seu chefe, pegue alguns pedaços de papel usado.
fonte
A julgar pela variedade de respostas sobre essa questão, pode-se concluir o que já sabemos: nulo pode significar muitas coisas.
Ou isso significa que os dados são:
Por esse e muitos outros motivos, geralmente é útil definir uma estrutura de dados que encapsule o significado do valor nulo (por exemplo, uma classe opcional).
fonte
A pessoa que escreveu isso não tem senso de humor. FWIW Eu sou um arquiteto.
Nulo é vazio. Segundo a lenda, existem 17 sabores (possíveis significados) de Null, incluindo "Eu não sei", "Eles não disseram" e "alguém quebrou isso". Ninguém sabe o porquê, exceto DBAs e Arquitetos que fazem caretas de meros programadores nas salas escuras. Eles sorriem educadamente para os chefes e abanam as línguas com profunda preocupação com a sabedoria impossivelmente complexa que deve ser assim e é profundamente importante, mas não muito clara - porque os chefes oferecem um desempenho importante ao DBA e ao Architect. Um cheque de pagamento. Mesmo assim, os nulos nunca contam seus segredos. Eles são buracos negros vazios. Um nulo nunca é igual a outro nulo, porque cada vazio está vazio de igualdade e se recusa a admitir que pode não ser todo o vazio que existe. É claro que isso é conjectura, porque nenhum nulo que se preze poderia realmente admitir isso. Às vezes, os nulos sugam grandes quantidades de dados reais para seus (). Isso é chamado de bug, mas na verdade é apenas o vazio da mente do programador que esquece dos nulos. Então você vê que eles se reproduzem às vezes. Mas como ou por que é sempre rapidamente esquecido. () às vezes é sinal de nulo ou de seu primo nulo, mas paradoxalmente raramente é um bug.
Zero é uma quantidade definida de algo. Zeros são muito mais felizes que nulos. Os zeros são apenas preguiçosos e não agregam muito ao resultado.
Para a resposta chata e muito antiga, Null é uma representação de "informações ausentes e informações inaplicáveis" EF Codd, criador do SQL.
Codd também inventou a 3ª Forma Normal, que é aplicada às mentes dos jovens cientistas da computação como uma forma de tortura preliminar. Uma vez dominado, é completamente desconsiderado. Coisas semelhantes acontecem quando o Design Orientado a Objetos é introduzido. E nunca ficamos felizes em deixá-lo em paz; assim, surge a incompatibilidade de impedância para aumentar a briga.
fonte