Quali sono i problemi con le variabili booleane? [chiuso]

0

Perché alcuni linguaggi non hanno nemmeno un tipo boolean (e usa invece una costante TRUE ), ma hanno molti altri tipi e moderni? A volte può essere un problema se si crea un boolean e poi ci si rende conto che può avere tre valori diversi o più, quindi sarà difficile se si hanno dati vecchi con la variabile booleana. Quali sono alcuni altri motivi per evitare variabili booleane?

Domanda correlata: link

Sto pensando più a problemi concettuali come casi indecidibili e problemi di sincronizzazione. E che un booleano spesso è un'informazione ridondante e quindi può essere problemi e problemi di sincronizzazione.

Per un semaforo un booleano potrebbe essere buono ma forse non come una variabile di istanza per un account indipendentemente dal fatto che l'account sia "P" poiché potrebbe essere diverso in modi diversi a cui non si sarebbe pensato, ad esempio quando realizzi che non ci sono solo due stati che si escludono a vicenda per ciò che si sta modellando.

    
posta Niklas Rosencrantz 05.05.2016 - 07:57
fonte

3 risposte

1

Questo problema di boolean non riguarda solo la programmazione stessa. I database hanno lo stesso problema nella rappresentazione dei valori booleani.

Esempio:

Dove MS Access usa -1 come vero o si come VB (vedi la risposta di Robbie), MySQL presume che tutto eccetto 0 è vero .

Il trasferimento di dati da un sistema di database a un altro o query con parole chiave come true o false possono provocare strane cose.

    
risposta data 05.05.2016 - 10:45
fonte
2

Non ho mai sentito parlare dei booleani come "cattivi" - per quanto riguarda l'interfaccia con le lingue (come nella risposta di Robbie), non importa con che tipo stai lavorando, probabilmente stai andando bisogno di qualche conversione da qualche parte.

Spostarsi tra le barriere delle lingue richiede sempre attenzione nel modo in cui i valori sono mappati. Passare un valore intero da VBA come dovrebbe rappresentare un booleano è un errore amatoriale e dovrebbe essere noto che il casting di tipo esplicito prima di inviarlo attraverso il confine è una buona pratica. IMO, questo ha poco a che fare con qualsiasi tipo specifico che non è buono da usare (sarebbe lo stesso caso se un intero VBA fosse passato a un C int (che è un Long in VBA) - non lo renderebbe così "gli interi sono cattivi", è solo un'altra cosa di cui dobbiamo fare attenzione).

Non sono nemmeno sicuro di come funzioneremmo senza un linguaggio che non può risolvere qualcosa di tipo booleano. Ogni espressione di confronto di uguaglianza restituisce un valore booleano.

Le stringhe sono cattive perché la loro implementazione di basso livello è nascosta da linguaggi di livello superiore? Li evitiamo come tali? No, cerchiamo semplicemente di essere consapevoli delle differenze tra le lingue e di capire le implicazioni e il programma di conseguenza (che di solito non è nulla di fuori dell'ordinario). Non vedo perché dovremmo trattare i valori booleani in modo diverso.

    
risposta data 05.05.2016 - 13:05
fonte
1

È possibile riscontrare problemi durante l'interfaccia tra lingue che supportano un booleano come Visual Basic e linguaggi precedenti che non lo sono.

Ci siamo imbattuti in un bug sgradevole molti anni fa quando uno sviluppatore junior ha passato una rappresentazione intera di un valore booleano in VB a una DLL C. Naturalmente la DLL C prevedeva che > = 1 fosse vero e tutto il resto falso, ma sotto la cappa true in VB è in realtà -1 .

Modifica

Le cose diventano più interessanti se hai un valore booleano nullable che puoi in C #. Abbiamo eseguito il nostro primo test su un'API di terze parti proprio ora e torniamo di nuovo -1 nella risposta XML. Noi pensiamo che potrebbe significare vero ma non possiamo esserne certi e lo sviluppatore in questione non è in grado di prendere il sole da qualche parte. Questo porta al punto in cui molti hanno inteso: non è sufficiente definire il tipo, devi anche concordare rappresentazioni quando quei valori superano i confini. Dire semplicemente non zero non è falso, ma non tagliarlo qui ...

    
risposta data 05.05.2016 - 09:55
fonte

Leggi altre domande sui tag