Perché il nome del tipo primitivo booleano Java non è 'bool'?


28

Java ha

  • int e Integer
  • boolean e Boolean

Questo sembra un po 'incoerente, perché no

  • boolvs Booleandi utilizzare un nome più corto stabilito per il tipo primitivo?

o

  • integervs Integerper mantenere coerenti i nomi dei tipi?

Penso che C ++ avesse deciso di usare boolun po 'prima di quanto Java avesse deciso di usare boolean, e forse anche alcune estensioni C (non standard al momento?), Quindi ci sarebbe stata una precedenza storica per bool. Ho notato che all'inizio provo spesso istintivamente a usarlo bool(per fortuna gli editori moderni lo notano immediatamente senza un giro di compilazione extra), quindi sarebbe bello conoscere la logica alla base dell'attuale situazione.

Se qualcuno ricorda (una parte di) la storia, o può persino trovare e collegarsi alla discussione storica pertinente in rete, sarebbe fantastico.


8
booleanè sicuramente più esplicito di bool. Preferirei chiedere perché intnon viene chiamato integer. La mia ipotesi: inte chardove troppo radicato per essere cambiato in integere character, ma boolnon era ancora completamente stabilito.
Joachim Sauer,

"Penso che il C ++ abbia deciso di usare bool un po 'prima di quanto Java abbia deciso di usare booleano" Perché lo pensi?
John Bartholomew,

6
Secondo Evolving a language nel e per il mondo reale: C ++ 1991-2006 , il booltipo è stato introdotto in C ++ nel 1993. Java è stato incluso booleannella sua prima versione nel 1995, ma il progetto Java stesso è stato avviato nel 1991. Senza trovare ulteriori fonti di informazioni, non mi è chiaro quale sia venuto prima o quale (se presente) influenza abbiano avuto l'uno sull'altro.
John Bartholomew,

3
Le specifiche del linguaggio Oak (versione 0.2, copyright 1994) includono anche il booleantipo. (Oak fu in seguito ribattezzata Java). Ciò avvicina ancora di più le date, anche se non vedo ancora prove certe che dimostrino la precedenza o l'influenza in entrambe le direzioni.
John Bartholomew,

Non è incoerente, ci sono doublee Doublepure.
vortexwolf

Risposte:


20

Senza entrare in contatto con le persone che sono state effettivamente coinvolte in queste decisioni di progettazione, penso che difficilmente troveremo una risposta definitiva. Tuttavia, basandomi sulle linee temporali dello sviluppo di Java e C ++, ipotizzerei che Java fosse booleanstato scelto prima o contemporaneamente all'introduzione boolal C ++ e certamente prima boolera ampiamente utilizzato. È possibile che sia booleanstato scelto per la sua più lunga storia di utilizzo (come in Algebra booleana) o per abbinare altre lingue (come Pascal) che già avevano un booleantipo.

Contesto storico

Secondo Evolving a language nel e per il mondo reale: C ++ 1991-2006 , il booltipo è stato introdotto in C ++ nel 1993.

Java incluso booleannella sua prima versione nel 1995 ( Java Language Specification 1.0 ). La prima specifica del linguaggio che posso trovare è la specifica Oak 0.2 ( Oak fu in seguito ribattezzata Java ). Quella specifica di Oak è contrassegnata come "Copyright 1994", ma il progetto stesso è stato avviato nel 1991 e apparentemente aveva una demo funzionante entro l'estate del 1992 .


12

In realtà, Java è più preciso alla storia qui. La teoria dei valori veri e falsi è stata inventata da George Boole e viene comunemente definita Algebra booleana in suo onore.

boolè in realtà solo una scorciatoia per evitare un nome più lungo, tuttavia, dato il supporto del completamento automatico degli IDE moderni, questo non è più un motivo valido (e non era nemmeno ai tempi in cui Java decise di optare per boolean).

Non ho fatto parte del processo decisionale per Java, ma se qualcuno si prende cura della storia, allora "l'algebra booleana" è la precedenza storica rilevante e si potrebbe anche mettere in discussione la decisione C / C ++ sul perché hanno mutilato il nome di Boole tagliando il e.


5
Stesso motivo per cui viene chiamata la chiamata POSIX per creare un file creat().
Blrfl

5
Quindi stai dicendo che intdovrebbe essere integer?

4
Se si vuole essere storicamente accurato, allora penso che Booleanè una specie di male, considerando che essa può avere 3 valori ( Boolean.FALSE, Boolean.TRUE, null) ... Punto di essere, di programmazione simboli linguistici e le parole riservate sono sempre un compromesso di diversi fattori, e l'accuratezza storica è probabilmente piuttosto basso in quella lista.
hyde,

2
Non ho intenzione di essere storicamente accurato, ma non dimenticare che non tutte le lingue consentono l'errore chiamato miliardi di dollari null.
Frank,

2
@Frank Ehi, sto solo convertendo una specifica situazione NullPointerException in una migliore segnalazione e gestione degli errori, e sto cercando di dimenticare attivamente LALALAA non sentendo quello che dici LALALAA ;-)
hyde

-2

Non posso affrontare il problema della coerenza, ma qui c'è una lunga storia.

Per quanto ricordo, Algol 60 è stata la prima lingua a riferirsi ai suoi tipi logici come "booleano". Algol 60 aveva anche tipi come "intero", "procedura", ecc.

Arrivò Algol 68 e le abbreviazioni sembravano essere in voga: "bool", "int", "proc", ecc.

Quindi, i progettisti di lingue possono scegliere lo stile che preferiscono e c'è un precedente per questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.