juliocbq:
kicolobo:
Se não me engano, no Objective-C não há NULL no sentido “Javaniano”, e há coletores de lixo
(eu odeio null)
Olá kiko. No objective c existe o nil semelhante ao nosso object-pascal.
O NULL/null/nil/etc… somente trata um ponteiro sem “apontador” digamos. A medida que o nível das linguagens sobe, os profissionais vão criando algumas maneiras de lidar com ela de modo mais prático, conhecidos como smartpointers, até chegar no que conhecemos como coletores de lixo. Essas referências nulas sempre vão existir, não há como programar sem elas, já que precisamos alocar e desalocar recursos em uma área de memória(mesmo que alguns frameworks façam isso por nós).
Smart Pointers são uma leitura na minha opinião muito interessante. Usando c ou c++, inclusive pascal se pode chegar a coletores lixo.
http://en.wikipedia.org/wiki/Smart_pointer
Como assim não da? Talvez não de para o criador da linguagem, mas como ja citado o null como existe no Java(uma keyword) é tratado diferente em outras linguagens, como ja citado o Ruby e o Scala, onde temos um Objeto de fato para lidar com isto.
Vamos a um exemplo:
val umMap = Map(
"chave1" -> "valor1",
"chave2" -> "valor2")
println(umMap.get("chave1"))
println(umMap.get("teste"))
O resultado dos println:
Ou seja dois objetos, e este objetos tem metodos e tudo mais, em java o segundo println nos retornaria um null, em scala ele nos retornou um None, uma subclasse de Option, que foi desenhada para evitar nulos na lingagem, imagina se este get estivesse dentro de algum processamento e fossemos usa-lo para algo ja teriamos um NullPointerException na cara.
Agora olha que legal, no caso acima pegamos as Options, se quisermos o objetos de fato, fariamos assim.
println(umMap.get("chave1").get)
>valor1
//agora aqui sim teriamos uma exception pois None não possui valor.
println(umMap.get("teste").get)
//erro: NoSuchElementException
//Mas a classe Option possui metodos para evitar isto, fariamos assim para ficarmos seguros de nao receber uma exception
println(umMap.get("teste").getOrElse("alguma coisa se nao existir"))
>alguma coisa se nao existir
Scala encourages you to use the
Option type for variables and function return values when they may or may not refer to
a value. When there is no value, use None, an object that is a subclass of Option. When
there is a value, use Some, which wraps the value. Some is also a subclass of Option.
Ou seja se eu seguir este estilo de “vida” estarei programando sem o nulos como os os de java, estarei trabalhando apenas com Objetos.
E toda a linguagem foi desenhada para me retornar um Option caso o valor possa ou não existir, como no exemplo acima. Resumindo, nunca terei um NullPointerException.