Есть ли термины «истинный», «ложный» и переключающий логическое значение? [закрыто]


23

Допустим, я пытаюсь описать свой код на техническом совещании.

Сначала я установил логическое foobarзначениеtrue

а также

Во-вторых, я установил логическое foobarзначениеfalse

кажется немного многословным Если foobarбы меня переключили, я бы, наверное, сказал:

В-третьих, я переключаю foobar

Подразумевается, что это логическое значение. Так я не должен быть в состоянии:

В- четвертых, я Truthify Foobar

а также

В-пятых, я фальсифицирую фубар

Что также косвенно скажет моим слушателям, что мы имеем дело с булевой переменной? Есть ли подходящая терминология для этого? Спасибо.


16
«Я установил для foobar значение true / false» - это не то, что многословно, и очевидно, что это глупость. «Toggle» довольно понятен слушателям, IMO.
Филипп Милованович

8
«Во-первых, я установил логическое значение foobar на true, а во-вторых, я установил логическое значение foobar на false». Разве вы не могли просто установить это как ложное? ;)
Дэвид Арно

2
Я всегда думал, что это называется переворотом, но, видимо , это термин для битов , а не bools
e_i_pi

16
Я бы прочитал фальсификацию как эквивалент создания подделки, а не установки значения в false.
CodesInChaos

6
Вы уверены, что должны описать свой код на таком низком уровне? Конечно, если кто-то хочет такое низкоуровневое описание, он просто прочитает код. Я не говорю , что нет и не повод , чтобы использовать такую терминологию, но я бы ожидать , что это будет редко.
Dukeling

Ответы:


52
  • Установка значения в true - это установка
  • Установка его в false очищает его.
  • Изменение текущего значения переключает его.

Конечно, вы также можете использовать «установив его на истинное» и «установив на ложное» .


10
Я не связываю установку значения со значением false как очистку. Очистка для меня означает: ни правда, ни ложь.
Питер Б

49
@PieterB: Ну, это зависит от контекста; если мы говорим о булевом флаге, то «установка» и «очистка» флага - довольно распространенная терминология.
Филипп Милованович

7
@ FilipMilovanović В контексте переменных установка переменной означает присвоение значения указанной переменной, в контексте булевой переменной это значение может быть истинным или ложным. Было бы странно сказать: эй, установка переменной означает присвоение ей значения ... за исключением случаев, когда она является булевой переменной, тогда фактически, когда мы ее устанавливаем, мы имеем в виду, что мы присваиваем значение: "true"
Pieter B

6
@PieterB Если это может быть «ни истина, ни ложь», то это не двоичное булево значение (о чем большинство людей думают, когда они слышат слово), а троичная истина / ложь / неопределенная вещь. При этом терминология set / clear происходит от флагов. Не все логические переменные являются флагами, поэтому терминология не подходит для многих случаев использования.
Куб

7
@PieterB: Да - было бы странно сказать «установить переменную bool» и ожидать, что все поймут, что это означает «установить ее в значение true»; но если он представляет флаг, то «установить флаг» является чем-то обычно используемым и означает установить значение bool, представляющего флаг, равным true (или бит, представляющий флаг, равным 1). (PS Но ответ immibis не принимает это во внимание.)
Филипп Милованович

66

Если это вообще возможно, вместо того, чтобы фокусироваться на логическом значении, вы должны попытаться описать, что оно представляет. Некоторые примеры:

  • сервис? старт / остановка вместо старт = истина / ложь
  • спецэффект в игровом движке? вкл выкл
  • электрический сигнал? Набор / сброс
  • ...

Таким образом, вы будете говорить в более естественных терминах. И поэтому на собрании вместо «правдивого foobar, а затем фальсификации» вы просто «запустите foobar, а затем остановите его» (если foobar действительно является службой).

Когда вам действительно нужно поговорить о логическом значении, вы можете выбрать «установить / сбросить» или «установить в значение true» и «установить в значение false». "Toggle" звучит довольно приятно во всех контекстах.

И если вы работаете в булевом магазине (что бы это ни значило), вам, вероятно, нужно больше слов, чем то, что может предложить словарь. В этом случае истина и фальсификация - это просто части вашего микропоговора .


16
Согласитесь ... boolean - это реализация, которая моделирует то, о чем вы ДЕЙСТВИТЕЛЬНО говорите ... так что говорите об этом!
Maybe_Factor

2
Я не люблю говорить о том, чтобы установить логическое значение как делающее это правдой. Потому что, как я работаю с переменными, они начинаются неинициализированными, то есть, по сути, вы еще не можете их использовать, и установка переменной (true или false) является инициализацией. Если всегда задавать значение true, это может привести к путанице.
Питер Б

1
Кроме того, это использование терминологии также переводится в код; Часто - не всегда, конечно, - лучше использовать двухзначное перечисление вместо встроенного логического типа; signal = HighVoltageили signal = ActiveИМХО намного понятнее signal = true.
Куб

Обратите внимание, что правильно названное логическое свойство / переменная всегда сразу показывает имя, которое вы должны использовать для значений. Подумайте isStarted, isActive, isCaseSensitive, mockConnection, ... @PieterB: Я частично согласен с вами. «Установить логическое значение» по своей сути не означает установить его в значение true. Тем не менее, «Установить isActiveфлаг» может быть разумно истолковано как означающее установку его в значение «истина».
Флатер

1
@Cubic: я не согласен. Помимо дальнейшего расширения, двоичное перечисление кажется ненужным. signal = trueЭто действительно не ясно, но если вы собираетесь использовать, signal = Activeто вы могли бы также использовать isSignalActive = true. Обратите внимание, что это относится главным образом к дескрипторам, которые являются явно взаимоисключающими и точными дополнениями. Активный / Неактивный отвечает всем требованиям. Высокое напряжение не имеет, поскольку «не высокое напряжение» может означать, например, «низкое напряжение» или «низкое или среднее напряжение». В последнем случае логический аргумент явно не применяется. В первом случае это так.
Флатер

2

Мне нравится «установить» / «очистить», но будьте осторожны с неоднозначностью в вашей фразе. Как указывает Филип , «установка переменной bool» может означать запись некоторого значения в переменную. Но «установка флага» более понятна.


Связанная терминология: преобразование 0 / ненулевого целого числа в значение 0/1 называется «логическим значением» .

Если вы на самом деле используете значение 0/1 как целое число (а не как true / false bool), вы можете использовать это слово. В противном случае он, вероятно, появится, только если вы говорите о стоимости операций, которые должен выполнить компилятор. (Или, если вы вручную векторизуете с помощью SIMD, сравните, чтобы получить все ноль / все-один бит в каждом элементе вектора).

В C и C ++ a boolможет неявно преобразовывать обратно в целое число как 0 или 1, а в обычных реализациях boolхранится как однобайтовое значение, равное 0 или 1 (не просто любое ненулевое значение). Это позволяет эффективно a && b, но на практике многие компиляторы C пропустили оптимизацию .


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

Эта функция компилируется в несколько инструкций (не включая ret) на большинстве архитектур. (MIPS - интересное исключение, имеющее инструкции сравнения в регистр вместо отдельного регистра флага / кода условия). в проводнике компилятора Godbolt для большого пальца x86-64, MIPS и ARM мы можем увидеть версию x86-64:

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

Извините, этот пример того, что логическое выражение получилось немного большим / не по теме!


0

Я думаю, что «установить Foobarв истину» и «установить Foobarв ложь» являются прямыми и краткими. Я не верю, что есть отдельные слова для этих фраз, и когда вам нужно быть технически и точным, иногда лучше быть готовым быть немного словесным, чем рисковать смущать вашу аудиторию.


-1

«Настройка» - это правильный способ описания действия по присвоению значения переменной. Если вы хотите получить педантичный об этом, вы могли бы назвать это «назначение», но «набор» является очень распространенным. На самом деле, это идиоматическая Java - писать setFoobar()getFoobar()) методы для выполнения присваивания. C # делает шаг дальше с getи setопределения собственности.

Что касается вашего второго пункта об использовании «trueify» и «falsify» to «посредством импликации, скажите моим слушателям, что мы имеем дело с булевой переменной», вы уже говорите своим слушателям, что переменная «Boolean», когда вы говорите:

Я настроен Foobarнаtrue


1
«Стандарт» в Java для методов, которые возвращают логические свойства, на самом делеisFoobar()
JimmyJames

-1

Можно также использовать Assert или Retract , чаще всего, когда речь идет о предложениях, а не о простых переменных, например, в Prolog. Обычно существуют разные термины, зависящие от того, что представляет логическое значение, а не один общий термин для всех языков, имеющих логические значения (установить / очистить флаг или бит, включить / отключить устройство или режим, утверждение / убрать предложение, возможно, больше).


Я бы согласился с утверждением , за исключением того, что для программиста это уже означает что-то другое (например, выдает исключение, если выражение не является истинным).
ChrisW

@ChrisW Я не знаю, что вы думаете о людях, которые программируют Prolog, если не программисты, но он использовался в Prolog в 1972 году, так что именно макрос C изменил существующее значение.
Пит Киркхэм

-1

Изменение логического значения с trueна falseили наоборот называется отрицанием .

Чтобы установить значение логического значения, falseсчитается фальсификацией логического значения. Я бы понял вас, если бы вы сказали «правда», однако это звучит неправильно. Я не уверен, что глагол для того true, чтобы сделать что-то , так что это может быть правильно.

Я бы подождал, пока кто-нибудь с лучшим ответом придет, прежде чем вы начнете использовать «правду» волей-неволей.


1
Проблема здесь заключается в том , что вы можете использовать термины отрицая , фальсификацию , но я хотел бы использовать тумблер и сброс / очистки соответственно. На самом деле, пока я не прочитал этот вопрос, я никогда не сталкивался с фальсификацией . Может быть, я только старею, и я не в курсе модных условий этого года :)
Дэвид Арно

7
«falsify» имеет значение в английском языке, которое на самом деле не соответствует вашему использованию булевых переменных; Если бы вы сказали мне, что вы «фальсифицируете» свои переменные, я мог бы понять, что вы пытаетесь сказать, но я бы сначала проанализировал это, когда вы пытаетесь сказать мне, что вы лжете о значениях, которые они имеют.
Куб

1
IMO противоположность «фальсификации» будет «утверждать» на английском языке, но это («утверждать») производит неправильное впечатление на программиста.
ChrisW

-3

Логическое является эквивалентом SPST (однополюсный, одного броска) электрический выключатель: один поворачивает его на или прочь .


2
«Включите doneпеременную» или « errorПеременная выключена», оба звучат немного выключенными, по крайней мере, для меня. Альтернативы, предложенные другими ответами, кажутся более распространенными - «Установите doneпеременную / bool / flag [в true]» или « errorФлаг очищен».
Себи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.