Czy istnieje terminologia dotycząca „prawdziwego”, „fałszywego” i przełączania wartości logicznej? [Zamknięte]

23

Powiedzmy, że próbuję opisać mój kod na spotkaniu technicznym.

Najpierw ustawiłem wartość logiczną foobarnatrue

i

Po drugie, ustawiłem wartość logiczną foobarnafalse

wydaje się trochę niewygodny. Gdyby foobarzostał przełączony, prawdopodobnie powiedziałbym:

Po trzecie, przełączam foobar

Poprzez implikację tutaj wiesz, że to boolean. Więc nie powinienem móc:

Po czwarte, ja Truthify foobar

i

Po piąte, I Falsify foobar

Co również przez domniemanie powie moim słuchaczom, że mamy do czynienia ze zmienną boolowską? Czy istnieje odpowiednia terminologia w tym zakresie? Dzięki.

Akiva
źródło
16
„Ustawiłem foobar na prawda / fałsz” nie jest aż tak trudne i oczywiste, że to bool. „Toggle” jest dość jasne dla słuchaczy, IMO.
Filip Milovanović
8
„Po pierwsze, ustawiłem foobar logiczny na true, a po drugie, ustawiłem foobar boolowski na false”. Czy nie mógłbyś po prostu ustawić go jako fałsz? ;)
David Arno
2
Zawsze myślałem, że to się nazywa przerzucanie, ale najwyraźniej jest to określenie bitów , a nie
booli
16
Czytałem Fałszowanie za równoważne tworząc fałszerstwa i nie ustawiając wartość na false.
CodesInChaos
6
Czy na pewno chcesz opisać swój kod na tak niskim poziomie? Z pewnością, jeśli ktoś chce tak niskiego poziomu opisu, po prostu przeczytałby kod. Nie twierdzę, że nigdy nie ma powodu, aby używać takiej terminologii, ale spodziewałbym się, że będzie to rzadkie.
Dukeling

Odpowiedzi:

52
  • Ustawienie wartości true oznacza ustawienie tej wartości
  • Ustawienie wartości false powoduje wyczyszczenie .
  • Zmiana bieżącej wartości jest przełączana .

Możesz także użyć opcji „ustawienie true” i „ustawienie go na false” .

użytkownik253751
źródło
10
Nie koreluję ustawiania wartości na false jako jej wyczyszczenie. Wyjaśnienie dla mnie oznacza: ani prawda, ani fałsz.
Pieter B
49
@PieterB: Cóż, to zależy od kontekstu; jeśli mówimy o flagi boolowskiej, to „ustawianie” i „czyszczenie” flagi jest dość powszechną terminologią.
Filip Milovanović
7
@ FilipMilovanović W kontekście zmiennych ustawienie zmiennej oznacza przypisanie wartości do tej zmiennej, w kontekście zmiennej boolowskiej ta wartość może być prawdziwa lub fałszywa. Byłoby dziwnie powiedzieć: hej, ustawienie zmiennej oznacza przypisanie jej wartości ... z wyjątkiem sytuacji, gdy jest to zmienna boolowska, a właściwie kiedy ją ustawiamy, mamy na myśli, że przypisujemy wartość: „true”
Pieter B
6
@PieterB Jeśli nie może być „ani prawdą, ani fałszem”, to nie jest to binarna wartość logiczna (o czym myśli większość ludzi, gdy słyszy to słowo), ale trójskładna prawda / fałsz / nieokreślona rzecz. Biorąc to pod uwagę, terminologia set / clear pochodzi od flag. Nie wszystkie zmienne logiczne są flagami, więc terminologia jest nieodpowiednia w wielu przypadkach użycia.
Cubic
7
@PieterB: Tak - dziwnie byłoby powiedzieć „ustaw zmienną bool” i oczekiwać, że wszyscy zrozumieją, że oznacza „ustaw to na prawdę”; ale jeśli reprezentuje flagę, wówczas „ustaw flagę” jest czymś powszechnie używanym i oznacza ustawienie wartości bool reprezentującej flagę na true (lub bit reprezentujący flagę na 1). (PS Ale odpowiedź immibis nie bierze tego pod uwagę.)
Filip Milovanović
66

Jeśli to w ogóle możliwe, zamiast skupiać się na wartości logicznej, powinieneś spróbować opisać, co ona reprezentuje. Kilka przykładów:

  • serwis? start / stop zamiast start = true / false
  • efekt specjalny w silniku gry? on / off
  • sygnał elektryczny? ustawić / zresetować
  • ...

W ten sposób będziesz mówić w bardziej naturalny sposób. I tak na spotkaniu zamiast „prawdy foobar, a następnie sfałszowania go”, po prostu „zaczniecie foobar, a potem go zatrzymacie” (jeśli rzeczywiście foobar jest usługą).

Gdy naprawdę potrzebujesz mówić o wartości logicznej, możesz przejść do „set / reset”, „set to true” i „set to false”. „Toggle” brzmi całkiem nieźle we wszystkich kontekstach.

A jeśli pracujesz w sklepie boolowskim (cokolwiek to może znaczyć), prawdopodobnie potrzebujesz więcej słów niż oferuje słownik. W takim przypadku prawdomówność i fałszowanie są po prostu częściami twojego mikrospeaka .


źródło
16
Muszę się zgodzić ... boolean to implementacja, która modeluje to, o czym NAPRAWDĘ mówisz ... więc mów o tym zamiast tego!
Może_Faktor
2
Nie lubię mówić o ustawianiu wartości logicznej jako na spełnianie jej. Ponieważ sposób, w jaki pracuję ze zmiennymi, zaczynają się od niezainicjowania, co oznacza, że ​​zasadniczo nie możesz ich jeszcze użyć, a ustawianie zmiennej (prawda lub fałsz) jest inicjalizacją. Gdyby ustawienie zawsze oznaczało „prawda”, spowodowałoby zamieszanie.
Pieter B
1
Również to użycie terminologii przekłada się również na kod; Często - nie zawsze oczywiście - lepiej jest używać wyliczenia dwóch wartości zamiast wbudowanego typu logicznego; signal = HighVoltagelub signal = Activejest znacznie jaśniejsze niż IMHO signal = true.
Cubic
Zauważ, że odpowiednio nazwana właściwość / zmienna boolean zawsze natychmiast ujawni nazwę, której powinieneś używać dla wartości. Pomyśl isStarted, isActive, isCaseSensitive, mockConnection, ... @PieterB: I częściowo zgadzam się z tobą. „Set boolean” nie oznacza z natury ustawiania go na true. Jednak „Ustaw isActiveflagę” można rozsądnie zinterpretować w ten sposób, że oznacza ustawienie wartości true.
Flater
1
@Cubic: Nie zgadzam się. Pomijając przyszłą ekspansję, binarne wyliczenie wydaje się niepotrzebne. signal = truejest wprawdzie niejasne, ale jeśli masz zamiar użyć signal = Active, równie dobrze możesz użyć isSignalActive = true. Należy pamiętać, że dotyczy to głównie deskryptorów, które wyraźnie się wykluczają i są dokładnymi uzupełnieniami. Aktywny / nieaktywny pasuje do rachunku. Wysokie napięcie nie, ponieważ „niezbyt wysokie napięcie” może np. Oznaczać „niskie napięcie” lub „niskie lub średnie napięcie”. W drugim przypadku argument boolowski oczywiście nie ma zastosowania. W pierwszym przypadku tak.
Flater
2

Lubię „set” / „clear”, ale bądź ostrożny z dwuznacznością w swoim frazowaniu. Jak zauważył Filip , „ustaw zmienną bool” może oznaczać zapisanie pewnej wartości do zmiennej. Ale „ustawianie flagi” jest bardziej jasne.


Terminologia pokrewna: przekształcenie liczby całkowitej 0 / niezerowej w wartość 0/1 nazywa się „booleanizing” .

Jeśli faktycznie używasz wartości 0/1 jako liczby całkowitej (zamiast true / false bool), możesz chcieć użyć tego słowa. W przeciwnym razie prawdopodobnie pojawi się tylko wtedy, gdy mówisz o koszcie operacji, które musi wykonać kompilator. (Lub jeśli ręcznie wektoryzujesz za pomocą porównania SIMD w celu uzyskania bitów zero-zero / all-one w każdym elemencie wektorowym).

W C i C ++ a boolmoże domyślnie przekonwertować z powrotem na liczbę całkowitą jako 0 lub 1, a na normalnych implementacjach booljest przechowywana jako wartość jednobajtowa, która jest równa 0 lub 1 (nie tylko dowolna wartość niezerowa). Pozwala to na wydajne a && b, ale w praktyce wiele kompilatorów C nie przeszło optymalizacji .


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

Ta funkcja kompiluje się z wieloma instrukcjami (bez instrukcji ret) w większości architektur. (MIPS jest interesującym wyjątkiem, posiadającym instrukcje porównania do rejestru zamiast oddzielnego rejestru znacznik / kod stanu). w eksploratorze kompilatorów Godbolt dla x86-64, MIPS i ARM thumb możemy zobaczyć, że wersja x86-64 to:

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

Przepraszam, ten przykład tego, co booleanizacja ma trochę duży / nie na temat!

Peter Cordes
źródło
0

Myślę, że „ustawione Foobarna prawdę” i „ustawione Foobarna fałsz” są proste i zwięzłe. Nie wydaje mi się, żeby te frazy zawierały pojedyncze słowa, a kiedy trzeba być zarówno technicznym, jak i precyzyjnym, czasem lepiej jest być trochę nieprzyjemnym niż ryzykować zamieszanie odbiorców.

Kevin - Przywróć Monikę
źródło
-1

„Ustawienie” jest poprawnym sposobem opisania aktu przypisywania wartości zmiennej. Jeśli chcesz się tym zająć, możesz nazwać to „przydziałem”, ale „zestaw” jest bardzo rozpowszechniony. W rzeczywistości idiomatyczną Javą jest pisanie setFoobar()(i getFoobar()) metod wykonywania przypisań. C # idzie o krok dalej z definicjami geti setwłaściwościami.

Jeśli chodzi o twój drugi punkt na temat używania „prawda” i „fałsz” na „poprzez implikację, powiedz moim słuchaczom, że mamy do czynienia ze zmienną boolowską”, już mówisz swoim słuchaczom, że zmienna jest logiczna, kiedy mówisz:

Ustawiłem Foobarnatrue

Harrison Paine
źródło
1
„Standardem” w Javie dla metod, które zwracają właściwości logiczne, jest w rzeczywistościisFoobar()
JimmyJames
-1

Można również użyć Asercji lub Wycofania , najczęściej mówiąc o zdaniach, a nie prostych zmiennych, na przykład w Prologu. Zwykle istnieją różne terminy w zależności od tego, co reprezentuje wartość logiczna, zamiast jednego ogólnego terminu dla wszystkich języków posiadających wartości logiczne (ustaw / wyczyść flagę lub bit, włącz / wyłącz urządzenie lub tryb, zapewnij / wycofaj propozycję, prawdopodobnie więcej).

Pete Kirkham
źródło
Zgadzam się z twierdzeniem , z wyjątkiem tego, że dla programisty oznacza to już coś innego (np. Zgłoszenie wyjątku, jeśli wyrażenie nie jest już prawdziwe).
ChrisW
@ChrisW Nie wiem, co myślisz, że ludzie, którzy programują Prolog, jeśli nie są programistami, to został użyty w Prologu w 1972 roku, więc to makro C zmieniło istniejące znaczenie.
Pete Kirkham,
-1

Zmiana wartości logicznej z truena falselub odwrotnie nazywa się negacją .

Aby ustawić wartość boolean na, falsemówi się, że fałszuje wartość boolean. Zrozumiałbym cię, gdybyś powiedział „prawdę”, ale to nie brzmi dobrze. Nie jestem pewien, co to czasownik na zrobienie czegoś true, więc może być właściwe.

Poczekam na przyjście kogoś z lepszą odpowiedzią, zanim zaczniesz używać „prawdy” chcąc nie chcąc.

Sir Wumpus IV
źródło
1
Problem polega na tym, że możesz użyć terminów negujących , fałszujących , ale używałbym odpowiednio przełączania i resetowania / kasowania . W rzeczywistości do momentu przeczytania tego pytania nigdy nie spotkałem się z fałszowaniem . Może właśnie się starzeję i nie jestem na bieżąco z modnymi tegorocznymi warunkami :)
David Arno
7
„falsify” ma znaczenie w języku angielskim, które tak naprawdę nie jest zgodne z twoim użyciem zmiennych logicznych; Jeśli powiedziałeś mi, że „fałszujesz” swoje zmienne, mógłbym zrozumieć, co próbujesz powiedzieć, ale najpierw przeanalizuję to, próbując mi powiedzieć, że kłamiesz na temat ich wartości.
Cubic
1
IMO przeciwieństwem „fałszowania” byłoby „twierdzenie” po angielsku, ale to („twierdzenie”) wywołuje złe wrażenie dla programisty.
ChrisW
-3

Wartość logiczna jest równoważna SPST (jednobiegunowe, pojedynczy Throw) elektrycznego: jedna Okazuje się na lub poza .

Nicholas Carey
źródło
2
„Włącz donezmienną” lub „ errorZmienna jest wyłączona” oba brzmią nieco, przynajmniej dla mnie. Alternatywy sugerowane przez inne odpowiedzi wydają się bardziej powszechne - „Ustaw donezmienną / bool / flag [na true]” lub „ errorFlaga zostanie wyczyszczona”.
Sebi,