Skip to content

Instantly share code, notes, and snippets.

View ievetrov's full-sized avatar

Ivan Vetrov ievetrov

View GitHub Profile
# План каталога
## 📊 ИТОГО
| Раздел | Мин | Макс |
|--------|:---:|:----:|
| 🍾 Бутылочное вино | 31 | 31 |
| 🍷 Разливное вино | 8 | 24 |
| 🥃 Крепкие бутылочные | 19 | 31 |
| 🫗 Крепкие разливные | 9 | 9 |
@ievetrov
ievetrov / constants.md
Created February 5, 2024 16:43
constants.md

Константы в Kotlin, отличие val от const val

Константы являются фундаментальным элементом в разработке программного обеспечения. В этом руководстве мы рассмотрим, почему константы так важны и как они работают на уровне компиляции.

Что такое константы?

Константы – это специальные переменные, значения которых устанавливаются один раз во время их определения (инициализации). То есть значения известны на этапе компиляции кода. Они не могут быть изменены во время выполнения программы и остаются таковыми на протяжении всей работы программы. Константы объявляются с помощью ключевых слов const val и имеют специальный стиль именования – snake case в сочетании с верхним регистром.

Зачем нужны константы?

Оптимизация

Когда компилятор встречает константу, он вставляет ее значение непосредственно в байт-код вместо того, чтобы ссылаться на переменную. Это позволяет избежать лишних ссылок на переменные и создания избыточных объектов в памяти. Кроме того это открывает дополнительные возможности использования к

@ievetrov
ievetrov / scope_functions.md
Created February 3, 2024 12:18
scope_functions.md

Scope functions в Kotlin

В Kotlin существует пять основных функций области видимости (scope functions): let, run, with, apply, и also. В зависимости от выбранной функции, контекст объекта можно использовать по-разному, а также они различаются возвращаемым значением.

let

  • Контекст объекта: доступен как аргумент (it), можно переименовать.
  • Возвращает: результат лямбда-выражения.
  • Используется для: обработки объекта, который может быть null, выполнения действий с non-null объектами, преобразования одного объекта в другой.
val result = "Hello".let {
    print(it)  // Выводит "Hello"
 it.length // Возвращает длину строки
@ievetrov
ievetrov / null_safety.md
Last active October 15, 2025 08:25
null_safety.md

Способы обработки nullable в Kotlin

Kotlin предлагает несколько мощных механизмов для безопасной работы с nullable типами, чтобы избежать NullPointerException. Вот основные способы обработки null:

Проверка на null

Прямая проверка на null позволяет безопасно работать с переменными, которые могут быть null.

val name: String? = getName() // Может вернуть null
if (name != null) {
    println(name.length) // Безопасный вызов, так как проверили на null
}
@ievetrov
ievetrov / properties.md
Last active June 6, 2026 00:42
properties.md

Способы объявления и инициализации свойств в Kotlin

В Kotlin существует несколько подходов к объявлению и инициализации свойств классов. Рассмотрим наиболее распространенные из них.

Объявление свойства в классе

class User {
    val name: String = "",
}

В этом подходе свойство name объявлено в классе и сразу проинициализировано значением по умолчанию. Все созданные объекты будут сразу обладать этим свойстом.

Объявление свойства в конструкторе

@ievetrov
ievetrov / inputStream.kt
Last active February 20, 2024 16:42
create drawable from assets
val inputStream: InputStream? = viewHolder.itemView.context?.assets?.open(dataSet[position].imageUrl)
val drawable = Drawable.createFromStream(inputStream, null)
viewHolder.ivCategoryImage.setImageDrawable(drawable)
@ievetrov
ievetrov / recipe.json
Last active March 26, 2026 09:34
recipe.json
[
{
"id": 0,
"title": "Классический бургер с говядиной",
"ingredients": [
{
"quantity": "0.5",
"unitOfMeasure": "кг",
"description": "говяжий фарш"
},
@ievetrov
ievetrov / category.json
Last active October 17, 2023 09:19
category.json
[
{
"id": 0,
"title": "Бургеры",
"description": "Рецепты всех популярных видов бургеров",
"imageUrl": "burger.png"
},
{
"id": 1,
"title": "Десерты",
@ievetrov
ievetrov / mockk_tests.md
Created August 3, 2023 16:54
Тестируем при помощи Mockk

Тестирование на моках

Довольно часто наши проекты состоят из объектов, которые используют другие объекты или внешние ресурсы. В нашей курсовой это класс LearnWordsTrainer, который не использует внешние объекты, но использует внешние ресурсы. (Кстати, старайся всегда задумываться от чего зависит объект твоего класса)

Таким образом поведение LearnWordsTrainer зависит от содержимого файла, который передается в конструктор и от действий пользователя. Чтобы протестировать его, будем считать что LearnWordsTrainer - черный ящик. И нам не важно как оно внутри работает, важно что:

  • передав определенные значения для fileName, learnedCount, numberOfAnswers

Наша задача, чтобы метод sendQuestion() отправил вопрос в телеграм бот. То есть, сделал http запрос на отправку сообщения пользователя к API телеграма.

В документации к API Telegram найдем подходящий метод. Нам подойдет sendMessage

Use this method to send text messages

О том как делать запросы к API телеграма описано тут же в документации выше. Из доки понятно, что мы можем отправлять POST запросы с JSON строкой в качестве текста.