Perché non c'è un booleano per i valori x di una variabile? [duplicare]

4

Prima di tutto, non sono un programmatore, sono un ingegnere civile che fa programmazione e mi piace molto.

Secondo e secondo, vorrei reclamare i diritti su questa sorprendente invenzione e chiamarla TROLLEAN o DASSOUKIEAN.

A parte gli scherzi, in numerose occasioni mi imbatto in variabili che possono contenere solo tre valori (diciamo loro True, False e Altro.

Ad esempio, prendi un incrocio del traffico. Potrebbe essere segnalato, non segnalato o non controllato (ovvero senza segnali di stop e senza semafori). sarebbe dnice definire TROLLEAN traffic_light = Other Altro in questo caso rappresenta intersezioni non controllate. Invece mi trovo a scrivere una sequenza di codice per definirlo.

    
posta dassouki 28.07.2011 - 21:32
fonte

6 risposte

16

Potrei avere una comprensione errata della tua domanda, ma penserei che un Enum sarebbe sufficiente qui. Nel caso della tua analogia con il semaforo:

Enum TrafficLights
{
    Signalised,
    un-signalised,
    non-controller
}
    
risposta data 28.07.2011 - 21:36
fonte
5

Dovresti avere un tipo diverso per ogni valore, il che, sebbene possibile e fedele allo spirito della tipizzazione strong, è probabilmente eccessivo per la maggior parte degli scopi.

È molto più semplice usare un'enumerazione generale o addirittura un valore intero che possa avere tanti valori diversi quanti ne hai bisogno. Questo soddisfa il 99,9% dei casi del mondo reale (che è quello di cui dovremmo preoccuparci qui).

In effetti le lingue hanno valori a tre vie con il concetto di un valore booleano nullable che può essere null (per indefinito), true o false - sebbene ovviamente non funzioni per l'esempio che hai dato dove un enum sarebbe la soluzione migliore.

    
risposta data 28.07.2011 - 21:37
fonte
3

In C # è possibile utilizzare un valore booleano annullabile se si desidera evitare l'enumerazione. Qualcosa come:

bool? IsTrue = true;
bool? IsFalse = false;
bool? IsMaybe = null;
    
risposta data 28.07.2011 - 21:45
fonte
2

Questo concetto esiste. Si chiama enum . Una variabile enum può essere uno degli n stati elencati nella dichiarazione del tipo enum.

    
risposta data 28.07.2011 - 21:37
fonte
2

Un termine comunemente usato è "a tre stati" e di solito è implementato in due modi:

  • Utilizzando un'enumerazione appositamente predisposta allo scopo, ad esempio:

    enum Tristate { TRISTATE_TRUE, TRISTATE_FALSE, TRISTATE_UNDECIDED };

  • Utilizzare un valore booleano annullabile, ad es. (in C #) bool? tristate; . Un valore booleano nullable può contenere un valore booleano regolare (vero o falso) o null , che può essere interpretato come "nessun valore" o "indeciso".

Le tristate sono piuttosto comuni per i pulsanti radio della GUI: un pulsante di opzione può essere selezionato, deselezionato o disattivato.

    
risposta data 28.07.2011 - 22:24
fonte
1

Tutte le risposte finora ce l'hanno praticamente.

Di recente come C ++, le lingue non avevano nemmeno un tipo "booleano". Se fosse stato necessario un tipo di questo tipo, è stato utilizzato un enum o un typedef int per rendere il tipo LOOK come un tipo. È stato solo quando è arrivata la prossima generazione di linguaggi web e orientati a Windows, come VB, Java e C #, che "bool" è stato ritenuto abbastanza importante da includere come tipo "incorporato".

Quale potrebbe essere il terzo valore del valore "trileno" è molto dipendente dal contesto. "True" e "False" sono molto generali e possono essere facilmente tradotti nella mente del programmatore in "sì" e "no" o semplicemente "on" e "off". I programmatori la pensano così; devono, perché è così che pensa il computer. Sotto tutti gli strati di astrazione ci sono miliardi e miliardi di cifre binarie, che sono rappresentati dalla continuità dei circuiti microscopici nella CPU e altro hardware; acceso o spento, non intermedio.

L'aggiunta di questa terza ruota confonde le cose. Qual è il terzo valore? Nullo? Non specificato? Sconosciuto? Altro (e cos'altro potrebbe esserci in uno spazio di risposta con "on" e "off")? Questo terzo valore diventa MOLTO dipendente dal contesto e per questo motivo i "trileani" non sono integrati.

Proprio come i semplici booleani prima che fossero integrati, puoi sempre creare i tipi che ti servono praticamente in qualsiasi linguaggio strongmente tipizzato. Un "trilean" verrebbe creato usando un Enum con "true", "false" e qualunque sia il tuo terzo valore. In .NET, è possibile utilizzare un valore null bool, dove null sarebbe il terzo "valore". Oppure, ci sono diversi tipi "a tre stati" enumerati nelle librerie Framework; DataGridViewTriState è grande e i suoi valori sono semplicemente True, False e NotSet che funzionano in un numero elevato di casi.

    
risposta data 29.07.2011 - 00:30
fonte

Leggi altre domande sui tag