Задачи про PEG-парсеры
Когда-то я хотел сделать контест по парсингу для Codeforces. Придумал задания двух типов:
1. Дается неформальное описание языка, по которому нужно создать грамматику (например, "язык с правильными скобочными последовательностями")
2. Даны примеры строк в языке, по которым нужно восстановить грамматику
У обоих типов заданий есть свои проблемы, так что контест я не сделал.
В итоге я сделал игру программу, в которой можно решать задания второго типа, при этом проверять строки на принадлежность угадываемому языку.
Читать статью
Когда-то я хотел сделать контест по парсингу для Codeforces. Придумал задания двух типов:
1. Дается неформальное описание языка, по которому нужно создать грамматику (например, "язык с правильными скобочными последовательностями")
2. Даны примеры строк в языке, по которым нужно восстановить грамматику
У обоих типов заданий есть свои проблемы, так что контест я не сделал.
В итоге я сделал игру программу, в которой можно решать задания второго типа, при этом проверять строки на принадлежность угадываемому языку.
Читать статью
Teletype
Задачи про PEG-парсеры
Когда-то я хотел сделать контест по парсингу для Codeforces. Придумал задания двух типов:
Что такое inline функции, в чем их преимущество?
В Kotlin есть два типа функций: обычные и встроенные. Обычные функции похожи на функции в других языках программирования. Но встроенные функции имеют модификатор inline. Это позволяет компилятору подставить тело функции прямо в место её вызова.
Как работают inline функции?
Использование анонимных функций (лямбда-выражений) в Kotlin приводит к дополнительным затратам памяти. При использовании лямбда-выражения создается объект FunctionN (где N — количество параметров в лямбда-выражении), который содержит ссылку на само лямбда-выражение и может содержать захваченные переменные. При передаче лямбда-выражения в качестве параметра метода также создается новый объект FunctionN, что приводит к дополнительным затратам памяти.
Поэтому, чтобы избежать создания дополнительных объектов при передаче лямбда-выражений в функцию в качестве параметра, можно использовать встраивание (inline). Ключевое слово inline позволяет компилятору подставить тело функции непосредственно в место её вызова, вместо того, чтобы создавать объекты функций. Таким образом можно уменьшить затраты на создание объектов и улучшить производительность приложения.
Пример синтаксиса inline-функций с лямбдой:
В Kotlin есть два типа функций: обычные и встроенные. Обычные функции похожи на функции в других языках программирования. Но встроенные функции имеют модификатор inline. Это позволяет компилятору подставить тело функции прямо в место её вызова.
Как работают inline функции?
Использование анонимных функций (лямбда-выражений) в Kotlin приводит к дополнительным затратам памяти. При использовании лямбда-выражения создается объект FunctionN (где N — количество параметров в лямбда-выражении), который содержит ссылку на само лямбда-выражение и может содержать захваченные переменные. При передаче лямбда-выражения в качестве параметра метода также создается новый объект FunctionN, что приводит к дополнительным затратам памяти.
Поэтому, чтобы избежать создания дополнительных объектов при передаче лямбда-выражений в функцию в качестве параметра, можно использовать встраивание (inline). Ключевое слово inline позволяет компилятору подставить тело функции непосредственно в место её вызова, вместо того, чтобы создавать объекты функций. Таким образом можно уменьшить затраты на создание объектов и улучшить производительность приложения.
Пример синтаксиса inline-функций с лямбдой:
inline fun functionName(parameter1: Type1, parameter2: Type2, ..., parameterN: TypeN, block: () -> Unit): ReturnType {Модификатор inline влияет и на функцию, и на лямбду, переданную ей: они обе будут встроены в место вызова.
// function body
}
⚡️ Тест на знание языка Kotlin⚡️
Ответьте на 10 вопросов и проверьте, насколько вы готовы к углубленному изучению Kotlin.
Сможете пройти успешно тест — пройдете на продвинутый онлайн-курс "Kotlin Backend Developer" от OTUS со скидкой.
➡️ ПРОЙТИ ТЕСТ — https://vk.cc/cwQAro
Курс доступен в рассрочку!
🎁 Для успешно прошедших тест, откроется доступ к открытым урокам курса + курс по Git в записи!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Ответьте на 10 вопросов и проверьте, насколько вы готовы к углубленному изучению Kotlin.
Сможете пройти успешно тест — пройдете на продвинутый онлайн-курс "Kotlin Backend Developer" от OTUS со скидкой.
Курс доступен в рассрочку!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Ускоряем поиск по коду в Android Studio
Рассмотрим возможности Android Studio, позволяющие быстрее ориентироваться в коде: находить нужные фрагменты и выявлять связи между ними.
Если вы опытный пользователь, то вам известно большинство нижеперечисленных лайфхаков. Но я узнавал о многих возможностях случайно, через многие месяцы работы в Android Studio, поэтому хочу рассказать всё, везде и сразу.
Читать статью
Рассмотрим возможности Android Studio, позволяющие быстрее ориентироваться в коде: находить нужные фрагменты и выявлять связи между ними.
Если вы опытный пользователь, то вам известно большинство нижеперечисленных лайфхаков. Но я узнавал о многих возможностях случайно, через многие месяцы работы в Android Studio, поэтому хочу рассказать всё, везде и сразу.
Читать статью
Teletype
Ускоряем поиск по коду в Android Studio
Рассмотрим возможности Android Studio, позволяющие быстрее ориентироваться в коде: находить нужные фрагменты и выявлять связи между ними.
Модификатор noinline
Если же вы хотите, чтобы некоторые лямбды, переданные inline-функции, не были встроены, то отметьте их модификатором noinline.
Если же вы хотите, чтобы некоторые лямбды, переданные inline-функции, не были встроены, то отметьте их модификатором noinline.
inline fun foo(inlined: () -> Unit, noinline notInlined: () -> Unit) {Разница между ними в том, что встраиваемая лямбда может быть вызвана только внутри inline-функции, либо может быть передана в качестве встраиваемого аргумента. В то время как с noinline-функциями можно работать без ограничений: хранить внутри полей, передавать куда-либо и т.д.
// ...
}
Создаем нативное Kotlin приложение на Spring Boot Native, Gradle и GraalVM без докера под MacOS и Windows
В этой статье я хочу рассказать о практическом опыте нативной компиляции production приложения, написанного на Kotlin со Spring Boot, Gradle с использованием GraalVM . Начну сразу с минусов и плюсов самой возможности нативной компиляции и где она может быть полезна, и дальше перейду уже непосредственно к процессу сборки под MacOS и Windows.
В конце статьи я более подробно расскажу о проекте и почему возникла такая необходимость, учитывая довольно много ограничений и подводных камней поддержки нативной компиляции как со стороны Spring Boot, та и со стороны GraalVM.
Читать статью
В этой статье я хочу рассказать о практическом опыте нативной компиляции production приложения, написанного на Kotlin со Spring Boot, Gradle с использованием GraalVM . Начну сразу с минусов и плюсов самой возможности нативной компиляции и где она может быть полезна, и дальше перейду уже непосредственно к процессу сборки под MacOS и Windows.
В конце статьи я более подробно расскажу о проекте и почему возникла такая необходимость, учитывая довольно много ограничений и подводных камней поддержки нативной компиляции как со стороны Spring Boot, та и со стороны GraalVM.
Читать статью
Teletype
Создаем нативное Kotlin приложение на Spring Boot Native, Gradle и GraalVM без докера под MacOS и Windows
В этой статье я хочу рассказать о практическом опыте нативной компиляции production приложения, написанного на Kotlin со Spring Boot...
Что такое нелокальный return?
В Котлин non-local return — это механизм, который позволяет выйти из внешней функции или лямбда-выражения и вернуться к вызывающему коду, обходя оставшуюся часть текущей функции или лямбда-выражения. Он работает по-разному в зависимости от того, является ли функция inline или не-inline.
В не-inline функциях:
Если внутри функции есть лямбда-выражение, non-local return из лямбда-выражения может привести к нелокальному завершению внешней функции.
Для использования non-local return внутри лямбда-выражения в не-inline функции, необходимо использовать метку (label) и оператор
В inline-функциях:
В inline-функциях, лямбда-выражения становятся частью кода функции и имеют локальный контроль над потоком управления.
Оператор
В Котлин non-local return — это механизм, который позволяет выйти из внешней функции или лямбда-выражения и вернуться к вызывающему коду, обходя оставшуюся часть текущей функции или лямбда-выражения. Он работает по-разному в зависимости от того, является ли функция inline или не-inline.
В не-inline функциях:
Если внутри функции есть лямбда-выражение, non-local return из лямбда-выражения может привести к нелокальному завершению внешней функции.
Для использования non-local return внутри лямбда-выражения в не-inline функции, необходимо использовать метку (label) и оператор
return@label
.В inline-функциях:
В inline-функциях, лямбда-выражения становятся частью кода функции и имеют локальный контроль над потоком управления.
Оператор
return
внутри лямбда-выражения в inline-функции приведет только к завершению самого лямбда-выражения, не влияя на внешнюю функцию.Реализуем современный UI на Jetpack Compose
Всем привет, на связи Никита Пятаков, Android-разработчик в МТС Диджитал. В этой статье я расскажу вам о том, как в приложении Мой МТС была проведена работа над UI новой карточки услуги. Рассказ мой будет последовательным – сначала про саму задачку, потом про решение, которое разбито на подпункты.
Читать статью
Всем привет, на связи Никита Пятаков, Android-разработчик в МТС Диджитал. В этой статье я расскажу вам о том, как в приложении Мой МТС была проведена работа над UI новой карточки услуги. Рассказ мой будет последовательным – сначала про саму задачку, потом про решение, которое разбито на подпункты.
Читать статью
Teletype
Реализуем современный UI на Jetpack Compose
Всем привет, на связи Никита Пятаков, Android-разработчик в МТС Диджитал. В этой статье я расскажу вам о том, как в приложении Мой МТС...
#вакансия #удалённо #parttime #преподаватель #Kotlin
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний.
Вакансия: преподаватель онлайн-курса Kotlin Backend Developer. Professional. Можно без опыта преподавания, мы поможем вам освоить best practices.
Требования:
- глубокое знание backend разработки;
- знание Java и ее основных фреймворков;
- опыт разработки на Kotlin от 2 лет.
Преподаватель раскрывает тему с помощью теории и примеров из практики. Можно выбрать удобную нагрузку и темы занятий, вебинары проходят в Zoom. Дни занятий – Ср с 19:00 до 20:30 и Сб с 11:00 до 12:30 мск. Есть материалы к занятиям.
С нами вы сможете ✅
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
- получать от 4000 до 6000 руб за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ (эта активность на ваше усмотрение).
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @yu_grin
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний.
Вакансия: преподаватель онлайн-курса Kotlin Backend Developer. Professional. Можно без опыта преподавания, мы поможем вам освоить best practices.
Требования:
- глубокое знание backend разработки;
- знание Java и ее основных фреймворков;
- опыт разработки на Kotlin от 2 лет.
Преподаватель раскрывает тему с помощью теории и примеров из практики. Можно выбрать удобную нагрузку и темы занятий, вебинары проходят в Zoom. Дни занятий – Ср с 19:00 до 20:30 и Сб с 11:00 до 12:30 мск. Есть материалы к занятиям.
С нами вы сможете ✅
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
- получать от 4000 до 6000 руб за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ (эта активность на ваше усмотрение).
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @yu_grin
otus.ru
Курс по backend-разработке на Kotlin, Kotlin Backend Developer
Научитесь использовать язык Kotlin для разработки серверных приложений; создавать приложения для разных платформ с помощью Kotlin Multiplatform: JS, JVM, Native (Linux/Windows/MacOs/Android/iOS)
Как работает модификатор crossinline?
crossinline — ключевое слово, которое используется для указания, что лямбда-выражение не может содержать нелокальных return, даже если оно передано в inline-функцию.
Когда мы передаем лямбда-выражение в функцию в качестве параметра, мы можем использовать оператор return внутри лямбды, чтобы выйти из цикла или функции, в которой вызывается лямбда. Однако, если мы передаем лямбда-выражение в inline-функцию, код лямбда-выражения может быть вставлен прямо в место вызова функции. В этом случае, если в лямбде используется оператор return, это может привести к выходу из внешней функции, что не всегда желательно.
crossinline — ключевое слово, которое используется для указания, что лямбда-выражение не может содержать нелокальных return, даже если оно передано в inline-функцию.
Когда мы передаем лямбда-выражение в функцию в качестве параметра, мы можем использовать оператор return внутри лямбды, чтобы выйти из цикла или функции, в которой вызывается лямбда. Однако, если мы передаем лямбда-выражение в inline-функцию, код лямбда-выражения может быть вставлен прямо в место вызова функции. В этом случае, если в лямбде используется оператор return, это может привести к выходу из внешней функции, что не всегда желательно.
#вакансия #удалённо #parttime #преподаватель #Kotlin
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний.
Вакансия: преподаватель онлайн-курса Kotlin Backend Developer. Professional. Можно без опыта преподавания, мы поможем вам освоить best practices.
Требования:
- глубокое знание backend разработки;
- знание Java и ее основных фреймворков;
- опыт разработки на Kotlin от 2 лет.
Преподаватель раскрывает тему с помощью теории и примеров из практики. Можно выбрать удобную нагрузку и темы занятий, вебинары проходят в Zoom. Дни занятий – Ср с 19:00 до 20:30 и Сб с 11:00 до 12:30 мск. Есть материалы к занятиям.
С нами вы сможете ✅
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
- получать от 4000 до 6000 руб за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ (эта активность на ваше усмотрение).
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @yu_grin
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний.
Вакансия: преподаватель онлайн-курса Kotlin Backend Developer. Professional. Можно без опыта преподавания, мы поможем вам освоить best practices.
Требования:
- глубокое знание backend разработки;
- знание Java и ее основных фреймворков;
- опыт разработки на Kotlin от 2 лет.
Преподаватель раскрывает тему с помощью теории и примеров из практики. Можно выбрать удобную нагрузку и темы занятий, вебинары проходят в Zoom. Дни занятий – Ср с 19:00 до 20:30 и Сб с 11:00 до 12:30 мск. Есть материалы к занятиям.
С нами вы сможете ✅
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
- получать от 4000 до 6000 руб за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ (эта активность на ваше усмотрение).
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @yu_grin
otus.ru
Курс по backend-разработке на Kotlin, Kotlin Backend Developer
Научитесь использовать язык Kotlin для разработки серверных приложений; создавать приложения для разных платформ с помощью Kotlin Multiplatform: JS, JVM, Native (Linux/Windows/MacOs/Android/iOS)
Когда нужно использовать crossinline, а когда noinline?
Модификаторы crossinline и noinline используются для управления поведением лямбда-выражений, переданных в качестве параметров функций. Они позволяют указывать, может ли лямбда-выражение содержать операторы return.
• Модификатор crossinline используется для указания того, что лямбда-выражение не может содержать операторы return, даже если функция, принимающая лямбда-выражение, инлайновая.
• Модификатор noinline, с другой стороны, указывает на то, что лямбда-выражение может быть сохранено как объект функции, а не выполнено внутри вызывающей функции. Это может быть полезно в случае, когда вы хотите использовать лямбда-выражение где-то ещё, например, как параметр для другой функции.
ВЫВОД: crossinline должен использоваться только тогда, когда вы уверены в том, что оператор return не будет использоваться внутри лямбда-выражения. Если лямбда-выражение должно содержать оператор return, то следует использовать ключевое слово noinline вместо crossinline.
Модификаторы crossinline и noinline используются для управления поведением лямбда-выражений, переданных в качестве параметров функций. Они позволяют указывать, может ли лямбда-выражение содержать операторы return.
• Модификатор crossinline используется для указания того, что лямбда-выражение не может содержать операторы return, даже если функция, принимающая лямбда-выражение, инлайновая.
• Модификатор noinline, с другой стороны, указывает на то, что лямбда-выражение может быть сохранено как объект функции, а не выполнено внутри вызывающей функции. Это может быть полезно в случае, когда вы хотите использовать лямбда-выражение где-то ещё, например, как параметр для другой функции.
ВЫВОД: crossinline должен использоваться только тогда, когда вы уверены в том, что оператор return не будет использоваться внутри лямбда-выражения. Если лямбда-выражение должно содержать оператор return, то следует использовать ключевое слово noinline вместо crossinline.
Хочешь научиться применять типовые оптимизации в разработке UI на Compose?
Ждем тебя на практическом открытом уроке от OTUS, где мы разберем типовые оптимизации и как пользоваться инструментами профилирования Compose для эффективной разработки.
Вебинар будет полезен Android-разработчикам уровня Middle.
Спикер Абакар Магомедов — опытный специалист и наставник, Android-разработчик в Alfa Bank.
Встречаемся 13 июня в 20:00 мск в преддверии старта курса «Android Developer. Professional». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы посетить бесплатный урок: https://vk.cc/cxAD1t
Ждем тебя на практическом открытом уроке от OTUS, где мы разберем типовые оптимизации и как пользоваться инструментами профилирования Compose для эффективной разработки.
Вебинар будет полезен Android-разработчикам уровня Middle.
Спикер Абакар Магомедов — опытный специалист и наставник, Android-разработчик в Alfa Bank.
Встречаемся 13 июня в 20:00 мск в преддверии старта курса «Android Developer. Professional». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы посетить бесплатный урок: https://vk.cc/cxAD1t
Protobuf или Reflection в JNI
Вы когда нибудь задумывались, на сколько grpc быстрый. Да в сети, ему равных нет. Если вы гоняете маленькие сообщения, которые надо быстро доставить, то лучше grpc попростуне найти ( найти, но по мнению автору protobuf остается движком сериализации, поддерживающим большее кол-во языков ). Но насколько он хорош? Сможет ли он к примеру сравнится просто с нативными вызовами?
Попробуем сравнить это, но так как в обычной жизни нам это может не пригодится, то добавим еще одно условие - сравниваем как лучший способ взаимодействия с jni библиотекой.
Читать статью
Вы когда нибудь задумывались, на сколько grpc быстрый. Да в сети, ему равных нет. Если вы гоняете маленькие сообщения, которые надо быстро доставить, то лучше grpc попросту
Попробуем сравнить это, но так как в обычной жизни нам это может не пригодится, то добавим еще одно условие - сравниваем как лучший способ взаимодействия с jni библиотекой.
Читать статью
Teletype
Protobuf или Reflection в JNI
Вы когда-нибудь задумывались, насколько grpc быстрый. Да, в сети, ему равных нет. Если вы гоняете маленькие сообщения, которые надо...
#вакансия #удалённо #parttime #преподаватель #Kotlin
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний.
Вакансия: преподаватель онлайн-курса Kotlin Backend Developer. Professional. Можно без опыта преподавания, мы поможем вам освоить best practices.
Требования:
- глубокое знание backend разработки;
- знание Java и ее основных фреймворков;
- опыт разработки на Kotlin от 2 лет.
Преподаватель раскрывает тему с помощью теории и примеров из практики. Можно выбрать удобную нагрузку и темы занятий, вебинары проходят в Zoom. Дни занятий – Ср с 19:00 до 20:30 и Сб с 11:00 до 12:30 мск. Есть материалы к занятиям.
С нами вы сможете ✅
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
- получать от 4000 до 6000 руб. за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ (эта активность на ваше усмотрение).
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @yu_grin
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний.
Вакансия: преподаватель онлайн-курса Kotlin Backend Developer. Professional. Можно без опыта преподавания, мы поможем вам освоить best practices.
Требования:
- глубокое знание backend разработки;
- знание Java и ее основных фреймворков;
- опыт разработки на Kotlin от 2 лет.
Преподаватель раскрывает тему с помощью теории и примеров из практики. Можно выбрать удобную нагрузку и темы занятий, вебинары проходят в Zoom. Дни занятий – Ср с 19:00 до 20:30 и Сб с 11:00 до 12:30 мск. Есть материалы к занятиям.
С нами вы сможете ✅
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
- получать от 4000 до 6000 руб. за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ (эта активность на ваше усмотрение).
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @yu_grin
otus.ru
Курс по backend-разработке на Kotlin, Kotlin Backend Developer
Научитесь использовать язык Kotlin для разработки серверных приложений; создавать приложения для разных платформ с помощью Kotlin Multiplatform: JS, JVM, Native (Linux/Windows/MacOs/Android/iOS)
NoArchitecture Kotlin Compose
Статья про основные моменты использования Compose в Android разработке на примере простого приложения. Три таба в одном Activity. Обращение в сеть, парсинг Json. Немного анимации. Приложение сделано на коленке за пару дней.
Читать статью
Статья про основные моменты использования Compose в Android разработке на примере простого приложения. Три таба в одном Activity. Обращение в сеть, парсинг Json. Немного анимации. Приложение сделано на коленке за пару дней.
Читать статью
Teletype
NoArchitecture Kotlin Compose
Все начинается в setContent. ComposeGenAppTheme необязательна. Surface кстати внутри себя содержит простой Box. Не привычно формировать...
Приходите на наш Я.Субботник по JVM — 29 июня в Новосибирске!
Вас ждёт митап о том, как мы пишем код на Java, Scala и Kotlin.
В программе — доклады крутых спикеров, нетворкинг и афтерпати. Расскажем про pattern matching, процессы и факапы на складах Маркета, а еще про архитектуру наших систем.
Программа получилась насыщенной — зарегистрироваться можно по ссылке.
До встречи на Субботнике! ☀️
Вас ждёт митап о том, как мы пишем код на Java, Scala и Kotlin.
В программе — доклады крутых спикеров, нетворкинг и афтерпати. Расскажем про pattern matching, процессы и факапы на складах Маркета, а еще про архитектуру наших систем.
Программа получилась насыщенной — зарегистрироваться можно по ссылке.
До встречи на Субботнике! ☀️
Ключевое слово reified
reified — это ключевое слово, которое может быть использовано только в inline-функциях. reified позволяет получить информацию о типе generic-параметра во время выполнения программы. В обычном случае, информация о типах стирается и недоступна во время выполнения, но с помощью reified можно сохранять эту информацию и использовать в других частях приложения.
Несколько простых примеров применения:
1. Получить доступ к типу параметра во время выполнения
В этом примере мы определяем функцию printType() с типовым параметром T, который мы указываем с помощью reified. Внутри функции мы можем получить тип T во время выполнения, используя T::class. Затем выводим название типа на экран с помощью simpleName. Когда мы вызываем функцию printType() с типом String или Int, она выводит соответствующий тип на экран.
2. reified вместе с is для проверки типа аргумента во время выполнения
Здесь мы определяем функцию isOfType(), которая принимает значение типа Any и возвращает true, если оно является типом T. Мы используем reified, чтобы получить доступ к типу T во время выполнения. Затем мы используем оператор is для проверки типа значения и возвращаем соответствующее boolean значение.
3. Получить список элементов перечисления
Определяем функцию printEnumValues(), которая выводит список элементов перечисления типа T. Мы применяем reified, чтобы получить доступ к типу T во время выполнения. Затем используем enumValues<T>(), чтобы получить список всех значений перечисления типа T. Внутри цикла выводим каждое значение на экран. Когда мы вызываем функцию printEnumValues() с типом Color, она выводит "RED", "GREEN" и "BLUE" в консоль.
reified — это ключевое слово, которое может быть использовано только в inline-функциях. reified позволяет получить информацию о типе generic-параметра во время выполнения программы. В обычном случае, информация о типах стирается и недоступна во время выполнения, но с помощью reified можно сохранять эту информацию и использовать в других частях приложения.
Несколько простых примеров применения:
1. Получить доступ к типу параметра во время выполнения
fun main() {
printType<String>() // String
printType<Int>() // Int
}
private inline fun <reified T> printType() {
println(T::class.simpleName)
}
В этом примере мы определяем функцию printType() с типовым параметром T, который мы указываем с помощью reified. Внутри функции мы можем получить тип T во время выполнения, используя T::class. Затем выводим название типа на экран с помощью simpleName. Когда мы вызываем функцию printType() с типом String или Int, она выводит соответствующий тип на экран.
2. reified вместе с is для проверки типа аргумента во время выполнения
fun main() {
println(isOfType<Int>(1)) // true
println(isOfType<Int>("Hello")) // false
}
private inline fun <reified T> isOfType(value: Any): Boolean {
return value is T
}
Здесь мы определяем функцию isOfType(), которая принимает значение типа Any и возвращает true, если оно является типом T. Мы используем reified, чтобы получить доступ к типу T во время выполнения. Затем мы используем оператор is для проверки типа значения и возвращаем соответствующее boolean значение.
3. Получить список элементов перечисления
enum class Color { RED, GREEN, BLUE }
fun main() {
printEnumValues<Color>() // RED, GREEN, BLUE
}
private inline fun <reified T : Enum<T>> printEnumValues() {
enumValues<T>().forEach { value ->
println(value)
}
}
Определяем функцию printEnumValues(), которая выводит список элементов перечисления типа T. Мы применяем reified, чтобы получить доступ к типу T во время выполнения. Затем используем enumValues<T>(), чтобы получить список всех значений перечисления типа T. Внутри цикла выводим каждое значение на экран. Когда мы вызываем функцию printEnumValues() с типом Color, она выводит "RED", "GREEN" и "BLUE" в консоль.
This media is not supported in your browser
VIEW IN TELEGRAM
Изучите применение ChatGPT в рабочих целях, чтобы получить от этого прибыль. Сейчас самое время начать использовать искусственный интеллект.
Здесь вы узнаете, почему стоит освоить ChatGPT. Это поможет вам:
- Использовать ChatGPT в вашей профессиональной сфере.
- Предлагать компаниям разработку индивидуально дообученного ChatGPT по заказу.
- Увеличить свой доход, освоив навык создания индивидуально дообученного ChatGPT.
Зарегистрируйтесь на бесплатный вебинар, чтобы узнать больше деталей.
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395. erid: LjN8JwzAY
Здесь вы узнаете, почему стоит освоить ChatGPT. Это поможет вам:
- Использовать ChatGPT в вашей профессиональной сфере.
- Предлагать компаниям разработку индивидуально дообученного ChatGPT по заказу.
- Увеличить свой доход, освоив навык создания индивидуально дообученного ChatGPT.
Зарегистрируйтесь на бесплатный вебинар, чтобы узнать больше деталей.
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395. erid: LjN8JwzAY
—
implementation 'io.github.oshai:kotlin-logging-jvm:5.1.0'
kotlin-logging предоставляет обертку для slf4j-api для использования классами Kotlin; при этом kotlin-logging имеет такие преимущества:
— нет необходимости писать шаблонный код, содержащий имя логгера и класса или имя логгера
— простой способ регистрации сообщений в виде строки с ленивой оценкой с помощью лямбда-выражения
{}
— все предыдущие реализации slf4j по-прежнему могут быть использованы
@KotlinSenior
Please open Telegram to view this post
VIEW IN TELEGRAM