Это статья об основах программирования. На канале я рассказываю об опыте перехода в 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" или "абв"
АБВ и абв
абв и abc
АБВ и abc
АБВ и !abc
0999 и 1
абв и 1
abc и 1
"." и ","
Думаю, примеров достаточно. Главное, что нужно понять - существует приоритезация одних символов над другими. Если в алфавите всё просто - буква а стоит перед буквой б. То с комбинацией алфавитов, цифр и символов, ситуация чуть сложнее.
А теперь переходим к интересному!
Курс Go от Тинькофф для всех желающих
Нашёл информацию, что в Тинькоф-образовании начался курс Go для начинающих. Вступительный экзамен стартует 1 февраля 2023 г., курс доступен всем желающим.
На курсе обещают дать опыт промышленной разработки собственного проекта. Преподаватели делятся информацией, которой пользуются в реальной работе над проектами Тинькофф.
Не знаю, правда, какой им нужен уровень. Знаю, что участвовать нужно. Посмотрим, что из этого выйдет.
И напоминаю, если захотите купить курс от SkillBox, воспользуйтесь моей реферальной ссылкой. Вы получите огромную скидку на курс и поможете каналу.
PS Сообщите, если купили курс по моей ссылке. Этим ребятам иногда нужно напоминать, что курс куплен по рефу, иначе что-то может пойти не так и кэшбэк не начисляют.
Бро, ты уже здесь? 👉 Подпишись на канал «Я, Golang-инженер», будем изучать IT вместе 👨💻👩💻👨💻