⚡️Хакатон "Умный помощник для тендеров"
Присоединяйтесь к участию в соревновании и станьте частью комьюнити Федерации спортивного программирования, объединяющей талантливых специалистов и спортсменов!
🚀Что дает участие?
1. Карьерные преимущества.
2. Поддержка и развитие.
3. Призовой фонд — 200 000 рублей.
4. Комьюнити спортсменов.
👨💻К участию приглашаются:
- Студенческие команды в составе от 3х до 5ти человек;
- Обучающиеся технических специальностей;
- IT-специалисты;
- Заинтересованные представители регионов Российской Федерации.
📅Дата проведения: 23 - 25 марта
📍Формат: Онлайн/Офлайн в г. Москва
Подробная информация и регистрация: https://tglink.io/589439577d3e?erid=LjN8K74Ej
Присоединяйтесь к участию в соревновании и станьте частью комьюнити Федерации спортивного программирования, объединяющей талантливых специалистов и спортсменов!
🚀Что дает участие?
1. Карьерные преимущества.
2. Поддержка и развитие.
3. Призовой фонд — 200 000 рублей.
4. Комьюнити спортсменов.
👨💻К участию приглашаются:
- Студенческие команды в составе от 3х до 5ти человек;
- Обучающиеся технических специальностей;
- IT-специалисты;
- Заинтересованные представители регионов Российской Федерации.
📅Дата проведения: 23 - 25 марта
📍Формат: Онлайн/Офлайн в г. Москва
Подробная информация и регистрация: https://tglink.io/589439577d3e?erid=LjN8K74Ej
Что такое мульти-декларации (destructuring declarations)?
Мульти-декларации (destructuring declarations или деструктуризирующее присваивание) — это способ извлечения значений из объекта и присвоения их сразу нескольким переменным. В Kotlin этот механизм поддерживается с помощью оператора распаковки (destructuring operator) — componentN(), где N — номер компонента.
При создании data класса Kotlin автоматически создает функции componentN() для каждого свойства класса, где N — номер позиции переменной в конструкторе. Функции componentN() возвращают значения свойств в порядке их объявления в конструкторе. Это позволяет использовать мульти-декларации для распаковки значений свойств и присваивания их отдельным переменным.
Например, если у нас есть data класс Person с двумя свойствами name и age, мы можем использовать мульти-декларации, чтобы извлечь эти свойства и присвоить их двум переменным:
Мульти-декларации (destructuring declarations или деструктуризирующее присваивание) — это способ извлечения значений из объекта и присвоения их сразу нескольким переменным. В Kotlin этот механизм поддерживается с помощью оператора распаковки (destructuring operator) — componentN(), где N — номер компонента.
При создании data класса Kotlin автоматически создает функции componentN() для каждого свойства класса, где N — номер позиции переменной в конструкторе. Функции componentN() возвращают значения свойств в порядке их объявления в конструкторе. Это позволяет использовать мульти-декларации для распаковки значений свойств и присваивания их отдельным переменным.
Например, если у нас есть data класс Person с двумя свойствами name и age, мы можем использовать мульти-декларации, чтобы извлечь эти свойства и присвоить их двум переменным:
data class Person(val name: String, val age: Int)
val person = Person("Alice", 29)
val (name, age) = person
println(name) // Alice
println(age) // 29
Также можно использовать мульти-декларации в циклах, чтобы итерироваться по спискам объектов и распаковывать значения свойств:
val people = listOf(Person("Alice", 30), Person("Bob", 40))Мульти-декларации также могут быть использованы с массивами и другими коллекциями:
for ((name, age) in people) {
println("$name is $age years old")
}
// Alice is 30 years old
// Bob is 40 years old
val list = listOf("apple", "banana", "orange")
val (first, second, third) = list
println(first) // apple
println(second) // banana
println(third) // orange
🤖 Разбираешься в Android разработке? - Проверь себя, пройди тест!
Хочешь расти дальше и создавать быстрые, оптимизированные приложения для Android - тогда наш курс для тебя!
Пройди тест из 20 вопросов и проверь свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Android Developer. Professional " от OTUS по специальной цене.
Возможна оплата курса в рассрочку
👉 ПРОЙТИ ТЕСТ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Хочешь расти дальше и создавать быстрые, оптимизированные приложения для Android - тогда наш курс для тебя!
Пройди тест из 20 вопросов и проверь свои знания. Сможешь сдать — пройдёшь на продвинутый курс "Android Developer. Professional " от OTUS по специальной цене.
Возможна оплата курса в рассрочку
👉 ПРОЙТИ ТЕСТ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Строим мосты: подключение зависимостей с Cocoapods в Kotlin Multiplatform Mobile
При создании КММ проекта Android Studio предоставляет разработчику выбор между использованием Regular Framework и Cocoapods Dependency Manager для добавления iOS-специфических библиотек, который может быть крайне неочевидным на первый взгляд, ведь использование Regular Framework кажется затруднительным и не пользуется популярностью в отличие от удобного Cocoapods. В данной статье мы рассмотрим, как интегрировать Cocoapods в разработку, создав небольшое Android приложение.
Читать статью
При создании КММ проекта Android Studio предоставляет разработчику выбор между использованием Regular Framework и Cocoapods Dependency Manager для добавления iOS-специфических библиотек, который может быть крайне неочевидным на первый взгляд, ведь использование Regular Framework кажется затруднительным и не пользуется популярностью в отличие от удобного Cocoapods. В данной статье мы рассмотрим, как интегрировать Cocoapods в разработку, создав небольшое Android приложение.
Читать статью
Teletype
Строим мосты: подключение зависимостей с Cocoapods в Kotlin Multiplatform Mobile
При создании КММ проекта Android Studio предоставляет разработчику выбор между использованием Regular Framework и Cocoapods Dependency...
Как стать Fullstack-разработчиком на JavaScript в 2024?
Освоить необходимый стек технологий под руководством опытных экспертов на онлайн-курсе «Специализация Fullstack developer» от OTUS.
💻 Программа идеально подойдет для начинающих разработчиков, тех, кто хочет перейти на fullstack и тех, кто хочет попасть в IT, но пока не определился с направлением.
На курсе вас ждут:
- живые вебинары с возможностью задать вопросы экспертам;
- много практики и сильные проекты для портфолио;
- поддержка профессионального комьюнити;
- рассрочка на комфортных условиях.
👉 Оставьте заявку прямо сейчас и получите бесплатные уроки, которые помогут ознакомиться с форматом обучения: https://clck.ru/39emSj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Освоить необходимый стек технологий под руководством опытных экспертов на онлайн-курсе «Специализация Fullstack developer» от OTUS.
💻 Программа идеально подойдет для начинающих разработчиков, тех, кто хочет перейти на fullstack и тех, кто хочет попасть в IT, но пока не определился с направлением.
На курсе вас ждут:
- живые вебинары с возможностью задать вопросы экспертам;
- много практики и сильные проекты для портфолио;
- поддержка профессионального комьюнити;
- рассрочка на комфортных условиях.
👉 Оставьте заявку прямо сейчас и получите бесплатные уроки, которые помогут ознакомиться с форматом обучения: https://clck.ru/39emSj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Как адаптировать Android-приложение под Huawei
Всем привет! Меня зовут Миша Вассер, я Head of Android в AGIMA. Мы занимаемся разработкой Digital-продуктов для больших и маленьких компаний, в том числе пилим мобильные приложения.
Не так давно — по сравнению со всей историей Android — Huawei выкатил собственную операционную систему и сказал: «Ребята, вот вам новая система, кайфуйте». Многие отнеслись к новой ОС скептически. Остальным пришлось адаптировать под нее свои Android-приложения.
Мы оказались во второй группе. К нам время от времени обращаются с просьбой помочь с адаптацией под Huawei. И мы неплохо в этом вопросе прокачались. Поэтому сейчас расскажу, что надо сделать, чтобы стало хорошо. А покажу всё это на примере крупного ретейлера, с которым мы работаем.
Читать статью
Всем привет! Меня зовут Миша Вассер, я Head of Android в AGIMA. Мы занимаемся разработкой Digital-продуктов для больших и маленьких компаний, в том числе пилим мобильные приложения.
Не так давно — по сравнению со всей историей Android — Huawei выкатил собственную операционную систему и сказал: «Ребята, вот вам новая система, кайфуйте». Многие отнеслись к новой ОС скептически. Остальным пришлось адаптировать под нее свои Android-приложения.
Мы оказались во второй группе. К нам время от времени обращаются с просьбой помочь с адаптацией под Huawei. И мы неплохо в этом вопросе прокачались. Поэтому сейчас расскажу, что надо сделать, чтобы стало хорошо. А покажу всё это на примере крупного ретейлера, с которым мы работаем.
Читать статью
Telegraph
Как адаптировать Android-приложение под Huawei
Всем привет! Меня зовут Миша Вассер, я Head of Android в AGIMA. Мы занимаемся разработкой Digital-продуктов для больших и маленьких компаний, в том числе пилим мобильные приложения. Не так давно — по сравнению со всей историей Android — Huawei выкатил собственную…
🦾 Как развиваться тестировщику?
👉 Наращивать объем знаний и навыков.
Приглашаем на открытый урок «Разработка сервиса для генерации тестовых данных на Spring Framework» в рамках курса «Kotlin QA Engineer» от OTUS
На уроке мы сфокусируемся на разработке сервиса для генерации тестовых данных на базе Spring Framework. Обсудим важность тестовых сервисов в процессе тестирования, создание заглушек и генераторов данных.
На упрощенном примере реализуем сервис для генерации тестовых пользователей и поговорим о внутреннем устройстве Spring Framework.
🔹Основные темы открытого урока:
- Применение тестовых сервисов для тестирования
- Внутреннее устройство Spring Framework
- Разработка Rest API на примере сервиса для генерации тестовых данных
Не упустите возможность погрузиться в мир разработки на Spring Framework и узнать все об основных принципах создания тестовых сервисов!
👉 Регистрация
https://otus.pw/l6im/?erid=LjN8KWzc1
👉 Наращивать объем знаний и навыков.
Приглашаем на открытый урок «Разработка сервиса для генерации тестовых данных на Spring Framework» в рамках курса «Kotlin QA Engineer» от OTUS
На уроке мы сфокусируемся на разработке сервиса для генерации тестовых данных на базе Spring Framework. Обсудим важность тестовых сервисов в процессе тестирования, создание заглушек и генераторов данных.
На упрощенном примере реализуем сервис для генерации тестовых пользователей и поговорим о внутреннем устройстве Spring Framework.
🔹Основные темы открытого урока:
- Применение тестовых сервисов для тестирования
- Внутреннее устройство Spring Framework
- Разработка Rest API на примере сервиса для генерации тестовых данных
Не упустите возможность погрузиться в мир разработки на Spring Framework и узнать все об основных принципах создания тестовых сервисов!
👉 Регистрация
https://otus.pw/l6im/?erid=LjN8KWzc1
Context receivers — новые extension functions
Поговорим сегодня про context receivers — фиче Kotlin, про которую я узнал давно, но смог найти применение лишь пару месяцев назад. Расскажу о том, что такое context receivers, где их можно использовать, и, конечно же, про «успешный успех» — минус 60% самописного DI в OzonID SDK. Но обо всём по порядку.
Читать статью
Поговорим сегодня про context receivers — фиче Kotlin, про которую я узнал давно, но смог найти применение лишь пару месяцев назад. Расскажу о том, что такое context receivers, где их можно использовать, и, конечно же, про «успешный успех» — минус 60% самописного DI в OzonID SDK. Но обо всём по порядку.
Читать статью
Teletype
Context receivers — новые extension functions
Думаю, не раскрою большой секрет, что Ozon разработал энное количество мобильных приложений: для покупателей, для продавцов, банк...
📱 Хочешь быть в курсе последних технологических инноваций и интернет трендов? Присоединяйся к reposted прямо сейчас!
У нас:
🌪 Горячие новости из мира технологий и интернета;
🌪 Интересное о будущем технологий и нейросетей;
🌪 Эксклюзивные посты про IT-и медиа.
💥 Держи руку на пульсе трендов вместе с reposted
У нас:
🌪 Горячие новости из мира технологий и интернета;
🌪 Интересное о будущем технологий и нейросетей;
🌪 Эксклюзивные посты про IT-и медиа.
💥 Держи руку на пульсе трендов вместе с reposted
Во что компилируется typealias?
Typealias не создает новый тип данных, а только создает псевдоним для существующего типа. При компиляции кода, все typealias заменяются на соответствующий тип, поэтому typealias не приводит к увеличению размера кода.
Например, typealias IntPredicate = (Int) -> Boolean при компиляции будет заменено на (Int) -> Boolean, то есть функцию, принимающую значение типа Int и возвращающую значение типа Boolean.
Можно ли использовать typealias для функциональных типов?
Да, можно использовать typealias для функциональных типов в Kotlin. Например, вы можете создать псевдоним для типа функции, которая принимает два параметра типа Int и возвращает значение типа String, следующим образом:
Typealias не создает новый тип данных, а только создает псевдоним для существующего типа. При компиляции кода, все typealias заменяются на соответствующий тип, поэтому typealias не приводит к увеличению размера кода.
Например, typealias IntPredicate = (Int) -> Boolean при компиляции будет заменено на (Int) -> Boolean, то есть функцию, принимающую значение типа Int и возвращающую значение типа Boolean.
Можно ли использовать typealias для функциональных типов?
Да, можно использовать typealias для функциональных типов в Kotlin. Например, вы можете создать псевдоним для типа функции, которая принимает два параметра типа Int и возвращает значение типа String, следующим образом:
typealias IntToString = (Int, Int) -> StringЭто позволит вам использовать созданный псевдоним вместо полного объявления типа, то есть вместо:
fun processValues(f: (Int, Int) -> String) {можно использовать:
// ...
}
fun processValues(f: IntToString) {Как и в случае с другими typealias, компилятор Kotlin просто заменяет псевдоним на соответствующий тип при компиляции кода.
// ...
}
#вакансия #job #vacancy #remote #parttime #преподаватель #educator #QA #Kotlin
Время делиться знаниями!
Компания: OTUS – образовательная платформа. За более чем 6 лет работы мы создали более 170 авторских курсов для IT-специалистов разного уровня от Junior до Senior. Практически на каждом нашем курсе есть вступительное тестирование для наших студентов, плюс более 650 преподавателей-практиков из крупнейших компаний. Мы учимся друг у друга, советуемся, помогаем, делимся опытом и обсуждаем новости как в преподавании, так и в IT.
Вакансия: преподаватель онлайн-курса «Kotlin QA Engineer» (интересные темы по программе курса и нагрузку можно выбирать).
Эта вакансия будет интересна разработчикам и инженерам по тестированию на Kotlin c практическим опытом в разработке на Kotlin от 1 года. Можно без опыта преподавания. Мы с удовольствием поможем Вам освоить Best Practices преподавания: для этого у нас есть вводный курс по преподаванию и пробные уроки с методистом.
Преподаватель раскрывает тему урока с помощью теории и примеров из практики.
Условия:
✅ удаленное сотрудничество, занятость part-time.
✅стандартное занятие длится 1,5 часа с 20:00 до 21:30 по МСК.
✅ уроки проводятся в онлайн формате в Zoom.
✅ на занятиях используется презентация с теорией и практические примеры, чтобы раскрыть тему урока.
✅ наши методисты помогают освоить лучшие инструменты и практики преподавания.
Еще Вы сможете:
✅ внести свой вклад в развитие IT
✅ структурировать свой опыт и знания.
✅ развивать личный бренд.
✅ прокачать софт-скиллы.
✅ получать от 4000 до 6000 руб. за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ и другие активности, в которых можно по желанию участвовать.
Бонусы:
✅ наши курсы со скидкой/бесплатно.
✅ возможность приглашать в свою команду на работу лучших выпускников.
✅ воркшопы и конференции для наших преподавателей.
Подробнее в telegram: @ElenaAlias
Время делиться знаниями!
Компания: OTUS – образовательная платформа. За более чем 6 лет работы мы создали более 170 авторских курсов для IT-специалистов разного уровня от Junior до Senior. Практически на каждом нашем курсе есть вступительное тестирование для наших студентов, плюс более 650 преподавателей-практиков из крупнейших компаний. Мы учимся друг у друга, советуемся, помогаем, делимся опытом и обсуждаем новости как в преподавании, так и в IT.
Вакансия: преподаватель онлайн-курса «Kotlin QA Engineer» (интересные темы по программе курса и нагрузку можно выбирать).
Эта вакансия будет интересна разработчикам и инженерам по тестированию на Kotlin c практическим опытом в разработке на Kotlin от 1 года. Можно без опыта преподавания. Мы с удовольствием поможем Вам освоить Best Practices преподавания: для этого у нас есть вводный курс по преподаванию и пробные уроки с методистом.
Преподаватель раскрывает тему урока с помощью теории и примеров из практики.
Условия:
✅ удаленное сотрудничество, занятость part-time.
✅стандартное занятие длится 1,5 часа с 20:00 до 21:30 по МСК.
✅ уроки проводятся в онлайн формате в Zoom.
✅ на занятиях используется презентация с теорией и практические примеры, чтобы раскрыть тему урока.
✅ наши методисты помогают освоить лучшие инструменты и практики преподавания.
Еще Вы сможете:
✅ внести свой вклад в развитие IT
✅ структурировать свой опыт и знания.
✅ развивать личный бренд.
✅ прокачать софт-скиллы.
✅ получать от 4000 до 6000 руб. за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ и другие активности, в которых можно по желанию участвовать.
Бонусы:
✅ наши курсы со скидкой/бесплатно.
✅ возможность приглашать в свою команду на работу лучших выпускников.
✅ воркшопы и конференции для наших преподавателей.
Подробнее в telegram: @ElenaAlias
Otus
О компании OTUS
Наша миссия — делать обучение осмысленным, реализуя взаимосвязь между ожиданиями работодателей, компетенциями специалистов и возможностями преподавателей
Какие коллекции есть в Kotlin?
Коллекция — это объект, содержащий в себе набор значений одного или различных типов, а также позволяющий к этим значениям обращаться и извлекать. Другими словами — это контейнер, в который вы можете помещать то, что вам нужно, а затем каким-либо образом с ним взаимодействовать. В Kotlin есть три типа коллекций:
• List (список). Упорядоченная коллекция, в которой к элементам можно обращаться по их индексам. Идентичные элементы (дубликаты) могут встречаться в списке более одного раза. Примером списка является предложение: это группа слов, их порядок важен, и они могут повторяться.
• Set (множество/набор). Неупорядоченная коллекция без повторяющихся значений. Примером множества является алфавит.
• Map (словарь/ассоциативный список). Набор из пар "ключ-значение". Ключи уникальны и каждый из них соответствует ровно одному значению. В коллекции могут присутствовать повторяющиеся значения, но не повторяющиеся ключи. Пример — ID сотрудников и их должностей. Map не является наследником интерфейса Collection.
Два типа интерфейсов, на основе которых создаются коллекции:
1. Неизменяемый (read-only) — дают доступ только для чтения (Set, List, Map, Collection).
2. Изменяемый (mutable) — расширяет предыдущий интерфейс и дополнительно даёт доступ к операциям добавления, удаления и обновления элементов коллекции (
Коллекция — это объект, содержащий в себе набор значений одного или различных типов, а также позволяющий к этим значениям обращаться и извлекать. Другими словами — это контейнер, в который вы можете помещать то, что вам нужно, а затем каким-либо образом с ним взаимодействовать. В Kotlin есть три типа коллекций:
• List (список). Упорядоченная коллекция, в которой к элементам можно обращаться по их индексам. Идентичные элементы (дубликаты) могут встречаться в списке более одного раза. Примером списка является предложение: это группа слов, их порядок важен, и они могут повторяться.
• Set (множество/набор). Неупорядоченная коллекция без повторяющихся значений. Примером множества является алфавит.
• Map (словарь/ассоциативный список). Набор из пар "ключ-значение". Ключи уникальны и каждый из них соответствует ровно одному значению. В коллекции могут присутствовать повторяющиеся значения, но не повторяющиеся ключи. Пример — ID сотрудников и их должностей. Map не является наследником интерфейса Collection.
Два типа интерфейсов, на основе которых создаются коллекции:
1. Неизменяемый (read-only) — дают доступ только для чтения (Set, List, Map, Collection).
2. Изменяемый (mutable) — расширяет предыдущий интерфейс и дополнительно даёт доступ к операциям добавления, удаления и обновления элементов коллекции (
MutableSet
, MutableList
, MutableMap
, MutableCollection
).Все, что вам нужно знать о Kotlin Multiplatform
Kotlin Multiplatform — это набор для разработки программного обеспечения, который значительно лучше других вариантов разработки кроссплатформенных приложений. В этом руководстве по Kotlin multiplatform вы подробно узнаете все об этом наборе.
Читать статью
Kotlin Multiplatform — это набор для разработки программного обеспечения, который значительно лучше других вариантов разработки кроссплатформенных приложений. В этом руководстве по Kotlin multiplatform вы подробно узнаете все об этом наборе.
Читать статью
Teletype
Все, что вам нужно знать о Kotlin Multiplatform
Kotlin Multiplatform — это набор для разработки программного обеспечения, который значительно лучше других вариантов разработки...
Стань частью Android-комьюнити Surf
В канале Surf Android Team разработчики приложений «Лабиринт», «Магнит», «Ригла» и других делятся лучшими практиками и больными шишками из опыта работы с Kotlin, Java и нейросетями.
Вот подборка полезных постов из канала:
➡️ Как сделать Lottie-анимации
➡️ Дорожная карта Junior Android-разработчика
➡️ Как реализовать автовставку кода из SMS через SMS User Consent API
Surf активно расширяет Android-комьюнити и ждёт вас в канале, чтобы делиться интересными кейсами и быть на одной волне актуальных технологий.
🟢 Подписывайтесь по ссылке → @surf_android
В канале Surf Android Team разработчики приложений «Лабиринт», «Магнит», «Ригла» и других делятся лучшими практиками и больными шишками из опыта работы с Kotlin, Java и нейросетями.
Вот подборка полезных постов из канала:
Surf активно расширяет Android-комьюнити и ждёт вас в канале, чтобы делиться интересными кейсами и быть на одной волне актуальных технологий.
Please open Telegram to view this post
VIEW IN TELEGRAM
Промежуточные (intermediate) и терминальные (terminal) операции в Sequences
Sequence представляет собой последовательность элементов, которые можно обрабатывать по одному или несколько штук сразу. Обработка элементов Sequence происходит с помощью функций высшего порядка, которые называются операциями.
Операции над Sequence можно разделить на две категории: промежуточные (intermediate) и терминальные (terminal).
Промежуточные операции (intermediate) — это операции, которые возвращают новую Sequence.
Они не выполняются немедленно, а лишь формируют новую последовательность элементов на основе исходной. Промежуточные операции не приводят к запуску вычислений, а готовят данные для последующих операций. Примеры:
filter(predicate: (T) -> Boolean): фильтрует элементы по заданному условию и возвращает новую Sequence
map(transform: (T) -> R): преобразует каждый элемент в новый элемент типа R и возвращает новую Sequence
sortedBy(selector: (T) -> R?): сортирует элементы по заданному ключу и возвращает новую Sequence
Терминальные операции (terminal) — это операции, которые выполняются немедленно и возвращают результат (не Sequence).
Терминальные операции могут быть вызваны только после всех промежуточных операций, так как они завершают последовательность и начинают вычисление результатов на основе всей последовательности, полученной после выполнения всех промежуточных операций. Если же терминальная операция вызывается до выполнения всех промежуточных операций, то она не будет иметь доступа к полной последовательности и вернет неполный результат. Примеры:
toList(): преобразует Sequence в список
toSet(): преобразует Sequence в множество
count(): возвращает количество элементов в Sequence
forEach(action: (T) -> Unit): выполняет действие для каждого элемента Sequence
ВАЖНО: вычисления запускаются только при вызове терминальной функции (до этого момента никаких вычислений не производится).
Sequence представляет собой последовательность элементов, которые можно обрабатывать по одному или несколько штук сразу. Обработка элементов Sequence происходит с помощью функций высшего порядка, которые называются операциями.
Операции над Sequence можно разделить на две категории: промежуточные (intermediate) и терминальные (terminal).
Промежуточные операции (intermediate) — это операции, которые возвращают новую Sequence.
Они не выполняются немедленно, а лишь формируют новую последовательность элементов на основе исходной. Промежуточные операции не приводят к запуску вычислений, а готовят данные для последующих операций. Примеры:
filter(predicate: (T) -> Boolean): фильтрует элементы по заданному условию и возвращает новую Sequence
map(transform: (T) -> R): преобразует каждый элемент в новый элемент типа R и возвращает новую Sequence
sortedBy(selector: (T) -> R?): сортирует элементы по заданному ключу и возвращает новую Sequence
Терминальные операции (terminal) — это операции, которые выполняются немедленно и возвращают результат (не Sequence).
Терминальные операции могут быть вызваны только после всех промежуточных операций, так как они завершают последовательность и начинают вычисление результатов на основе всей последовательности, полученной после выполнения всех промежуточных операций. Если же терминальная операция вызывается до выполнения всех промежуточных операций, то она не будет иметь доступа к полной последовательности и вернет неполный результат. Примеры:
toList(): преобразует Sequence в список
toSet(): преобразует Sequence в множество
count(): возвращает количество элементов в Sequence
forEach(action: (T) -> Unit): выполняет действие для каждого элемента Sequence
ВАЖНО: вычисления запускаются только при вызове терминальной функции (до этого момента никаких вычислений не производится).
Kotlin: взгляд изнутри — преимущества, недостатки и особенности
Всем привет! На связи Сергей Керенцев, Android-разработчик Студии Олега Чулакова на проектах Сбера.
В данной статье мы углубимся в мир Kotlin, рассмотрим его основные преимущества, недостатки и особенности. Мы обойдем такие важные аспекты, как безопасность работы с null-значениями, гибкость типизации с помощью Generics, возможности расширения функциональности с помощью extension-функций, inline-функции, а также многое другое.
Давайте начнем наше увлекательное путешествие в мир Kotlin и раскроем его потенциал!
Читать статью
Всем привет! На связи Сергей Керенцев, Android-разработчик Студии Олега Чулакова на проектах Сбера.
В данной статье мы углубимся в мир Kotlin, рассмотрим его основные преимущества, недостатки и особенности. Мы обойдем такие важные аспекты, как безопасность работы с null-значениями, гибкость типизации с помощью Generics, возможности расширения функциональности с помощью extension-функций, inline-функции, а также многое другое.
Давайте начнем наше увлекательное путешествие в мир Kotlin и раскроем его потенциал!
Читать статью
Teletype
Kotlin: взгляд изнутри — преимущества, недостатки и особенности
Всем привет! На связи Сергей, Android-разработчик Студии Олега Чулакова на проектах Сбера.
Kotlin Multiplatform в ОС Аврора
В данной статье описана работа ОС Аврора с технологией Kotlin Multiplatform. Рассматривается метод подключения модуля Kotlin Multiplatform к приложению на Qt/QML. Для демонстрации было портировано уже существующие демо приложение "KMM RSS Reader". Проведены тесты производительности.
Читать статью
В данной статье описана работа ОС Аврора с технологией Kotlin Multiplatform. Рассматривается метод подключения модуля Kotlin Multiplatform к приложению на Qt/QML. Для демонстрации было портировано уже существующие демо приложение "KMM RSS Reader". Проведены тесты производительности.
Читать статью
Teletype
Kotlin Multiplatform в ОС Аврора
Kotlin Multiplatform — технология, позволяющая объединять бизнес-логику для приложений разных платформ. В ней доступен полный контроль...
Что такое функциональный тип, какие у него ограничения?
Язык Kotlin допускает объявлять тип анонимных функций или лямбда выражений — функциональный.
Функциональный тип — это тип данных, который позволяет работать с функциями как с обычными объектами, передавать функции в качестве аргументов и возвращать их из функций. Синтаксис функционального типа в Котлин представлен списком типов параметров, разделенных запятой, затем оператором -> и типом возвращаемого значения функции.
Пример функционального типа: (a: Int, b: Int) -> Int
Здесь функциональный тип описывает функцию с двумя параметрами типа Int и возвращаемым значением типа Int.
Функциональный тип может быть использован для создания переменных, которые могут хранить ссылки на функции. А также поддерживает перегрузку, что позволяет иметь несколько функций с различными сигнатурами, но с одинаковым именем.
Ограничения функционального типа:
• Тип передаваемой функции должен быть определен явно, чтобы компилятор мог проверить типы аргументов и возвращаемых значений.
• Функциональный тип может содержать только один тип возвращаемого значения.
• Функциональный тип не может содержать более 22 параметров из-за ограничения JVM.
• Функциональный тип не поддерживает неявные преобразования типов.
Несмотря на эти ограничения, функциональные типы позволяют обрабатывать функции как объекты, что повышает гибкость и выразительность кода. Пример определения функционального типа:
Язык Kotlin допускает объявлять тип анонимных функций или лямбда выражений — функциональный.
Функциональный тип — это тип данных, который позволяет работать с функциями как с обычными объектами, передавать функции в качестве аргументов и возвращать их из функций. Синтаксис функционального типа в Котлин представлен списком типов параметров, разделенных запятой, затем оператором -> и типом возвращаемого значения функции.
Пример функционального типа: (a: Int, b: Int) -> Int
Здесь функциональный тип описывает функцию с двумя параметрами типа Int и возвращаемым значением типа Int.
Функциональный тип может быть использован для создания переменных, которые могут хранить ссылки на функции. А также поддерживает перегрузку, что позволяет иметь несколько функций с различными сигнатурами, но с одинаковым именем.
Ограничения функционального типа:
• Тип передаваемой функции должен быть определен явно, чтобы компилятор мог проверить типы аргументов и возвращаемых значений.
• Функциональный тип может содержать только один тип возвращаемого значения.
• Функциональный тип не может содержать более 22 параметров из-за ограничения JVM.
• Функциональный тип не поддерживает неявные преобразования типов.
Несмотря на эти ограничения, функциональные типы позволяют обрабатывать функции как объекты, что повышает гибкость и выразительность кода. Пример определения функционального типа:
// определение функционального типаКод из примера определяет функциональный тип Operation, который представляет собой функцию, принимающую два аргумента типа Int и возвращающую значение типа Int. Затем создается функция calculate, которая принимает три параметра: функцию op типа Operation и два аргумента типа Int. Внутри функции calculate вызывается переданная функция op с переданными аргументами a и b, и результат возвращается из функции calculate. В конце кода создается переменная sum, которая содержит лямбда-выражение, реализующее операцию сложения. Далее вызывается функция calculate с параметрами sum, 10 и 5, что приводит к вызову функции sum с аргументами 10 и 5, и результатом является число 15.
typealias Operation = (Int, Int) -> Int
// использование функционального типа
fun calculate(op: Operation, a: Int, b: Int): Int {
return op(a, b)
}
// пример вызова функции calculate
val sum: Operation = { x, y -> x + y }
calculate(sum, 10, 5) // результат: 15
✅ Какие навыки необходимы для эффективного тестирования на Kotlin?
Получите их на бесплатном открытом уроке «Использование KSP2 для тестирования на Kotlin» в рамках курса «Kotlin QA Engineer» от OTUS
🔹На вебинаре мы погрузимся в мир новой версии Kotlin Symbol Processing - KSP2. Рассмотрим принципы анализа исходных текстов и кодогенерации на KSP (PSI-дерево) и обсудим возможности ее применения для генерации тестовых данных и сценариев.
👉 Регистрация
https://otus.pw/7Pwn/?erid=LjN8KHUvr
Получите их на бесплатном открытом уроке «Использование KSP2 для тестирования на Kotlin» в рамках курса «Kotlin QA Engineer» от OTUS
🔹На вебинаре мы погрузимся в мир новой версии Kotlin Symbol Processing - KSP2. Рассмотрим принципы анализа исходных текстов и кодогенерации на KSP (PSI-дерево) и обсудим возможности ее применения для генерации тестовых данных и сценариев.
👉 Регистрация
https://otus.pw/7Pwn/?erid=LjN8KHUvr
Как работают SAM-conversions?
Single Abstract Method (SAM) интерфейсы — это интерфейсы только с одним абстрактным методом (функциональные интерфейсы). Kotlin поддерживает соглашение SAM — автоматическую конвертацию функций и lambda между Kotlin и Java.
SAM-conversions позволяют использовать Java-интерфейсы с единственным абстрактным методом в Kotlin, как если бы это были функциональные типы. В Kotlin вы можете использовать такие интерфейсы для создания лямбда-выражений без явного определения функционального типа.
При использовании интерфейса с единственным абстрактным методом в качестве функционального интерфейса в Java, вы можете передавать его экземпляры вместо лямбда-выражений. Это тоже возможно в Kotlin, но на самом деле Kotlin предоставляет более простой синтаксис для этого. Когда вам нужно использовать функциональный интерфейс в Kotlin, вы можете передать lambda-выражение, которое соответствует сигнатуре единственного метода интерфейса, вместо экземпляра интерфейса. Компилятор сам преобразует лямбда-выражение в экземпляр интерфейса, используя функцию-расширение метода invoke интерфейса. Пример:
Single Abstract Method (SAM) интерфейсы — это интерфейсы только с одним абстрактным методом (функциональные интерфейсы). Kotlin поддерживает соглашение SAM — автоматическую конвертацию функций и lambda между Kotlin и Java.
SAM-conversions позволяют использовать Java-интерфейсы с единственным абстрактным методом в Kotlin, как если бы это были функциональные типы. В Kotlin вы можете использовать такие интерфейсы для создания лямбда-выражений без явного определения функционального типа.
При использовании интерфейса с единственным абстрактным методом в качестве функционального интерфейса в Java, вы можете передавать его экземпляры вместо лямбда-выражений. Это тоже возможно в Kotlin, но на самом деле Kotlin предоставляет более простой синтаксис для этого. Когда вам нужно использовать функциональный интерфейс в Kotlin, вы можете передать lambda-выражение, которое соответствует сигнатуре единственного метода интерфейса, вместо экземпляра интерфейса. Компилятор сам преобразует лямбда-выражение в экземпляр интерфейса, используя функцию-расширение метода invoke интерфейса. Пример:
interface OnClickListener {В этом примере мы определяем интерфейс OnClickListener с единственным абстрактным методом onClick. Затем мы создаем класс Button, который может иметь слушатель, реализующий данный интерфейс. После этого мы создаем экземпляр Button и передаем лямбда-выражение с соответствующей сигнатурой в качестве слушателя. Компилятор автоматически преобразует это лямбда-выражение в экземпляр интерфейса OnClickListener, используя функцию-расширение invoke интерфейса.
fun onClick(view: View)
}
class Button {
fun setOnClickListener(listener: OnClickListener) {
// ...
}
}
val button = Button()
button.setOnClickListener { view ->
// обработка нажатия кнопки
}
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Пройди тест по Kotlin QA и проверь свои знания.
Ответишь — пройдешь на продвинутый курс «Kotlin QA Engineer» от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса
👉 ПРОЙТИ ТЕСТ:
https://clck.ru/3ABEtm?erid=LjN8JvK8k
Ответишь — пройдешь на продвинутый курс «Kotlin QA Engineer» от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса
👉 ПРОЙТИ ТЕСТ:
https://clck.ru/3ABEtm?erid=LjN8JvK8k