Тип данных Boolean (bool
) может быть одним из двух значений:true илиfalse. Логические значения используются в программировании для сравнения и управления потоком программы.
Логические значения представляют значения истинности, которые связаны с логической ветвью математики, которая предоставляет алгоритмы в информатике. Слово Boolean, названное в честь математика Джорджа Буля, всегда начинается с заглавной буквыB
.
Тип данных в Go для Boolean -bool
, все в нижнем регистре. Значенияtrue
иfalse
всегда будут в нижнем регистреt
иf
соответственно, поскольку они являются специальными значениями в Go.
В этом руководстве будут рассмотрены основы, необходимые для понимания того, как работает тип данныхbool
, включая логическое сравнение, логические операторы и таблицы истинности.
Операторы сравнения
В программированииcomparison operators используются для сравнения значений и оценки до единственного логического значения, равного истинному или ложному.
В таблице ниже показаны операторы логического сравнения.
оператор | Что это значит |
---|---|
== |
Равно |
!= |
Не равно |
< |
Меньше, чем |
> |
Больше чем |
⇐ |
Меньше или равно |
>= |
Больше или равно |
Чтобы понять, как работают эти операторы, давайте назначим два целых числа двум переменным в программе Go:
x := 5
y := 8
В этом примере, посколькуx
имеет значение5
, оно меньше, чемy
, которое имеет значение8
.
Используя эти две переменные и связанные с ними значения, давайте рассмотрим операторы из предыдущей таблицы. В этой программе вы попросите Go распечатать, оценивает ли каждый оператор сравнения значение true или false. Чтобы лучше понять этот вывод, вы также должны напечатать Go, чтобы показать вам, что он оценивает:
package main
import "fmt"
func main() {
x := 5
y := 8
fmt.Println("x == y:", x == y)
fmt.Println("x != y:", x != y)
fmt.Println("x < y:", x < y)
fmt.Println("x > y:", x > y)
fmt.Println("x <= y:", x <= y)
fmt.Println("x >= y:", x >= y)
}
Outputx == y: false
x != y: true
x < y: true
x > y: false
x <= y: true
x >= y: false
Следуя математической логике, Go оценил следующее из выражений:
-
5 (
x
) равно 8 (y
)? false -
5 не равно 8? trueс
-
5 меньше 8? trueс
-
5 больше 8? falseс
-
5 меньше или равно 8? trueс
-
5 не меньше или равно 8? falseс
Хотя здесь были использованы целые числа, вы могли бы заменить их значениями с плавающей точкой.
Строки также могут использоваться с логическими операторами. Они чувствительны к регистру, если вы не используете дополнительный строковый метод.
Вы можете посмотреть, как строки сравниваются на практике:
Sammy := "Sammy"
sammy := "sammy"
fmt.Println("Sammy == sammy: ", Sammy == sammy)
OutputSammy == sammy: false
СтрокаSammy
не равна строкеsammy
, потому что они не совсем то же самое; один начинается с верхнего регистраS
, а другой - с нижнего регистраs
. Но если вы добавите другую переменную, которой присвоено значениеSammy
, тогда они будут оцениваться как равные:
Sammy := "Sammy"
sammy := "sammy"
alsoSammy := "Sammy"
fmt.Println("Sammy == sammy: ", Sammy == sammy)
fmt.Println("Sammy == alsoSammy", Sammy == alsoSammy)
OutputSammy == sammy: false
Sammy == alsoSammy true
Вы также можете использовать другие операторы сравнения, включая>
и<
, для сравнения двух строк. Go сравнивает эти строки лексикографически, используя значения символов ASCII.
Вы также можете оценить логические значения с помощью операторов сравнения:
t := true
f := false
fmt.Println("t != f: ", t != f)
Outputt != f: true
Предыдущий блок кода оценил, чтоtrue
не равноfalse
.
Обратите внимание на разницу между двумя операторами=
и==
.
x = y // Sets x equal to y
x == y // Evaluates whether x is equal to y
Первый=
- это оператор присваивания, который устанавливает одно значение равным другому. Второй,==
, является оператором сравнения и оценивает, равны ли два значения.
Логические Операторы
Есть два логических оператора, которые используются для сравнения значений. Они оценивают выражения до логических значений, возвращая либоtrue
, либоfalse
. Этими операторами являются&&
,||
и!
, они определены в списке ниже:
-
&& (
x && y
) - операторand
. Это правда, если оба утверждения верны. -
|| (
x || y
) - операторor
. Это правда, если хотя бы одно утверждение верно. -
! (
!x
) - операторnot
. Это верно, только если утверждение ложно.
Логические операторы обычно используются для оценки того, являются ли два или более выражения истинными или нет. Например, они могут быть использованы для определения того, проходит ли оценка и что студент зарегистрирован в курсе, и если оба случая верны, то студенту будет назначена оценка в системе. Другим примером может быть определение того, является ли пользователь действительным активным клиентом интернет-магазина, на основании того, имели ли они кредит магазина или совершили покупку за последние 6 месяцев.
Чтобы понять, как работают логические операторы, давайте оценим три выражения:
fmt.Println((9 > 7) && (2 < 4)) // Both original expressions are true
fmt.Println((8 == 8) || (6 != 6)) // One original expression is true
fmt.Println(!(3 <= 1)) // The original expression is false
Outputtrue
true
true
В первом случаеfmt.Println((9 > 7) && (2 < 4))
, как9 > 7
, так и2 < 4
необходимо было оценить как истинное, поскольку использовался операторand
.
Во втором случае,fmt.Println((8 == 8) || (6 != 6))
, поскольку8 == 8
оценивается как истина, не имеет значения, что6 != 6
оценивается как ложное, поскольку использовался операторor
. Если бы вы использовали операторand
, это было бы false.
В третьем случаеfmt.Println(!(3 <= 1))
операторnot
отменяет ложное значение, возвращаемое3 <=1
.
Давайте заменим числа на целые и нацелимся на ложные оценки:
fmt.Println((-0.2 > 1.4) && (0.8 < 3.1)) // One original expression is false
fmt.Println((7.5 == 8.9) || (9.2 != 9.2)) // Both original expressions are false
fmt.Println(!(-5.7 <= 0.3)) // The original expression is true
В этом примере:
-
and
должно иметь хотя бы одно ложное выражение, оцениваемое как ложное. -
Для
or
оба выражения должны иметь значение false. -
Внутреннее выражение
!
должно быть истинным, чтобы новое выражение оценивалось как ложное.
Если эти результаты кажутся вам неясными, просмотрите несколькоtruth tables для дальнейшего уточнения.
Вы также можете писать составные операторы, используя&&
,||
и!
:
!((-0.2 > 1.4) && ((0.8 < 3.1) || (0.1 == 0.1)))
Сначала взгляните на самое внутреннее выражение:(0.8 < 3.1) || (0.1 == 0.1)
. Это выражение оценивается какtrue
, потому что оба математических оператора -true
.
Затем Go берет возвращенное значениеtrue
и объединяет его со следующим внутренним выражением:(-0.2 > 1.4) && (true)
. В этом примере возвращаетсяfalse
, потому что математический оператор-0.2 > 1.4
ложен, а (false
) и (true
) возвращаетfalse
.
Наконец, у нас есть внешнее выражение:!(false)
, которое оценивается какtrue
, поэтому окончательное возвращаемое значение, если мы распечатаем этот оператор, будет:
Outputtrue
Логические операторы&&
,||
и!
оценивают выражения и возвращают логические значения.
Таблицы правды
Можно многое узнать о логической ветви математики, но вы можете выборочно изучить некоторые из них, чтобы улучшить свое алгоритмическое мышление при программировании.
Ниже приведены таблицы истинности для оператора сравнения==
и каждого из логических операторов&&
,||
и!
. Хотя вы можете их рассуждать, также может быть полезно запомнить их, так как это может ускорить процесс принятия решений в вашей программе.
==
(равно) Таблица истинности
x | == | y | Возвращает |
---|---|---|---|
true |
== |
true |
true |
true |
== |
ложный |
ложный |
ложный |
== |
true |
ложный |
ложный |
== |
ложный |
true |
&&
(и) Таблица истинности
x | and | y | Возвращает |
---|---|---|---|
true |
and |
true |
true |
true |
and |
ложный |
ложный |
ложный |
and |
true |
ложный |
ложный |
and |
ложный |
ложный |
||
(или) Таблица истинности
x | or | y | Возвращает |
---|---|---|---|
true |
or |
true |
true |
true |
or |
ложный |
true |
ложный |
or |
true |
true |
ложный |
or |
ложный |
ложный |
!
(не) Таблица истинности
not | x | Возвращает |
---|---|---|
not |
true |
ложный |
not |
ложный |
true |
Таблицы истинности являются общими математическими таблицами, используемыми в логике, и их полезно учитывать при построении алгоритмов (инструкций) в компьютерном программировании.
Использование булевых операторов для управления потоком
Чтобы управлять потоком и результатами программы в форме операторов управления потоком, вы можете использоватьcondition, за которым следуетclause.
condition оценивается до логического значения истина или ложь, представляя точку, где в программе принимается решение. То есть условие скажет вам, если что-то оценивается как истинное или ложное.
clause - это блок кода, который следует заcondition и определяет результат программы. То есть это часть конструкции «сделай это»: «Еслиx
равноtrue
, то сделай это».
Блок кода ниже показывает пример операторов сравнения, работающих в тандеме с условными операторами для управления потоком программы Go:
if grade >= 65 { // Condition
fmt.Println("Passing grade") // Clause
} else {
fmt.Println("Failing grade")
}
Эта программа оценивает, является ли оценка каждого студента удовлетворительной или нет. В случае учащегося с оценкой83
, первый оператор будет оценивать какtrue
, а оператор печатиPassing grade
будет запущен. В случае учащегося с оценкой59
первый оператор будет оцениваться какfalse
, поэтому программа перейдет к выполнению оператора печати, привязанного к выражению else:Failing grade
.
Булевы операторы представляют условия, которые можно использовать для определения конечного результата программы с помощью операторов управления потоком.
Заключение
В этом руководстве были рассмотрены сравнения и логические операторы, принадлежащие к булевому типу, а также таблицы истинности и используются булевы значения для управления потоком программ.