Golang: Логический тип
В Go логический тип (bool) используется для представления двух значений: true (истина) и false (ложь).
Логические операторы
Логические операторы в Go позволяют комбинировать или изменять булевы значения (true и false). Они часто используются в условиях (if, for) и при построении сложных выражений.
Go поддерживает классические логические операции:
&&— логическое «и» (возвращаетtrue, если оба операнда истинны)||— логическое «или» (возвращаетtrue, если хотя бы один операнд истинен)!— логическое «не» (инвертирует значение:!trueстановитсяfalse)==— сравнение на равенство!=— сравнение на неравенство
Примеры:
// false
true && false
// true
false || true
// true
!false
// true
true == true
// true
false != trueОбъявление переменных
Переменные логического типа объявляются явно с использованием bool или через вывод типа:
var isActive bool = true
var isAdmin bool = false
// или с выводом типа
isActive := true
isadmin := falseПеременные логического типа по умолчанию получают значение false:
var flag bool
fmt.Println(flag)
// => falseСтрогая типизация
Go — строго типизированный язык. Это значит, что логические значения нельзя смешивать с другими типами. Например, нельзя сравнивать bool со строкой или числом:
// ошибка компиляции: mismatched types
true == "hello"
// тоже ошибка
true == 1Чтобы проверить, что число не равно нулю, сравнение выполняют явно:
count := 5
// true
isPositive := count > 0
// false
isZero := count == 0Для строк проверка также выполняется явно:
text := "Hexlet"
// false
isEmpty := text == ""
// true
isNotEmpty := text != ""Булевы значения можно сравнивать только с булевыми:
isActive := true
fmt.Println(isActive == true)
// =>true
fmt.Println(isActive != false)
// =>trueСравнение строк
Go позволяет сравнивать строки с помощью стандартных операторов:
- == — равно
- != — не равно
- <, >, <=, >= — лексикографическое сравнение (по порядку символов и длине)
Сравнение выполняется побайтно, в соответствии с кодировкой UTF-8.
"hexlet" == "hexlet"
// true
"go" < "golang"
// true
"beta" > "alpha"
// true
"foo" != "bar"
// trueИспользование в функциях
Сравнения полезны даже без использования условных конструкций. Таким образом часто пишут функции-предикаты, то есть функции, которые выполняют проверки и возвращают булево значение.
func isEmpty(text string) bool {
return text == ""
}
func isEqual(a, b int) bool {
return a == b
}
func bothTrue(a, b bool) bool {
return a && b
}Примеры вызовов:
isEmpty("")
// true
isEmpty("Hexlet")
// false
isEqual(4, 4)
// true
isEqual(4, 7)
// false
bothTrue(true, false)
// false
bothTrue(true, true)
// trueЗадание
Реализуйте функцию IsEven(), которая принимает целое число и возвращает true, если число чётное, и false — если нечётное. Нельзя использовать встроенные функции для определения чётности — только арифметику и операторы.
Примеры
IsEven(5) // false
IsEven(6) // true
IsEven(0) // true
IsEven(-4) // true
IsEven(-3) // falseПолезное
Ваше упражнение проверяется по этим тестам
package solution
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestIsEven(t *testing.T) {
a := assert.New(t)
a.False(IsEven(5))
a.True(IsEven(6))
a.True(IsEven(0))
a.True(IsEven(-2))
a.False(IsEven(-3))
}Решение учителя откроется через:
20:00
