Sua tarefa é gerar uma exceção de ponteiro nulo. Ou seja, seu programa deve aceitar um valor que espera ser não nulo e lançar uma exceção / erro ou falha porque o valor é nulo.
Além disso, não pode ser óbvio lendo o código que o valor é nulo. Seu objetivo é deixar claro para o leitor que o valor não é nulo, mesmo que seja.
- Em vez de nulo, você pode usar nulo, nenhum, nada ou qualquer outro equivalente no seu idioma. Você também pode usar indefinido, não inicializado e assim por diante.
- O problema com o seu código deve ser que a variável é (surpreendentemente) nula onde o programa espera uma variável não nula.
- Seu programa pode responder ao nulo lançando uma exceção, lançando um erro, travando ou o que normalmente ocorre quando um nulo inesperado é encontrado.
Este é um concurso de popularidade, então seja esperto!
popularity-contest
underhanded
Ypnypn
fonte
fonte
Respostas:
Java
Vamos calcular o valor absoluto de um número. Java possui Math.abs para essa finalidade, no entanto, o número que estamos usando pode ser nulo às vezes. Portanto, precisamos de um método auxiliar para lidar com esse caso:
Se x for nulo, retorne nulo; caso contrário, use Math.abs ().
O código é muito simples e claro, e deve funcionar bem ... certo?
A propósito, usando esta linha:
funciona corretamente. Pensei em fazer disso um spoiler, mas ... acho que é tão intrigante :)
Ok, uma explicação:
fonte
C
Todo programador C cometeu esse erro, pelo menos uma vez.
Razão:
Consertar:
http://ideone.com/MbQhMM
fonte
scanf
é uma função variada eint
foi fornecido um argumento do tipo incorreto ( ), quando esperadoint *
. Como C (eu sei, os compiladores podem detectar isso no caso descanf
) não podem verificar os tipos na função variadica, isso é compilado felizmente.0
é de fato um ponteiro nulo literal, mas isso se aplica apenas ao literal usado diretamente, sem armazená-lo em uma variável.n
nunca continha um ponteiro nulo.PHP
Este me mordeu algumas vezes.
Resultado esperado:
Resultado atual:
tcp NullPointerException
Razão:
fonte
CoffeeScript (no Node.js)
No CoffeeScript,
?
é operador existencial. Se a variável existe, é usada, caso contrário, o lado direito está sendo usado. Todos sabemos que é difícil escrever programas portáteis. Caso em questão, a impressão em JavaScript está sub-especificada. Os navegadores usamalert
(oudocument.write
), usos do escudo SpiderMonkeyprint
, e usos Node.jsconsole.log
. Isso é loucura, mas o CoffeeScript ajuda com esse problema.Vamos executar isso em Node.js. Afinal, queremos garantir que nosso script funcione.
Uhm, por que você reclamaria disso, quando
alert
também não está definido?fonte
Rubi
Encontre awk no CAMINHO de um clone do Unix.
Opa!
Pelo erro, sabemos que
p.find
chamadonil.find
, assimp
deve sernil
. Como isso aconteceu?Em Ruby,
def
tem seu próprio escopo para variáveis locais e nunca tira variáveis locais do escopo externo. Assim, a atribuiçãop = ENV['PATH'].split ':'
não está no escopo.Uma variável indefinida geralmente causa
NameError
, masp
é um caso especial. Ruby tem um método global chamadop
. Entãop.find { ... }
se torna uma chamada de método, comop().find { ... }
. Quandop
não tem argumentos, ele retornanil
. (Os golfistas de código usamp
como atalho paranil
.) Em seguida,nil.find { ... }
aumentaNoMethodError
.Eu o corrigi reescrevendo o programa em Python.
Funciona!
Eu provavelmente quero imprimir
awk is /usr/bin/awk
, mas isso é um bug diferente.fonte
C #
With()
é um método de extensão para ostring
objeto, que é essencialmente apenas um alias parastring.Format()
.Parece bom, certo? Errado.
A maioria das pessoas que conhece um pouco sobre as especificidades internas do idioma provavelmente conseguirá identificar o problema rapidamente, mas ainda assim é algo que é facilmente esquecido de relance.
fonte
.GetType()
etypeof()
e, assim, levando a uma falha quando o resultado não é o mesmo. Eu acho que o pôster queria um código à prova de balas que não é.return string.Format(format, args);
. Se a reflexão fosse necessária (em outro caso de uso), alguém usariatypeof(string)
(captura erros de maiúsculas e minúsculas no tempo de compilação, sem seqüência mágica), não oGetType
método estático . Portanto, o exemplo parece "irrealista".Unity3D
Então você esquece de arrastar e soltar o ativo lá e BOOM, o Unity explode. Acontece o tempo todo.
fonte
Rubi
Apenas um código simples para obter o produto de uma matriz.
fonte
for (int i = 0; i <= arr.length; i++)
em Java.Android
Eu vejo isso acontecer com muita frequência. Uma pessoa passa uma mensagem para a próxima atividade (talvez um código de status, dados do mapa, o que for) e acaba puxando um nulo do
Intent
.À primeira vista, parece bastante razoável. Somente:
Em
MenuActivity.java
:Em
NextActivity.java
:FWIW, o JavaDoc faz dizer que
Intent.getStringExtra(String)
pode voltarnull
, mas somente se o tag não foi encontrado. Claramente , estou usando a mesma tag, então deve ser outra coisa ...fonte
C
Apenas uma rápida leitura do buffer, onde o programador foi gentil o suficiente para documentar o perigo potencial!
fonte
Nimrod
fonte
C #
Isto é clássico. O método muito útil
FindStringRepresentationOf
criará uma nova instância do parâmetro de tipo especificado e, em seguida, encontrará a representação de string dessa instância.Certamente será um desperdício verificar
null
imediatamente após ter criado uma nova instância, por isso não fiz isso ...Depois de corrigir o problema, conforme descrito no texto invisível acima, tente também
goodInstance.GetType()
(a diferença é queGetType()
, ao contrárioToString()
, não é virtual, portanto não o podiamoverride
no tipoNullable<>
).fonte
C ++:
O que você esperaria é "Olá Mundo!" para ser impresso. Mas você verá apenas lixo na tela.
Aqui o a1 é destruído quando o escopo init () é concluído. Portanto, a_ptr, como aponta para a1, produzirá lixo.
fonte
C
Explicação
fonte