E se não houvesse null no java  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

Ola.

Em Ruby, null é um objeto (da classe NilClass). Em Perl eu tenho um estado "indefinido" (undef). Em C eu tenho uma macro NULL que pode ser 0x00.

Fiquei aqui pensando então: e se java não suportasse referencias nulas?

Será que teria alguma vantagem (além de evitar NullPointerException)?
Será que o Garbage Collector teria que funcionar de uma forma totalmente diferente?


http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Hmm.. acho que teriamos que ter um "objeto vazio", não sei como ficaria.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
foxpv
JavaEvangelist
[Avatar]

Membro desde: 11/04/2006 09:35:56
Mensagens: 343
Offline

Não sei como o Ruby ou o Perl tratam isso (ainda estou só começando a estudar Ruby). Mas, será que isso não poderia difilcultar na manutenção n? Já que poderia encobertar, alguns erros de objeto não inicializado?

SCJP 1.5
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Bem, acho que se não existisse null, nós teriamos que inventar isso.

Provavelmente algum convention para tratar objetos não inicializados.

É dificil imaginar também antigamente na matematica quando o sinal de igual não existia.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
fredferrao
GUJ Master
[Avatar]

Membro desde: 01/06/2005 13:23:32
Mensagens: 1901
Localização: Brasil
Offline

Em Scala temos a classe Option, porque tudo é um objeto, então até o retorno vazio deve ser tratado como tal, o Alex cita o cara que criou o null em seu livro Programming Scala:




"Tony Hoare, who invented the null reference in 1965 while working on an objectoriented
language called ALGOL W, called its invention his ?billion dollar mistake?
(see [Hoare2009]). Don?t contribute to that figure."


Antes desta citação ele começa com esta esplanação:

Most languages have a special keyword or object that?s assigned to reference variables
when there?s nothing else for them to refer to. In Java, this is null; in Ruby, it?s nil. In
Java, null is a keyword, not an object, and thus it?s illegal to call any methods on it.
But this is a confusing choice on the language designer?s part. Why return a keyword
when the programmer expects an object?

This message was edited 1 time. Last update was at 02/09/2010 12:47:02


Não respondo dúvidas via MP!
Leozin
JWizard
[Avatar]

Membro desde: 18/06/2005 21:01:26
Mensagens: 2310
Localização: São Paulo/SP
Offline

Poisé, até no próprio livro de PEAA eles falam sobre null object

Acho que null é mais uma das desvatangens da linguagem em sí, tal como checked exceptions.

http://www.leozin.com.br/blog
[ICQ]
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

Em Ruby o null é uma classe, em Java é apenas uma indicação de que o objeto não possue rerferência na memória. Mas na prática:

Se fizermos um IF em um objeto nulo o Ruby nos retorna falso. Por que para ser verdadeiro é necessátrio ser true e somente true. Logo qualquer coisa diferente de true é false. inclusive null ou nil como é chamado em Ruby.

Porém se tentarnos invocar um método num objeto nulo a exceção ocorre do mesmo jeito.




Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
kicolobo
Moderador
[Avatar]

Membro desde: 19/07/2006 14:11:09
Mensagens: 1188
Localização: Belo Horizonte
Offline

Se não me engano, no Objective-C não há NULL no sentido "Javaniano", e há coletores de lixo



(eu odeio null)

http://devkico.itexto.com.br

Twitter: http://www.twitter.com/loboweissmann

Vamos aprender Grails?
http://www.grailsbrasil.com.br
[WWW] [MSN] [ICQ]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online

kicolobo wrote: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

www.citrox.com.br
kicolobo
Moderador
[Avatar]

Membro desde: 19/07/2006 14:11:09
Mensagens: 1188
Localização: Belo Horizonte
Offline

juliocbq wrote:
kicolobo wrote: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


Boa Julio!

Há algum tempo atrás dei uma lida por alto sobre Objective-C, e me lembro que fiquei meio perdido com isto.

http://devkico.itexto.com.br

Twitter: http://www.twitter.com/loboweissmann

Vamos aprender Grails?
http://www.grailsbrasil.com.br
[WWW] [MSN] [ICQ]
fredferrao
GUJ Master
[Avatar]

Membro desde: 01/06/2005 13:23:32
Mensagens: 1901
Localização: Brasil
Offline

juliocbq wrote:
kicolobo wrote: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:

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.


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.

Não respondo dúvidas via MP!
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online

fredferrao wrote: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.

...


Não terá, pois essa classe gerencia memória para você. Ela é um "smart pointer".

Ser você olhar como usuário final de uma ferramenta sim, do ponto de vista computacional não. Alguém ou algo vai gerenciar os ponteiros para você, não há como fugir disso.

Só estou olhando de um ponto de vista mais próximo da máquina. Nas linguagens de alto nível essas tarefas já estão implementadas e organizadas de modo que estejam transparentes ao programador.

This message was edited 2 times. Last update was at 02/09/2010 17:52:42


www.citrox.com.br
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

O que me motivou a fazer esta pergunta é o fato de Haskell não ter null, porém é uma linguagem funcional.

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
fredferrao
GUJ Master
[Avatar]

Membro desde: 01/06/2005 13:23:32
Mensagens: 1901
Localização: Brasil
Offline

juliocbq wrote:
fredferrao wrote: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.

...




Ser você olhar como usuário final de uma ferramenta sim, do ponto de vista computacional não. Alguém ou algo vai gerenciar os ponteiros para você, não há como fugir disso.


Concordo. É que ficou meio generalista tua frase . Eu como usuario final da linguagem Scala por exemplo estou livre disto vamos dizer. Claro que por baixo dos panos em algum lugar alguem tera que fazer o trabalho sujo.

Não respondo dúvidas via MP!
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online

fredferrao wrote:
juliocbq wrote:
fredferrao wrote: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.

...




Ser você olhar como usuário final de uma ferramenta sim, do ponto de vista computacional não. Alguém ou algo vai gerenciar os ponteiros para você, não há como fugir disso.


Concordo. É que ficou meio generalista tua frase . Eu como usuario final da linguagem Scala por exemplo estou livre disto vamos dizer. Claro que por baixo dos panos em algum lugar alguem tera que fazer o trabalho sujo.


Sim. Tudo depende do nível da linguagem. Quanto mais distante do assembly, maiores funcionalidades, em contrapartida o desempenho cai um pouco.

Até em c++. Se você usar a classe template auto_ptr, vai conseguir gerenciar memória como um programa java. O desempenho dela não é muito bom mas a boost tem um set de smartpointers muito bons.

This message was edited 1 time. Last update was at 02/09/2010 18:11:19


www.citrox.com.br
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team