Por que o nome do tipo primitivo booleano Java não é 'bool'?

28

Java tem

  • int e Integer
  • boolean e Boolean

Isso parece um pouco inconsistente, por que não

  • boolvs Booleanpara usar um nome mais curto estabelecido para o tipo primitivo?

ou

  • integervs Integerpara manter os nomes dos tipos consistentes?

Eu acho que o C ++ decidiu usar boolum pouco mais cedo do que o Java decidiu usar boolean, e talvez também algumas extensões C (não-padrão na época?) Também, então haveria precedência histórica para bool. Percebi que muitas vezes instintivamente tento usar boolno início (o bom é que os editores modernos imediatamente percebem isso sem uma rodada extra de compilação), então seria bom conhecer a lógica por trás do estado atual das coisas.

Se alguém se lembra (faz parte) da história, ou pode até encontrar e vincular uma discussão histórica relevante na rede, isso seria ótimo.

hyde
fonte
8
booleané definitivamente mais explícito que bool. Prefiro perguntar por que intnão é chamado integer. Meu palpite: inte charonde muito arraigado para ser alterado para integere character, mas boolainda não estava totalmente estabelecido.
Joachim Sauer
"Eu acho que o C ++ decidiu usar bool um pouco mais cedo do que o Java decidiu usar boolean" Por que você acha isso?
John Bartholomew
6
De acordo com Evoluindo uma linguagem no e para o mundo real: C ++ 1991-2006 , o booltipo foi introduzido no C ++ em 1993. O Java foi incluído booleanem seu primeiro lançamento em 1995, mas o próprio projeto Java foi iniciado em 1991. Sem encontrar outras fontes de informações, não está claro para mim o que veio primeiro ou que (se houver) influência que eles tiveram um sobre o outro.
John Bartholomew
3
A especificação da linguagem Oak (versão 0.2, com direitos autorais de 1994) também inclui o booleantipo. (Oak foi posteriormente renomeado para Java). Isso leva as datas ainda mais perto, embora ainda não exista evidência definida para mostrar precedência ou influência em qualquer direção.
John Bartholomew
Não é inconsistente, existem doublee Doubletambém.
precisa saber é o seguinte

Respostas:

20

Sem entrar em contato com pessoas que realmente estavam envolvidas nessas decisões de design, acho improvável que encontremos uma resposta definitiva. No entanto, com base nas linhas de tempo do desenvolvimento de Java e C ++, eu conjeturava que o Java booleanfoi escolhido antes ou contemporaneamente à introdução boolao C ++ e certamente antes boolera amplamente utilizado. É possível que tenha booleansido escolhido devido ao seu histórico de uso mais longo (como na Álgebra Booleana) ou para corresponder a outros idiomas (como o Pascal) que já tinham um booleantipo.

Contexto histórico

De acordo com Evoluindo uma linguagem no e para o mundo real: C ++ 1991-2006 , o booltipo foi introduzido no C ++ em 1993.

O Java foi incluído booleanem seu primeiro lançamento em 1995 ( Java Language Specification 1.0 ). A especificação de linguagem mais antiga que posso encontrar é a especificação Oak 0.2 (o Oak foi renomeado para Java ). Essa especificação do Oak está marcada como "Copyright 1994", mas o projeto em si foi iniciado em 1991 e, aparentemente, teve uma demonstração de trabalho no verão de 1992 .

John Bartholomew
fonte
12

Na verdade, o Java é mais preciso na história aqui. A teoria dos valores verdadeiros e falsos foi inventada por George Boole e é comumente referida como Álgebra Booleana em sua homenagem.

boolé realmente apenas um atalho para evitar um nome mais longo, no entanto, dado o suporte de preenchimento automático de IDEs modernos, esse não é mais um motivo válido (e nem estava nos dias em que o Java decidiu usar boolean).

Eu não participei do processo de decisão do Java, mas se alguém se importa com a história, então "álgebra booleana" é a precedência histórica relevante e é possível questionar a decisão do C / C ++ sobre por que eles mutilaram o nome de Boole cortando o e.

Frank
fonte
5
O mesmo motivo pelo qual a chamada POSIX para criar um arquivo é chamada creat().
Blrfl
5
Então você está dizendo que intdeveria ser integer?
4
Se você quer ser historicamente preciso, então eu acho que Booleané uma espécie de mal, considerando que pode ter 3 valores ( Boolean.FALSE, Boolean.TRUE, null) ... Ponto de ser, programação símbolos da linguagem e palavras reservadas são sempre um compromisso de vários fatores, e precisão histórica é provavelmente muito baixo nessa lista.
Hyde
2
Não tenho a intenção de ser historicamente preciso, mas não esqueça que nem todas as línguas permitem esse erro de bilhão de dólares null.
22413 Frank
2
@Frank Hey, eu estou apenas converter uma situação específica NullPointerException a mais agradável o relato de erros e manuseio, e tentando esquecer ativamente LALALAA não ouvir o que você diz LALALAA ;-)
Hyde
-2

Não consigo resolver o problema de consistência, mas há uma longa história aqui.

Tanto quanto me lembro, o Algol 60 foi o primeiro idioma a se referir a seus tipos lógicos como 'booleano'. O Algol 60 também tinha tipos como 'número inteiro', 'procedimento' etc.

A seguir, veio Algol 68, e as abreviações pareciam estar em voga: 'bool', 'int', 'proc' etc.

Assim, os designers de idiomas podem escolher o estilo que quiserem, e há um precedente para isso.

Dave
fonte