Чому ім'я типу boole примітивного типу Java не є "bool"?


28

Java має

  • int і Integer
  • boolean і Boolean

Це здається трохи непослідовним, чому б і ні

  • boolvs Booleanвикористовувати встановлене коротше ім’я для примітивного типу?

або

  • integervs, Integerщоб зберегти імена типів послідовними?

Я думаю, що C ++ вирішив використовувати boolтрохи раніше, ніж вирішив використовувати Java boolean, і, можливо, також деякі (нестандартні на той час?) Розширення C також, тому це було б історичним пріоритетом bool. Я помітив, що boolспочатку інстинктивно намагаюся використовувати спочатку (добре, що сучасні редактори негайно помічають це без додаткового раунду компіляції), тому було б добре знати обґрунтування поточного стану справ.

Якщо хтось пам’ятає (частину) історії, або навіть може знайти та зв’язати відповідну історичну дискусію в мережі, це було б чудово.


8
booleanбезумовно, явніше, ніж bool. Я б швидше запитав, чому intйого не називають integer. Моє припущення: intі charде занадто вкоренилися , щоб бути змінений integerі character, але boolще не з'ясовані до кінця.
Йоахім Зауер

"Я думаю, що C ++ вирішив використовувати bool трохи раніше, ніж Java вирішила використовувати булеву" Чому ви так вважаєте?
Іван Варфоломій

6
Згідно Розвиваючись мовою в світі і для реального світу: C ++ 1991-2006 , то boolтип був введений в C ++ в 1993 році Java включені booleanв його першій версії в 1995 році, але сам проект Java було розпочато в 1991 році , без виявлення додаткових джерел Інформація, мені незрозуміло, хто був першим, або який (якщо такий є) вплив вони мали один на одного.
Іван Варфоломій

3
Специфікація мови Дуба (версія 0.2, захищена авторським правом 1994) також включає booleanтип. (Дуб пізніше було перейменовано на Яву). Це підштовхує дати ще ближче, хоча я все ще не бачу певних доказів, які б демонстрували перевагу чи вплив у будь-якому напрямку.
Іван Варфоломій

Це непослідовно, є doubleі Doubleтак само.
вихровий вовк

Відповіді:


20

Не контактуючи з людьми, які насправді брали участь у цих дизайнерських рішеннях, я думаю, що ми навряд чи знайдемо остаточну відповідь. Однак, виходячи із строків розвитку як Java, так і C ++, я здогадуюсь, що Java booleanбула обрана раніше або одночасно з цим введенням boolна C ++ і, звичайно, раніше boolшироко використовувалася. Можливо, що він booleanбув обраний через його тривалішу історію використання (як у булевій алгебрі) або для відповідності іншим мовам (наприклад, Pascal), які вже мали booleanтип.

Історичний контекст

За даними Еволюція мови в і для реального світу: C ++ 1991-2006 , boolтип був введений в C ++ в 1993 році.

Java увійшла booleanдо свого першого випуску у 1995 році ( специфікація мови Java 1.0 ). Найдавніша мовна специфікація, яку я можу знайти, - це специфікація Oak 0.2 ( пізніше Дуб було перейменовано на Java ). Ця специфікація Oak позначена "Авторське право 1994", але сам проект був розпочатий у 1991 році і, мабуть, мав робочу демонстрацію до літа 1992 року .


12

Насправді, Java тут точніша до історії. Теорія істинних і хибних значень була винайдена Джорджем Булом і її на честь називають булевою алгеброю .

boolнасправді є лише ярликом, щоб уникнути більш тривалої назви, однак, зважаючи на підтримку автоматичного завершення сучасних IDE, це вже не є поважною причиною (і навіть не було в ті часи, коли Java вирішила подати заявку boolean).

Я не був частиною процесу прийняття рішень для Java, але якщо хтось піклується про історію, то "булева алгебра" є відповідним історичним пріоритетом, і можна було б також поставити під сумнів рішення C / C ++ про те, чому вони пошкодили ім'я Була, відрізавши то e.


5
З тієї ж причини викликається виклик POSIX для створення файлу creat().
Blrfl

5
Так ти кажеш, що intмає бути integer?

4
Якщо ви хочете бути історично точним, то я думаю , що Booleanце свого роду погано, враховуючи це може мати 3 значення ( Boolean.FALSE, Boolean.TRUE, null) ... Суть в тому, програмування символів мови і зарезервовані слова завжди компроміс декількох факторів, і історичної точності ймовірно, досить низький у цьому списку.
Гайда

2
Я не маю наміру бути історично точним, але не забувайте, що не всі мови допускають помилку, яку називають мільярд доларів null.
Френк

2
@Frank Ей, я просто перетворення ситуації , конкретні NullPointerException для поліпшення повідомлень про помилки і обробки, і намагається активно забути LALALAA Він не почув то , що ви говорите LALALAA ;-)
Hyde

-2

Я не можу вирішити проблему узгодженості, але тут довга історія.

Наскільки я пам'ятаю, Algol 60 був першою мовою, яка назвала свої логічні типи як "булева". Algol 60 також мав такі типи, як "ціле число", "процедура" тощо.

Поряд вийшов Алгол 68, а абревіатури, здається, були в моді: 'bool', 'int', 'proc' тощо.

Отже, мовні дизайнери можуть вибирати будь-який стиль, який їм подобається, і тут є прецедент.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.