Esiste una terminologia per "vero" ing, "falso" ing e alternare un booleano? [chiuso]


23

Diciamo che sto cercando di descrivere il mio codice in una riunione tecnica.

In primo luogo, ho impostato il booleano foobaratrue

e

In secondo luogo, ho impostato il booleano foobarafalse

sembra un po 'prolisso. Se foobarfosse attivato, potrei probabilmente dire,

Terzo, commuto foobar

Attraverso le implicazioni qui, sai che è un valore booleano. Quindi non dovrei essere in grado di:

In quarto luogo, verità il foobar

e

In quinto luogo, falsifico foobar

Quale sarà anche implicitamente, dire ai miei ascoltatori che abbiamo a che fare con una variabile booleana? Esiste una terminologia adeguata per questo? Grazie.


16
"Ho impostato foobar su true / false" non è così prolisso, ed è ovvio che è un bool. "Toggle" è abbastanza chiaro per gli ascoltatori, IMO.
Filip Milovanović,

8
"In primo luogo, ho impostato il foobar booleano su true e, in secondo luogo, ho impostato il foobar booleano su false". Non avresti potuto impostarlo come falso in primo luogo? ;)
David Arno,

2
Ho sempre pensato che si chiamasse flipping, ma a quanto pare questo è il termine per bit , non
bools

16
Leggerei falsificare come equivalente a creare un falso e non impostare il valore su falso.
Codici A Caos

6
Sei sicuro di dover descrivere il tuo codice a un livello così basso? Sicuramente se qualcuno vuole una descrizione di così basso livello, leggerebbe semplicemente il codice. Non sto dicendo che non c'è mai un motivo per usare una tale terminologia, ma mi aspetterei che sia raro.
Dukeling,

Risposte:


52
  • L'impostazione di un valore su true è l'impostazione che
  • Impostarlo su false lo sta cancellando .
  • La modifica del valore corrente lo sta alternando .

Puoi anche usare "impostandolo su vero" e "impostandolo su falso" , ovviamente.


10
Non correlare l'impostazione di un valore su false come cancellarlo. Chiarire per me significa: né vero né falso.
Pieter B,

49
@PieterB: Beh, dipende dal contesto; se stiamo parlando di una bandiera booleana, allora "impostare" e "cancellare" la bandiera è una terminologia abbastanza comune.
Filip Milovanović,

7
@ FilipMilovanović Nel contesto delle variabili, impostare una variabile significa assegnare un valore a detta variabile, nel contesto della variabile booleana questo valore può essere vero o falso. Sarebbe strano dire: ehi, impostare una variabile significa assegnare un valore ad essa ... tranne quando è una variabile booleana, quindi in realtà quando la impostiamo, intendiamo che assegniamo il valore: "vero"
Pieter B

6
@PieterB Se può essere "né vero né falso", allora non è un booleano binario (che è quello che la maggior parte delle persone pensa quando sentono la parola), ma una cosa vera / falsa / indeterminata ternaria. Detto questo, la terminologia set / clear deriva dalle bandiere. Non tutte le variabili booleane sono flag, quindi la terminologia non è appropriata per molti casi d'uso.
Cubico

7
@PieterB: Sì - sarebbe strano dire "imposta la variabile bool" e aspettarsi che tutti la capiscano nel senso di "impostarla su vera"; ma se rappresenta una bandiera, allora "imposta la bandiera" è qualcosa di comunemente usato e significa impostare il valore del bool che rappresenta la bandiera su vero (o il bit che rappresenta la bandiera su 1). (PS Ma la risposta di immibis non ne tiene conto.)
Filip Milovanović,

66

Se possibile, piuttosto che concentrarsi sul valore booleano, dovresti provare a descrivere ciò che rappresenta. Qualche esempio:

  • un servizio? start / stop invece di iniziato = vero / falso
  • un effetto speciale in un motore di gioco? acceso spento
  • un segnale elettrico? set / reset
  • ...

In questo modo parleresti in termini più naturali. E così nel tuo incontro, invece di "verificare il foobar e poi falsificarlo", semplicemente "avvii il foobar e poi lo fermi" (se il foobar è un servizio, in effetti).

Quando hai davvero bisogno di parlare di un valore booleano, puoi andare con "set / reset", o "set to true" e "set to false". "Toggle" suona abbastanza bene in tutti i contesti.

E se lavori in un negozio booleano (qualunque cosa ciò possa significare) probabilmente avrai bisogno di più parole di quelle che il dizionario ha da offrire. In tal caso, verificare e falsificare sono semplicemente parti della tua microspeak .


16
Devo essere d'accordo ... booleano è l'implementazione che modella di cosa stai DAVVERO parlando ... quindi parlane invece!
Maybe_Factor

2
Non mi piace parlare di impostare un booleano come renderlo vero. Perché il modo in cui lavoro con le variabili inizia non inizializzato, il che significa che in pratica non puoi ancora usarle e l'atto di impostare una variabile (vero o falso) è l'inizializzazione. Perché l'impostazione significhi sempre vero causerebbe confusione.
Pieter B,

1
Inoltre, questo uso della terminologia si traduce anche in codice; Spesso è - non sempre ovviamente - meglio usare un enum a due valori invece del tipo booleano incorporato; signal = HighVoltageo signal = Activeè IMHO molto più chiaro di signal = true.
Cubico

Si noti che una proprietà / variabile booleana correttamente denominata rivelerà sempre immediatamente il nome che si dovrebbe usare per i valori. Pensare isStarted, isActive, isCaseSensitive, mockConnection, ... @PieterB: Sono in parte d'accordo con te. "Imposta il valore booleano" non significa intrinsecamente impostarlo su true. Tuttavia, "Imposta il isActiveflag" può essere ragionevolmente interpretato nel senso di impostarlo su true.
Flater

1
@Cubic: non sono d'accordo. Espansione futura a parte, un enum binario sembra superfluo. signal = truein effetti non è chiaro, ma se hai intenzione di usarlo signal = Active, potresti anche usarlo isSignalActive = true. Si noti che ciò si applica principalmente ai descrittori che si completano in modo chiaro e si escludono a vicenda. Attivo / Inattivo si adatta al conto. L'alta tensione non significa che "non alta tensione" può ad esempio significare "bassa tensione" o "bassa o media tensione". In quest'ultimo caso, l'argomento booleano ovviamente non si applica. Nel primo, lo fa.
Flater

2

Mi piace "set" / "clear", ma fai attenzione all'ambiguità nel tuo fraseggio. Come sottolinea Filip , "impostare la variabile bool" potrebbe significare scrivere un valore sulla variabile. Ma "impostare la bandiera" è più chiaro.


Terminologia correlata: la trasformazione di un numero intero 0 / diverso da zero in un valore 0/1 viene definita "booleanizzante" .

Se in realtà usi il valore 0/1 come numero intero (anziché come vero / falso bool), potresti voler usare quella parola. Altrimenti probabilmente verrà fuori solo se stai parlando del costo delle operazioni che il compilatore deve eseguire. (O se stai eseguendo la vettorializzazione manuale con un confronto SIMD per produrre tutti i bit zero / tutto-uno in ciascun elemento vettoriale).

In C e C ++, un boolpuò implicitamente riconvertirsi in un numero intero come 0 o 1 e nelle implementazioni normali boolè memorizzato come un valore a un byte che è 0 o 1 (non solo qualsiasi valore diverso da zero). Ciò consente un efficiente a && b, ma in pratica molti compilatori C hanno perso le ottimizzazioni .


bool booleanize(int a) { return a; }   // C++

Tale funzione viene compilata in più istruzioni (escluso il ret) sulla maggior parte delle architetture. (MIPS è un'eccezione interessante, con istruzioni di comparazione in registro invece di un registro separato flag / codice condizione). nell'esploratore del compilatore Godbolt per x86-64, MIPS e ARM thumb , possiamo vedere che la versione x86-64 è:

    test    edi, edi    # set flags according to   a & a
    setne   al
    ret                 # return value in AL, the low byte of RAX

Scusate questo esempio di ciò che è stato booleano un po 'grande / fuori tema!


0

Penso che "impostato Foobarsu vero" e "impostato Foobarsu falso" siano semplici e concisi. Non credo ci siano parole individuali per quelle frasi e quando devi essere sia tecnico che preciso, a volte è meglio essere disposti a essere un po 'prolisso piuttosto che rischiare di confondere il tuo pubblico.


-1

"Impostazione" è il modo corretto di descrivere l'atto di assegnare un valore a una variabile. Se volessi diventare pedante a riguardo, potresti chiamarlo "incarico", ma "set" è molto diffuso. In effetti, è Java idiomatico per scrivere setFoobar()(e getFoobar()) metodi per eseguire l'assegnazione. C # fa un passo avanti con gete setle definizioni delle proprietà.

Per quanto riguarda il tuo secondo punto sull'uso di "trueify" e "falsify" in "implicitamente, dì ai miei ascoltatori che abbiamo a che fare con una variabile booleana", stai già dicendo ai tuoi ascoltatori che la variabile è booleana quando dici:

Ho impostato Foobarsutrue


1
Lo "standard" in Java per i metodi che restituiscono proprietà booleane è in realtàisFoobar()
JimmyJames

-1

Assert o Retract possono anche essere usati, molto spesso quando si parla di proposizioni piuttosto che di semplici variabili, ad esempio in Prolog. Di solito ci sono termini diversi a seconda di ciò che rappresenta il booleano, piuttosto che un termine generale per tutte le lingue che hanno valori booleani (imposta / cancella flag o bit, abilita / disabilita dispositivo o modalità, asserisci / ritira proposizione, probabilmente di più).


Concordo con asserire , tranne che per un programmatore che significa già qualcos'altro (ad esempio lanciare un'eccezione se l'espressione non è già vera).
ChrisW,

@ChrisW Non so cosa pensi che siano le persone che programmano Prolog se non programmatori, ma è stato usato in Prolog nel 1972, quindi è la macro C che ha cambiato il significato esistente.
Pete Kirkham,

-1

Cambiare il valore di un valore booleano da truea false, o viceversa si chiama negazione .

Per impostare un valore booleano su falsesi dice che falsifica il valore booleano. Ti capirei se dicessi "verità", tuttavia, questo non suona bene. Non sono sicuro di quale sia il verbo per fare qualcosa true, quindi potrebbe essere giusto.

Aspetterei che arrivi una persona con una risposta migliore prima di iniziare a usare "verità" volenti o nolenti.


1
Il problema qui è che potresti usare i termini negazione , falsificazione , ma utilizzerei rispettivamente attiva e disattiva / ripristina / cancella . In effetti fino alla lettura di questa domanda, non mi sarei mai imbattuto in una falsificazione . Forse sto solo invecchiando e non sono aggiornato con i termini alla moda di quest'anno :)
David Arno,

7
'falsificare' ha un significato in inglese che non si allinea realmente con il tuo uso per variabili booleane; Se mi dicessi che stai "falsificando" le tue variabili, potrei capire cosa stai cercando di dire, ma prima analizzerei ciò mentre provi a dirmi che stai mentendo sui valori che hanno.
Cubico

1
L'opposto dell'IMO di "falsificare" sarebbe "affermare", in inglese, ma quello ("affermare") dà l'impressione sbagliata a un programmatore.
ChrisW,

-3

Un booleano è un equivalente di uno SPST (singolo polo, singolo tiro) interruttore elettrico: uno gira su o off .


2
"Attiva la donevariabile" o "La errorvariabile è disattivata" entrambi suonano un po 'fuori, almeno per me. Le alternative suggerite da altre risposte sembrano più prevalenti: "Imposta la donevariabile / bool / flag [su true]" o "Il errorflag viene cancellato".
Sebi
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.