Dlaczego pierwotna nazwa typu boolean Java nie jest nazwą „bool”?

28

Java ma

  • int i Integer
  • boolean i Boolean

To wydaje się trochę niespójne, dlaczego nie

  • boolvs Booleanużyć ustalonej krótszej nazwy dla typu pierwotnego?

lub

  • integervs Integeraby zachować spójność nazw typów?

Wydaje mi się, że C ++ zdecydował się użyć boolnieco wcześniej niż Java boolean, a może także niektóre (niestandardowe w tamtym czasie?) Rozszerzenia C, więc byłby to historyczny precedens bool. Zauważyłem, że często boolod razu instynktownie próbuję użyć (dobrze, że nowi redaktorzy natychmiast zauważają to bez dodatkowej rundy kompilacji), więc miło byłoby poznać uzasadnienie obecnego stanu rzeczy.

Jeśli ktoś pamięta (część) historii lub może nawet znaleźć odpowiednią link do historycznej dyskusji w sieci i nawiązać do niej, byłoby świetnie.

hyde
źródło
8
booleanjest zdecydowanie bardziej wyraźny niż bool. Wolałbym zapytać, dlaczego intsię nie nazywa integer. Zgaduję: inti chargdzie zbyt zakorzenione zostać zmieniona na integera character, ale boolnie został jeszcze w pełni ustalone.
Joachim Sauer
„Myślę, że C ++ zdecydował się na użycie bool nieco wcześniej niż Java zdecydowała się na użycie boolean” Dlaczego tak myślisz?
John Bartłomiej
6
Według Evolving języka w prawdziwym świecie: C ++ 1991-2006 , booltyp ten został wprowadzony do C ++ w 1993 r. Java zawarła booleanw swoim pierwszym wydaniu w 1995 r., Ale sam projekt Java został uruchomiony w 1991 r. Bez znalezienia dalszych źródeł informacji, nie jest dla mnie jasne, co było pierwsze, ani jaki (jeśli w ogóle) wpływ mieli na siebie nawzajem.
John Bartholomew
3
Specyfikacja języka Oak (wersja 0.2, chroniona prawem autorskim 1994) również obejmuje ten booleantyp. (Nazwa Oak została później zmieniona na Java). To przybliża daty jeszcze bliżej, chociaż wciąż nie widzę żadnych wyraźnych dowodów wskazujących na pierwszeństwo lub wpływ w obu kierunkach.
John Bartholomew
To nie jest niekonsekwentne, są doublei Doublerównież.
vortexwolf

Odpowiedzi:

20

Bez kontaktu z ludźmi, którzy faktycznie byli zaangażowani w te decyzje projektowe, myślę, że raczej nie znajdziemy ostatecznej odpowiedzi. Jednak w oparciu o ramy czasowe rozwoju zarówno Java, jak i C ++, przypuszczam, że Java booleanzostała wybrana przed wprowadzeniem booldo C ++ lub jednocześnie z nim , a już na pewno boolbyła w powszechnym użyciu. Możliwe, że booleanzostał wybrany ze względu na dłuższą historię użytkowania (jak w Algebrze Boolean) lub w celu dopasowania innych języków (takich jak Pascal), które już miały booleantyp.

Kontekst historyczny

Według Evolving języka w prawdziwym świecie: C ++ 1991-2006 , booltyp ten został wprowadzony do C ++ w 1993 roku.

Java zawarta booleanw pierwszym wydaniu w 1995 r. ( Java Language Specification 1.0 ). Najwcześniejszą specyfikacją języka, jaką udało mi się znaleźć, była specyfikacja Oak 0.2 ( później nazwa Oak została zmieniona na Java ). Ta specyfikacja Oak jest oznaczona jako „Copyright 1994”, ale sam projekt rozpoczął się w 1991 roku i najwyraźniej miał działającą wersję demonstracyjną do lata 1992 roku .

John Bartłomiej
źródło
12

W rzeczywistości Java jest tutaj dokładniejsza od historii. Teoria prawdziwych i fałszywych wartości została wynaleziona przez George'a Boole'a i na jego cześć jest powszechnie określana jako Algebra Boolean .

booljest tak naprawdę tylko skrótem, aby uniknąć dłuższej nazwy, jednak biorąc pod uwagę wsparcie współczesnych IDE w automatycznym uzupełnianiu, nie jest to już ważny powód (i nie było nawet w czasach, w których Java zdecydowała się wybrać boolean).

Nie brałem udziału w procesie decyzyjnym dla Javy, ale jeśli ktoś troszczy się o historię, to „algebra boolowska” jest odpowiednim historycznym precedensem i równie dobrze można kwestionować decyzję C / C ++, dlaczego okaleczył imię Boole'a, odcinając e.

Szczery
źródło
5
Z tego samego powodu wywoływane jest wywołanie POSIX w celu utworzenia pliku creat().
Blrfl
5
Więc mówisz, że intpowinno być integer?
4
Jeśli chcesz być historycznie dokładne, to myślę, że Booleanjest trochę zły, biorąc pod uwagę to może mieć 3 wartości ( Boolean.FALSE, Boolean.TRUE, null) ... Punkt istota, programowanie symbole językowe i Reserved słowa są zawsze kompromisem od kilku czynników, a dokładność jest historyczny prawdopodobnie dość nisko na tej liście.
hyde
2
Nie zamierzam być historycznie dokładny, ale nie zapominaj, że nie wszystkie języki dopuszczają ten błąd o wartości miliarda dolarów null.
Frank
2
@Frank Hej, właśnie przekształcam konkretną sytuację wyjątku NullPointerException na lepsze raportowanie błędów i obsługę, i próbuję aktywnie zapomnieć LALALAA, nie słysząc tego, co mówisz LALALAA ;-)
hyde
-2

Nie mogę rozwiązać problemu spójności, ale tutaj jest długa historia.

O ile pamiętam, Algol 60 był pierwszym językiem, który nazywał swoje logiczne typy „Boolean”. Algol 60 miał również typy takie jak „liczba całkowita”, „procedura” itp.

Wraz z Algolem 68 pojawiły się modne skróty: „bool”, „int”, „proc” itd.

Projektanci języków mogą więc wybrać styl, który im się podoba, i jest to precedens.

Dave
źródło