Gibt es eine Terminologie für „Wahr“, „Falsch“ und das Umschalten eines Booleschen? [geschlossen]

23

Nehmen wir an, ich versuche, meinen Code in einem technischen Meeting zu beschreiben.

Zuerst setze ich den Booleschen Wert foobarauftrue

und

Zweitens setze ich den Booleschen Wert foobarauffalse

scheint ein bisschen wortreich. Wenn foobarumgeschaltet wurde, könnte ich wahrscheinlich sagen,

Drittens schalte ich um foobar

Indem Sie hier implizieren, wissen Sie, dass es ein Boolescher Wert ist. Sollte ich nicht in der Lage sein:

Viertens wahrheitsgemäß ich foobar

und

Fünftens fälsche ich foobar

Was wird meinen Zuhörern auch implizit mitteilen, dass es sich um eine boolesche Variable handelt? Gibt es dafür die richtige Terminologie? Vielen Dank.

Akiva
quelle
16
"Ich habe foobar auf true / false gesetzt" ist nicht so wortreich und es ist offensichtlich, dass das ein Trottel ist. "Toggle" ist den Zuhörern ziemlich klar, IMO.
Filip Milovanović
8
"Erstens setze ich den Booleschen Wert auf true und zweitens setze ich den Booleschen Wert auf false". Könnten Sie es nicht einfach falsch eingestellt haben? ;)
David Arno
2
Ich dachte immer, es würde Flipping heißen, aber anscheinend ist das der Begriff für Bits und nicht für Bools
e_i_pi
16
Ich würde falsify so lesen, als würde man eine Fälschung erstellen und den Wert nicht auf false setzen.
CodesInChaos
6
Sind Sie sicher, dass Sie Ihren Code auf einem so niedrigen Niveau beschreiben sollen? Sicherlich, wenn jemand eine so einfache Beschreibung haben möchte, würde er einfach den Code lesen. Ich sage nicht, dass es nie einen Grund gibt, eine solche Terminologie zu verwenden, aber ich würde erwarten, dass es selten ist.
Dukeling

Antworten:

52
  • Wenn Sie einen Wert auf true setzen, wird dieser festgelegt
  • Wenn Sie ihn auf false setzen, wird er gelöscht .
  • Durch Ändern des aktuellen Werts wird dieser umgeschaltet .

Sie können natürlich auch "set it to true" und "set it to false" verwenden .

user253751
quelle
10
Ich korreliere nicht damit, einen Wert auf false zu setzen, sondern ihn zu löschen. Clearing bedeutet für mich: weder wahr noch falsch.
Pieter B
49
@PieterB: Nun, es kommt auf den Kontext an; Wenn es sich um eine Boolesche Flagge handelt, dann ist das Setzen und Löschen der Flagge eine recht gebräuchliche Terminologie.
Filip Milovanović
7
@ FilipMilovanović Im Kontext von Variablen bedeutet das Festlegen einer Variablen, dieser Variablen einen Wert zuzuweisen. Im Kontext einer booleschen Variablen kann dieser Wert wahr oder falsch sein. Es wäre seltsam zu sagen: Hey, eine Variable zu setzen bedeutet, ihr einen Wert zuzuweisen ... außer wenn es sich um eine boolesche Variable handelt, meinen wir, wenn wir sie setzen, den Wert "true"
Pieter B
6
@PieterB Wenn es "weder wahr noch falsch" sein kann, dann ist es kein binärer Boolescher Wert (woran die meisten Leute denken, wenn sie das Wort hören), sondern eine ternäre wahre / falsche / unbestimmte Sache. Davon abgesehen stammt die Set / Clear-Terminologie von Flags. Da nicht alle booleschen Variablen Flags sind, ist die Terminologie für viele Anwendungsfälle ungeeignet.
Cubic
7
@PieterB: Ja - es wäre seltsam zu sagen "set the bool variable" und zu erwarten, dass jeder versteht, dass dies "set it to true" bedeutet; Wenn es sich jedoch um ein Flag handelt, wird häufig "Flag setzen" verwendet. Dies bedeutet, dass der Wert des Bool, der das Flag darstellt, auf true gesetzt wird (oder das Bit, das das Flag darstellt, auf 1). (PS Aber die Antwort von immibis berücksichtigt das nicht.)
Filip Milovanović
66

Wenn möglich, anstatt sich auf den Booleschen Wert zu konzentrieren, sollten Sie versuchen zu beschreiben, was er darstellt. Einige Beispiele:

  • Ein Dienst? start / stop statt gestartet = wahr / falsch
  • ein Spezialeffekt in einer Game-Engine? an aus
  • ein elektrisches Signal? setzen / zurücksetzen
  • ...

Auf diese Weise würden Sie natürlicher sprechen. Und so würden Sie in Ihrer Besprechung einfach "foobar starten und dann stoppen", anstatt "foobar zu verfälschen" (wenn foobar tatsächlich ein Dienst ist).

Wenn Sie wirklich über einen Booleschen Wert sprechen müssen, können Sie mit "set / reset" oder "set to true" und "set to false" fortfahren. "Toggle" klingt in allen Zusammenhängen ganz nett.

Und wenn Sie in einem booleschen Geschäft arbeiten (was auch immer das bedeuten könnte), dann brauchen Sie wahrscheinlich mehr Wörter als das, was das Wörterbuch zu bieten hat. In diesem Fall sind Wahrheitsfindung und Fälschung nur Teile Ihrer Mikrosprechanlage .


quelle
16
Ich muss zustimmen ... Boolesch ist die Implementierung, die das modelliert, wovon Sie WIRKLICH sprechen ... also sprechen Sie stattdessen darüber!
Vielleicht_Faktor
2
Ich spreche nicht gerne davon, einen Booleschen Wert als wahr zu definieren. Weil die Art und Weise, wie ich mit Variablen arbeite, uninitialisiert beginnt, was bedeutet, dass Sie sie noch nicht verwenden können und das Setzen einer Variablen (wahr oder falsch) das Initialisieren ist. Wenn die Einstellung immer "wahr" bedeutet, würde dies zu Verwirrung führen.
Pieter B
1
Diese Terminologie wird auch in Code übersetzt. Es ist oft - natürlich nicht immer - besser, eine Zwei-Werte-Aufzählung anstelle des eingebauten Booleschen Typs zu verwenden. signal = HighVoltageoder signal = Activeist meiner Meinung nach viel klarer als signal = true.
Cubic
Beachten Sie, dass eine ordnungsgemäß benannte boolesche Eigenschaft / Variable immer sofort den Namen anzeigt, den Sie für die Werte verwenden sollten. Denken Sie an isStarted, isActive, isCaseSensitive, mockConnection, ... @PieterB: ich mit Ihnen teilweise zustimmen. "Setze den Booleschen Wert" bedeutet nicht, ihn auf true zu setzen. " isActiveFlag setzen" kann jedoch vernünftigerweise so interpretiert werden, dass es auf "wahr" gesetzt wird.
Flater
1
@ Cubic: Ich bin anderer Meinung. Abgesehen von zukünftigen Erweiterungen erscheint eine binäre Aufzählung unnötig. signal = trueist in der Tat nicht klar, aber wenn Sie verwenden werden, signal = Activedann könnten Sie genauso gut verwenden isSignalActive = true. Beachten Sie, dass dies hauptsächlich für Deskriptoren gilt, die sich eindeutig ausschließen und sich exakt ergänzen. Aktiv / Inaktiv passt auf die Rechnung. Hochspannung nicht, da "Nicht-Hochspannung" z. B. "Niederspannung" oder "Nieder- oder Mittelspannung" bedeuten könnte. Im letzteren Fall trifft das Boolesche Argument offensichtlich nicht zu. Im ersteren ist es so.
Flater
2

Ich mag "set" / "clear", aber achte auf Mehrdeutigkeiten in deiner Formulierung. Wie Filip betont, könnte "set the bool variable" bedeuten, dass ein bestimmter Wert in die Variable geschrieben wird. Aber "Setzen der Flagge" ist klarer.


Verwandte Terminologie: Das Umwandeln einer Ganzzahl von 0 / ungleich Null in einen Wert von 0/1 wird als "Booleanisierung" bezeichnet .

Wenn Sie den 0/1-Wert tatsächlich als Ganzzahl (statt als wahr / falsch bool) verwenden, möchten Sie möglicherweise dieses Wort verwenden. Andernfalls wird es wahrscheinlich nur angezeigt, wenn Sie über die Kosten der Operationen sprechen, die der Compiler ausführen muss. (Oder wenn Sie manuell mit einer SIMD-Karte vektorisieren, vergleichen Sie, um in jedem Vektorelement alle Nullen / Einsen-Bits zu erzeugen.)

In C und C ++ boolkann a implizit als 0 oder 1 zurück in eine Ganzzahl konvertiert werden und wird bei normalen Implementierungen boolals Ein-Byte-Wert gespeichert, der entweder 0 oder 1 ist (nicht irgendein Wert ungleich Null). Das ermöglicht effiziente a && b, aber in der Praxis haben viele C-Compiler Optimierungen verpasst .


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

Diese Funktion kompiliert retauf den meisten Architekturen mehrere Anweisungen (ohne die ). (MIPS sind eine interessante Ausnahme, da sie Anweisungen zum Vergleichen in das Register anstelle eines separaten Flag- / Bedingungscoderegisters enthalten). Im Godbolt-Compiler-Explorer für x86-64, MIPS und ARM sehen wir, dass die x86-64-Version wie folgt lautet:

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

Tut mir leid, dieses Beispiel dafür, was Boolesches ein wenig groß / falsch ist!

Peter Cordes
quelle
0

Ich denke, "set Foobarto true" und "set Foobarto false" sind einfach und prägnant. Ich glaube nicht, dass es einzelne Wörter für diese Phrasen gibt, und wenn Sie sowohl technisch als auch präzise sein müssen, ist es manchmal besser, bereit zu sein, ein wenig wortreich zu sein, als Ihr Publikum zu verwirren.

Kevin - Setzen Sie Monica wieder ein
quelle
-1

"Setting" ist die richtige Methode, um das Zuweisen eines Werts zu einer Variablen zu beschreiben. Wenn Sie pedantisch werden möchten, können Sie dies als "Zuweisung" bezeichnen, aber "Setzen" ist weit verbreitet. Tatsächlich ist es idiomatisch, Java- Methoden zu schreiben setFoobar()(und getFoobar()), um die Zuweisung durchzuführen. C # geht noch einen Schritt weiter mit getund setEigenschaftsdefinitionen.

In Bezug auf Ihren zweiten Punkt über die Verwendung von "wahrheitsgemäß" und "verfälschen", um "durch Implikation meinen Zuhörern mitzuteilen, dass es sich um eine boolesche Variable handelt", teilen Sie Ihren Zuhörern bereits mit, dass die Variable boolesch ist, wenn Sie sagen:

Ich machte mich Foobarantrue

Harrison Paine
quelle
1
Der 'Standard' in Java für Methoden, die boolesche Eigenschaften zurückgeben, ist tatsächlichisFoobar()
JimmyJames
-1

Assert oder Retract kann auch verwendet werden, meistens, wenn es sich um Aussagen handelt und nicht um einfache Variablen, z. B. in Prolog. Normalerweise gibt es unterschiedliche Begriffe, je nachdem, was der Boolesche Wert darstellt, und nicht nur einen allgemeinen Begriff für alle Sprachen mit Booleschen Werten (Flag oder Bit setzen / löschen, Gerät oder Modus aktivieren / deaktivieren, Satz aktivieren / zurücknehmen, wahrscheinlich mehr).

Pete Kirkham
quelle
Ich würde zustimmen behaupten , außer dass zu einem Programmierer das schon etwas anderes andere Mittel (zB Auslösen einer Ausnahme , wenn der Ausdruck nicht bereits wahr ist).
ChrisW
@ChrisW Ich weiß nicht, was Sie denken, Leute, die Prolog programmieren, sind, wenn nicht Programmierer, aber es wurde 1972 in Prolog verwendet, also hat das C-Makro die bestehende Bedeutung geändert.
Pete Kirkham
-1

Das Ändern eines Booleschen Werts von truenach falseoder umgekehrt wird als Negieren bezeichnet .

Das Setzen eines Booleschen Werts auf falsewird als Verfälschung des Booleschen Werts bezeichnet . Ich würde dich verstehen, wenn du "wahrheitsgemäß" sagst, aber das klingt nicht richtig. Ich bin mir nicht sicher, was das Verb für etwas ist true, also könnte es richtig sein.

Ich würde auf jemanden mit einer besseren Antwort warten, bevor Sie beginnen, "wahrheitsgemäß" zu verwenden.

Sir Wumpus IV
quelle
1
Das Problem hierbei ist, dass Sie die Begriffe " Negieren" und " Verfälschen" verwenden können, " Umschalten" und " Zurücksetzen / Löschen" . In der Tat, bis ich diese Frage gelesen habe, bin ich nie auf Fälschung gestoßen . Vielleicht werde ich nur alt und ich bin nicht auf dem neuesten Stand mit den diesjährigen Trendbegriffen :)
David Arno
7
'falsify' hat eine Bedeutung in der englischen Sprache, die nicht wirklich mit Ihrer Verwendung für boolesche Variablen übereinstimmt. Wenn Sie mir gesagt , du bist „fälschen“ Ihre Variablen Ich könnte verstehen , was Sie sagen wollen, aber ich würde zuerst Parse dass , wie Sie versuchen , mir zu sagen , dass Sie über die Werte lügst sie haben.
Cubic
1
IMO das Gegenteil von "falsifying" wäre "asserting" auf Englisch, aber das ("assert") vermittelt einem Programmierer den falschen Eindruck.
ChrisW
-3

Ein Boolescher Wert entspricht einem SPST-Schalter (Single Pole, Single Throw): Man schaltet ihn ein oder aus .

Nicholas Carey
quelle
2
" doneVariable einschalten" oder "Die errorVariable ist ausgeschaltet" klingen beide ein bisschen aus, zumindest für mich. Alternativen, die von anderen Antworten vorgeschlagen wurden, scheinen häufiger vorzukommen - "Setzen Sie die doneVariable / bool / flag [auf true]" oder "Das errorFlag wird gelöscht."
Sebi