Найти тему
Я, Golang-инженер

#23. Функция Compare и курс Go от Тинькофф

Оглавление

Это статья об основах программирования. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.

Хой! Джедаи и Амазонки!

В первой части статьи будет много примеров с функцией Compare. А в конце расскажу о курсе Go для начинающих и всех желающих от Тинькофф. Поехали!

В Golang есть функция, которая позволяет сравнивать строки лексикографически.

Лексикографическое сравнение - сравнение, как "в словаре" или телефонном справочнике. Т.е. по алфавиту. Если совпали первые буквы двух строк, сравниваются вторые. Совпали вторые буквы - сравниваются третьи и т.д.

Функция Compare из пакета strings возвращает целое число, сравнивая две строки лексикографически.

func Compare(a, b string) int
  • Если a == b, результат будет 0;
  • При a < b, результат будет -1;
  • А если a > b, результат будет 1 (+1).

Классический пример

package main

import (
"fmt"
"strings"
)

func main() {
fmt.Println(strings.Compare("a", "b"))
// -1
fmt.Println(strings.Compare("a", "a"))
// 0
fmt.Println(strings.Compare("b", "a"))
// 1

Что здесь интересного? Эта функция на мой взгляд избыточна, т.к. проще сравнивать строки обычными операторами сравнения, т.е. ==, <, >, >=, <=. Вероятно, Compare добавляет удобства в работе.

Если посмотрим, что "под капотом функции", убедимся, что разработчики использовали операторы сравнения:

package strings

func Compare(a, b string) int {
if a == b {
return 0
}
if a < b {
return -1
}
return +1
}

Смоделируем ситуацию. Вы вводите свой логин в соцсеть. Соцсеть проверит, есть ли у вас учётная запись - запустится поиск в базе данных соцсети. Допустим, в базе миллиард отсортированных позиций. И с каждой нужно сравнить ваши данные.

Сколько понадобится проверок, чтобы определить, есть ли совпадение? При бинарном поиске, алгоритму хватит 30 проверок. Круто, верно? Об этом я рассказывал вот здесь <<<

Лексикографическое сравнение в моём понимании должно помогать в поиске таких позиций, а также добавлять новые позиции в общую базу данных в отсортированном виде.

Ещё примеры

Если сравнивать буквы алфавита, всё вроде бы понятно - что где больше. А как быть с буквами из разных алфавитов? В которых ещё есть цифры и знаки препинания? Проведу исследование)

"123" или "абв"

123 меньше абв
123 меньше абв

АБВ и абв

АБВ меньше абв
АБВ меньше абв

абв и abc

абв больше abc
абв больше abc

АБВ и abc

АБВ по-прежнему больше abc
АБВ по-прежнему больше abc

АБВ и !abc

И даже сейчас АБВ больше !abc
И даже сейчас АБВ больше !abc

0999 и 1

0999 меньше 1
0999 меньше 1

абв и 1

абв больше и единицы
абв больше и единицы

abc и 1

abc тоже больше 1
abc тоже больше 1

"." и ","

Точка больше запятой!
Точка больше запятой!

Думаю, примеров достаточно. Главное, что нужно понять - существует приоритезация одних символов над другими. Если в алфавите всё просто - буква а стоит перед буквой б. То с комбинацией алфавитов, цифр и символов, ситуация чуть сложнее.

А теперь переходим к интересному!

Курс Go от Тинькофф для всех желающих

Нашёл информацию, что в Тинькоф-образовании начался курс Go для начинающих. Вступительный экзамен стартует 1 февраля 2023 г., курс доступен всем желающим.

Скриншот сайта Тинькоф-образования
Скриншот сайта Тинькоф-образования

На курсе обещают дать опыт промышленной разработки собственного проекта. Преподаватели делятся информацией, которой пользуются в реальной работе над проектами Тинькофф.

Не знаю, правда, какой им нужен уровень. Знаю, что участвовать нужно. Посмотрим, что из этого выйдет.

И напоминаю, если захотите купить курс от SkillBox, воспользуйтесь моей реферальной ссылкой. Вы получите огромную скидку на курс и поможете каналу.

PS Сообщите, если купили курс по моей ссылке. Этим ребятам иногда нужно напоминать, что курс куплен по рефу, иначе что-то может пойти не так и кэшбэк не начисляют.

Clarisse Meyer https://unsplash.com/photos/xXiKQ2AavlY
Clarisse Meyer https://unsplash.com/photos/xXiKQ2AavlY

Бро, ты уже здесь? 👉 Подпишись на канал «Я, Golang-инженер», будем изучать IT вместе 👨‍💻👩‍💻👨‍💻