Tipos sem sinal, isso faz falta no java?

9 respostas
L

Eu sei que java tem UM tipo sem sinal, mas isso não é de muita ajuda.

Volta e meia eu me encontro tendo que verificar por uma invariante que não existirie se eu estivesse usando tipos sem sinal (>= 0).

Ate que ponto vocês acham que esse recurso mais atrapalha que ajuda? Pessoalmente acredito que a maior expressividade seria de grande ajuda.

Queria ouvir a opinião do pessoal aqui do forum, em especial, as daqueles que tem o azar de trabalhar com uma certa plataforma na qual a linguagem principal possui tipos com e sem sinal.

9 Respostas

R

Acho importante existir um tipo que represente os numeros reais…

R

Olha, eu me sinto meio desconfortavel com essa falta… eu vejo pelo lado “… eu preciso de um numero grande, positivo, soh que metade do valor possivel dele esta reservado para a parte menor que 0”…

nao sei se eh um argumento valido, nem se tem fundamento, mas eh a minha impressao…

Rafael

J

Perguntinha de principiante que não manja porcaria nenhuma :oops: ,. O que vem a ser um tipo sem sinal :?:

Valew!!! :lol:

C

Isso foi feito explicitamente no design da linguagem. Em C ou C++, sempre dava algum pepino converter um unsigned int pra int, e vice-versa. Alem do que, se vc quer especificar uma invariante, especifique no código! Imagine como seria ter um tipo específico para a invariante mais famosa de todas, Object o != null:

notnull Object o = new Object(); Object p = null; o = p; // erro de compilacao? de runtime? nem da erro?

L

“jc_oz”:

Perguntinha de principiante que não manja porcaria nenhuma :oops: ,. O que vem a ser um tipo sem sinal :?:
Valew!!! :lol:

Bom, o int do java tem sinal, por que ele guarda números negativos e positivos, a grosso modo ele pode guardar valores no intervalo +/- 2bilhoes.

Um número sem sinal não representa valores negativos. No java temos o char, que pode representar de 0 a 65535.

Resposta formal: tipo numérico com sinal é subconjundo dos inteiros, enquando sem sinal é subconjunto dos naturais.

J

“louds”:
“jc_oz”:

Perguntinha de principiante que não manja porcaria nenhuma :oops: ,. O que vem a ser um tipo sem sinal :?:
Valew!!! :lol:

Bom, o int do java tem sinal, por que ele guarda números negativos e positivos, a grosso modo ele pode guardar valores no intervalo +/- 2bilhoes.

Um número sem sinal não representa valores negativos. No java temos o char, que pode representar de 0 a 65535.

Resposta formal: tipo numérico com sinal é subconjundo dos inteiros, enquando sem sinal é subconjunto dos naturais.

Putz, claro :!: eu não estava relacionando o “nome aos bois” :lol: tipo sem sinal, é um tipo de dados sem sinal. :wink:

Boa louds, thanks pelo esclarecimento!!! 8)

L

“cv”:
Isso foi feito explicitamente no design da linguagem. Em C ou C++, sempre dava algum pepino converter um unsigned int pra int, e vice-versa. Alem do que, se vc quer especificar uma invariante, especifique no código! Imagine como seria ter um tipo específico para a invariante mais famosa de todas, Object o != null:

notnull Object o = new Object(); Object p = null; o = p; // erro de compilacao? de runtime? nem da erro?

Os problemas do c/c++ são advendos do fato de ser uma linguagêm fracamente tipada, converter qualquer coisa pra qualquer coisa é válido e, algumas vezes, necessario.

Em Java poderia fazer que conversão entre tipos com/sem sinal exigir um cast sempre que fosse de estreitamento. Ex: unsigned int -> int.

Cv, existem algumas linguagens que possuem marcação para quando uma variavel não pode ser nula e funciona muito bem. No seu exemplo, não compilaria e colocando o devido cast, um NullPointerException seria lançado.

Existe o mito que expressar invariantes na linguagem é uma coisa ruim, que não escalam com o crecimento do código. Bom java possui, poucas pessoas reclamam o Carlos Perez é um, checked exceptions.

Agora me diga sinceramente, olhando grande parte do seu código, em quantos lugares você lida com checked exceptions não por que você queria mais porque foi obrigado? Quantos try/catch e throws você escreveu somente para satisfazer elas? Agora não sou eu que vou dizer que checked exceptions são ruins.

Suporte da linguagem a invariantes obriga o programador a deixar de ser folgado e seguir elas por toda aplicação.

Mas isso ta fugindo um pouco do escopo dessa discução. Não acho que ter ou não tipos sem sinal se restringe ao argumento que acabei de dissertar sobre.

D

Mas tipo assim… pelo que pude entender. e se nao entendi direito…peço que me desculpem… se eu vou e ponho um numero natural qualquer… automaticamente ja estará sendo o proprio numero em si, mas a partir do momento que eu chego e ponho um sinal de negativo à frente do número, o java nâo passa a entender que aquele se trata de um numero int nao?? :oops: :?:

R

:?:
Se vc colocar um sinal de menos na frente do numero não vai dar… pq char ‘-’ não é um numero inteiro…
O que estamos discutindo aqui é se faz falta no Java um unsigned int e tal… :lol: :shock:

Criado 25 de novembro de 2003
Ultima resposta 26 de nov. de 2003
Respostas 9
Participantes 6