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

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

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


O esquema do haskell deve ser bem diferente dessas demais. O compilador ou interpretador deve mapear todos os ponteiros resolvendo as referencias nulas e apontando-as para algum tipo de dado não nulo. Difícil de imaginar como mesmo.

www.citrox.com.br
bobmoe
GUJ Ranger
[Avatar]

Membro desde: 11/07/2006 20:45:48
Mensagens: 806
Localização: Sampa
Offline

utlizando esse exemplo, onde cidade está nula:

Como a tipagem é fixa, quando não é utilizada uma referencia de memória, não podemos retornar um tipo diferente do declarado como retornado pelo método, pois dessa forma geraria outra exception como "Type mismatch: cannot convert from NullObject to Cidade".

E se em vez disparar NullPointerException fosse adotado um NullObject, geraria algo do tipo "The method getEstado() is undefined".

Só de ver casos como esses da pra ter uma idéia quantos detalhesinhos poderiam complicar a vida do programador.

This message was edited 2 times. Last update was at 02/09/2010 18:29:54


BOB - Roberto Nogueira - bobmoe.blogspot.com
[WWW] [MSN]
fredferrao
GUJ Master
[Avatar]

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

É que voce foi muito profundo Julio, foi la na heap

Acho que a pergunta foi, se nao existir na linguagem como existe hoje, como seria o tratamento, como tratariamos isto em nosso código.

Em Scala eu simplesmente nao consigo criar um ponteiro nulo, tipo:


Ou seja(ainda to começando com scala, posso por ventura falar alguma asneira ), teoricamente eu nunca terei um ponteiro apontando pra null.

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

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

fredferrao wrote:É que voce foi muito profundo Julio, foi la na heap

Acho que a pergunta foi, se nao existir na linguagem como existe hoje, como seria o tratamento, como tratariamos isto em nosso código.

Em Scala eu simplesmente nao consigo criar um ponteiro nulo, tipo:


Ou seja(ainda to começando com scala, posso por ventura falar alguma asneira ), teoricamente eu nunca terei um ponteiro apontando pra null.


Ahh sim, eu não estava levando em conta esse paradoxo. Desculpem.

www.citrox.com.br
Andre Brito
JWizard

Membro desde: 21/07/2007 17:44:31
Mensagens: 2485
Localização: Paraná
Offline

fredferrao wrote:Ou seja(ainda to começando com scala, posso por ventura falar alguma asneira ), teoricamente eu nunca terei um ponteiro apontando pra null.

Não? Eu achei que tinha... Em Scala existem tantos nulls (Nothing , Null null, Nil... até o Náim fazem daqui a pouco :p) que é fácil de se perder.

Como organizar o GUJ.
Meu Twitter.
Meu blog.
Future proofing means making code easy to change, not trying to anticipate every possible way your code might need to change.
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

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


É quase como trabalhar com garbage collection em C++. Quem quiser conhecer, tem uma série de artigos sobre eles no Ponto V!:
http://www.pontov.com.br/site/index.php/cpp/43-smart-pointers

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Acho que o importante da ausência de null, seria realmente a ausência total do conceito de nulidade.
Ou seja, não adianta ter um objeto que representa o null. Por que aí, o conceito ainda está presente e você fatidicamente ainda terá uma nullpointerexception. Muda-se a os chifres e as manchas, mas o boi continua o mesmo.

Como eliminariamos esse conceito? Em algumas funções que retornam listas, já fazemos isso através da lista vazia (que representa o conjunto vazio). Alguns outros objetos também tem valores que representam a ausência (o vetor (0,0) e a matriz identidade, na matemática, a String "", etc). O interesse do "objeto nulo" é quando ele pode ser usado como um objeto não nulo. É possível fazer for...each numa lista vazia sem obter erro, ou somar um vetor (0,0) com um outro vetor, sem que haja problemas.


Seria possível eliminar isso para os demais métodos ou criar isso para as demais classes? Bem, em métodos que aceitam um parâmetro opcional, certamente poderíamos ter duas assinaturas, uma com um objeto, outra sem. Métodos que retornam um objeto só poderiam retornar listas, e usar-se do conjunto vazio. Em alguns tipos de classes, é possível criar um objeto estático representado o valor vazio (como o "" da String).


Agora, será que isso deixaria os sistemas mais simples? Não sei se com as linguagens atuais. Talvez se implementarmos algum tipo de suporte melhor a conjuntos, isso até poderia ser feito. Coisa que é feita em linguagens funcionais, e daí o sumiço do null no Haskel.

This message was edited 2 times. Last update was at 03/09/2010 08:58:42


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
lina
Moderador
[Avatar]

Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline

Oi,

o NUllPointerException mostra que sua programação esta "furada". Logo, acho importante ter essa Exceção.

Tchauzin!

Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java

Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]

@gujgirl

http://www.restartfans.hdfree.com.br

Meu blog:

http://www.runthecode.wordpress.com

Tchauzin!
[Email]
Leonardo3001
GUJ Ranger

Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline

Usar null não é muito diferente de falar palavrão: é possível evitar, mas você está tão acostumado que o usa do mesmo jeito.

O problema principal é que a maioria dos programadores não entendem de máquinas de estado. Talvez porque morcegaram na aula de Linguagens Formais e Autômatos, ou talvez porque nunca tiveram essa disciplina na faculdade. Por não conhecer, usam null como estado da aplicação. Exemplo: uma classe Pedido possui dataEntrega como atributo que, quando for nulo, significa que o pedido ainda não foi entregue. Ou seja, ao invés de evitar o null, torna-o como parte fundamental para o funcionamento do sistema. E olha que existem outras opções, como criar um enum ou usar o pattern State.

Ponteiro null não tem nada de baixo nível, Assembly não tem referências; é apenas uma maneira pobre de pensar sobre uma linguagem.

Haskell e Scala tem opções quanto ao ponteiro null, é basicamente um container que armazena um valor ou nenhum valor. Mas não é só isso, Haskell tem a notação "do" e Scala tem for-compreensions. Ao colocar uma sequência de instruções dentro de um "do"/for-compreension, se uma delas retornar Nothing, as instruções seguintes param de ser executadas e Nothing é retornado no final. É um jeito mais simples do que verificar com ifs cada retorno de programa.

Leonardo Veríssimo
-------------------------------------------------
Objectzilla
[WWW]
AbelBueno
Virtual Machine Man

Membro desde: 04/08/2010 09:37:57
Mensagens: 543
Offline

Leonardo3001 wrote:Usar null não é muito diferente de falar palavrão: é possível evitar, mas você está tão acostumado que o usa do mesmo jeito.


Vocês costumam utilizar aquele pattern de NullObject?

Ou ao criar uma enum incluir um valor como INDEFINIDO ?

Procuro fazer isso em aplicações pessoais mas não vejo esse tipo de ténica muito difundida por aí.
fredferrao
GUJ Master
[Avatar]

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

Andre Brito wrote:
fredferrao wrote:Ou seja(ainda to começando com scala, posso por ventura falar alguma asneira ), teoricamente eu nunca terei um ponteiro apontando pra null.

Não? Eu achei que tinha... Em Scala existem tantos nulls (Nothing , Null null, Nil... até o Náim fazem daqui a pouco :p) que é fácil de se perder.


Scala tem null, apenas por retrocompatibilidade com .NET e Java, mas seu uso é totalmente desencorajado!

Nil é uma lista vazia. um empty List

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

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

Leonardo3001 wrote:Usar null não é muito diferente de falar palavrão: é possível evitar, mas você está tão acostumado que o usa do mesmo jeito.

...

Ponteiro null não tem nada de baixo nível, Assembly não tem referências; é apenas uma maneira pobre de pensar sobre uma linguagem.

...



Ponteiros são o que há de mais próximo da máquina. Uma maneira de enxergar um bloco de memória. Toda linguagem de programação usa isso, independente no nível, mesmo que seja transparente. Assembly endereça memória da mesma maneira.

Isso aqui é um exemplo simples de ponteiro e endereçamento.



http://www.friedspace.com/assembly/intro.php

Não entendo porque é uma maneira pobre de pensar em uma linguagem. Se for analizar (sistemicamente), não há como evitá-los e eles sempre estarão presentes(a cpu funciona assim).

This message was edited 1 time. Last update was at 03/09/2010 10:48:56


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