Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс Golang
/

Логический тип

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
Коммерческий опыт и Трудоустройство

Полезное

  • The Go Programming Language Specification - Boolean types

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":

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

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
/
Программирование
/
Курс Golang
/

Логический тип

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
Коммерческий опыт и Трудоустройство

Полезное

  • The Go Programming Language Specification - Boolean types

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":

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

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

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

waiting_clock
← ПредыдущийСледующий →