¿Por qué el nombre de tipo primitivo booleano de Java no es 'bool'?

28

Java tiene

  • int y Integer
  • boolean y Boolean

Esto parece un poco inconsistente, ¿por qué no?

  • boolvs Booleanpara usar un nombre más corto establecido para el tipo primitivo?

o

  • integervs Integerpara mantener los nombres de tipo consistentes?

Creo que C ++ había decidido usar boolun poco antes de lo que Java decidió usar boolean, y tal vez también algunas extensiones C (¿no estándar en ese momento?), Por lo que habría tenido una precedencia histórica bool. Me he dado cuenta de que a menudo intento usar instintivamente boolal principio (algo bueno, los editores modernos inmediatamente detectan esto sin una ronda de compilación adicional), por lo que sería bueno saber la razón detrás del estado actual de las cosas.

Si alguien recuerda (una parte de) la historia, o incluso puede encontrar y vincularse a una discusión histórica relevante en la red, sería genial.

Hyde
fuente
8
booleanes definitivamente más explícito que bool. Prefiero preguntar por qué intno se llama integer. Mi conjetura: inty chardónde estaba demasiado arraigado para ser cambiado integery character, pero boolaún no estaba completamente establecido.
Joachim Sauer
"Creo que C ++ había decidido usar bool un poco antes que Java decidió usar boolean" ¿Por qué crees eso?
John Bartholomew
66
Según Evolving a language in and for the real world: C ++ 1991-2006 , el booltipo se introdujo en C ++ en 1993. Java se incluyó booleanen su primer lanzamiento en 1995, pero el proyecto Java se inició en 1991. Sin encontrar más fuentes de información, no me queda claro qué vino primero, o qué influencia (si alguna) tuvieron entre sí.
John Bartholomew
3
La especificación del lenguaje Oak (versión 0.2, con derechos de autor 1994) también incluye el booleantipo. (Oak luego fue renombrado a Java). Eso empuja las fechas aún más cerca, aunque todavía no veo evidencia definitiva que muestre precedencia o influencia en ninguna dirección.
John Bartholomew
No es inconsistente, hay doubley Doubletambién.
vortexwolf

Respuestas:

20

Sin entrar en contacto con personas que realmente estuvieron involucradas en estas decisiones de diseño, creo que es poco probable que encontremos una respuesta definitiva. Sin embargo, en base a los plazos del desarrollo de Java y C ++, conjeturaría que booleanse eligió Java antes, o al mismo tiempo, la introducción boola C ++, y ciertamente antes boolse usó ampliamente. Es posible que booleanse haya elegido debido a su larga historia de uso (como en álgebra booleana), o para que coincida con otros idiomas (como Pascal) que ya tenían un booleantipo.

Contexto histórico

Según Evolving a language in and for the real world: C ++ 1991-2006 , el booltipo se introdujo en C ++ en 1993.

Java incluido booleanen su primer lanzamiento en 1995 ( Java Language Specification 1.0 ). La primera especificación de lenguaje que puedo encontrar es la especificación Oak 0.2 ( luego se cambió el nombre de Oak a Java ). Esa especificación de Oak está marcada como "Copyright 1994", pero el proyecto en sí se inició en 1991 y aparentemente tuvo una demostración en funcionamiento para el verano de 1992 .

John Bartholomew
fuente
12

En realidad, Java es más preciso para la historia aquí. La teoría de los valores verdaderos y falsos fue inventada por George Boole y comúnmente se conoce como álgebra booleana en su honor.

booles realmente solo un atajo para evitar un nombre más largo, sin embargo, dado el soporte de autocompletado de IDEs modernos, esto ya no es una razón válida (y ni siquiera fue en los días en que Java decidió hacerlo boolean).

No he sido parte del proceso de decisión para Java, pero si a alguien le importa la historia, entonces "álgebra booleana" es la precedencia histórica relevante, y uno podría cuestionar la decisión de C / C ++ sobre por qué mutilaron el nombre de Boole cortando el e.

Franco
fuente
55
La misma razón por la que se llama a la llamada POSIX para crear un archivo creat().
Blrfl
55
¿Entonces estás diciendo que intdebería ser integer?
44
Si quieres ser históricamente exacto, entonces creo que Booleanes un poco mal, teniendo en cuenta que puede tener 3 valores ( Boolean.FALSE, Boolean.TRUE, null) ... punto que se encuentre, la programación de los símbolos del lenguaje y las palabras reservadas son siempre un compromiso de varios factores, y la precisión histórica es probablemente bastante bajo en esa lista.
hyde
2
No tengo intención de ser históricamente exacto, pero no olvides que no todos los idiomas permiten ese error llamado billón de dólares null.
Frank
2
@Frank Hey, solo estoy convirtiendo una situación específica de NullPointerException en un mejor informe y manejo de errores, y tratando de olvidar activamente a LALALAA por no escuchar lo que dices LALALAA ;-)
hyde
-2

No puedo abordar el problema de coherencia, pero hay una larga historia aquí.

Por lo que recuerdo, Algol 60 fue el primer idioma en referirse a sus tipos lógicos como 'booleano'. Algol 60 también tenía tipos como 'entero', 'procedimiento', etc.

Llegó Algol 68, y las abreviaturas parecían estar de moda: 'bool', 'int', 'proc', etc.

Entonces, los diseñadores de idiomas pueden elegir el estilo que quieran, y hay un precedente para ello.

Dave
fuente