Опубликовал новую статью на тему Value-классы в Kotlin.
Иногда в процессе разработки на Kotlin требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
Механизм value class используется и в стандартной библиотеке Kotlin. Например, беззнаковое целое UInt представлено как обёртка над стандартным целым числом Int.
Поэтому, если Вы согласны с тезисом «чем строже типизация – тем лучше», тогда смело используйте value-классы.
Иногда в процессе разработки на Kotlin требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
Механизм value class используется и в стандартной библиотеке Kotlin. Например, беззнаковое целое UInt представлено как обёртка над стандартным целым числом Int.
Поэтому, если Вы согласны с тезисом «чем строже типизация – тем лучше», тогда смело используйте value-классы.
👍4
На моём сайте появилась новая статья про перебор элементов с помощью интерфейса Iterator в Java.
Интерфейс Iterator представляет собой простой способ обхода коллекций благодаря методам next() и hasNext().
Интерфейс Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции. Использование интерфейса Iterable позволяет сделать код более компактным и читаемым.
Интерфейс Iterator представляет собой простой способ обхода коллекций благодаря методам next() и hasNext().
Интерфейс Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции. Использование интерфейса Iterable позволяет сделать код более компактным и читаемым.
🔥6
Сегодня исполняется 232 года со дня рождения Чарлза Бэббиджа, английского математика и изобретателя первой вычислительной машины (в те времена ещё механической).
Чарлз родился 26 декабря 1791 года в Лондоне в семье банкира Бенджамина Бэббиджа. В 1810 году Бэббидж поступил в Тринити-колледж в Кембридже. Однако основам математики он обучался самостоятельно по книжкам. Он тщательно изучал труды Ньютона, Лейбница, Лагранжа, Лакруа, Эйлера и других математиков академий Санкт-Петербурга, Берлина и Парижа.
Бэббидж разработал разностную машину, которая не была успешной, но стала основой для дальнейших разработок.
Он также задумывался о создании программируемой вычислительной машины, известной как аналитическая машина.
Эта машина имела сходную архитектуру с современными компьютерами и включала "склад" (память), "мельницу" (процессор), управляющий элемент и устройства ввода-вывода информации.
В разработке аналитической машины Бэббиджу помогала Ада Лавлейс, первая женщина-программист, о которой я писал ранее.
Чарлз родился 26 декабря 1791 года в Лондоне в семье банкира Бенджамина Бэббиджа. В 1810 году Бэббидж поступил в Тринити-колледж в Кембридже. Однако основам математики он обучался самостоятельно по книжкам. Он тщательно изучал труды Ньютона, Лейбница, Лагранжа, Лакруа, Эйлера и других математиков академий Санкт-Петербурга, Берлина и Парижа.
Бэббидж разработал разностную машину, которая не была успешной, но стала основой для дальнейших разработок.
Он также задумывался о создании программируемой вычислительной машины, известной как аналитическая машина.
Эта машина имела сходную архитектуру с современными компьютерами и включала "склад" (память), "мельницу" (процессор), управляющий элемент и устройства ввода-вывода информации.
В разработке аналитической машины Бэббиджу помогала Ада Лавлейс, первая женщина-программист, о которой я писал ранее.
👍3
В очередной раз переработал и расширил статью про создание telegram-бота на Kotlin и Spring Boot, а также обновил пример проекта в github.
В текущей версии я демонстрирую более простой способ создания команд бота. Также перевёл проект на Java 21 и Spring Boot 3.2.
Чуть позже планирую обновить видеоролик на YouTube с учётом этих изменений.
В текущей версии я демонстрирую более простой способ создания команд бота. Также перевёл проект на Java 21 и Spring Boot 3.2.
Чуть позже планирую обновить видеоролик на YouTube с учётом этих изменений.
🔥8
Сегодня Линус Торвальдс празднует свой 54-й день рождения! Будущий создатель ОС Linux родился 28 декабря 1969 в Хельсинки в семье финских шведов Нильса и Анны Торвальдс.
В 1981 году дед Линуса познакомил внука с домашним компьютером Commodore VIC-20, использовавшимся им для математических вычислений. Линус заинтересовался программированием.
Значимым событием в жизни Торвальдса стало прочтение им книги Эндрю Таненбаума «Операционные системы: разработка и реализация». В книге на примере написанной Таненбаумом ОС Minix представлена структура систем семейства UNIX.
Обнаружив недостатки в системе, он начал писать собственный эмулятор терминала. Затем Торвальдс добавлял в программу всё новые функции, благодаря чему она вскоре стала обретать черты полноценной ОС.
17 сентября 1991 года Торвальдс выложил исходный код программы (версии 0.01) для общедоступной загрузки. Таненбаум выступил с резкой критикой системы. Однако он ошибся. Популярность системы росла, и позже о ней заговорили во всём мире.
В 1981 году дед Линуса познакомил внука с домашним компьютером Commodore VIC-20, использовавшимся им для математических вычислений. Линус заинтересовался программированием.
Значимым событием в жизни Торвальдса стало прочтение им книги Эндрю Таненбаума «Операционные системы: разработка и реализация». В книге на примере написанной Таненбаумом ОС Minix представлена структура систем семейства UNIX.
Обнаружив недостатки в системе, он начал писать собственный эмулятор терминала. Затем Торвальдс добавлял в программу всё новые функции, благодаря чему она вскоре стала обретать черты полноценной ОС.
17 сентября 1991 года Торвальдс выложил исходный код программы (версии 0.01) для общедоступной загрузки. Таненбаум выступил с резкой критикой системы. Однако он ошибся. Популярность системы росла, и позже о ней заговорили во всём мире.
👍2🍾2
Написал вторую статью про создание Telegram-бота на Spring Boot и Kotlin, в которой привожу пример работы с inline-кнопками.
Эти кнопки отличаются от обычных тем, что позволяют передавать контекст, в рамках которого они были нажаты. Этот контекст позволяет передавать любую необходимую информацию, и пользователь её не увидит.
Таким образом, у нас появляется возможность реализовывать более сложный функционал, улучшая пользовательский опыт взаимодействия с ботом.
Эти кнопки отличаются от обычных тем, что позволяют передавать контекст, в рамках которого они были нажаты. Этот контекст позволяет передавать любую необходимую информацию, и пользователь её не увидит.
Таким образом, у нас появляется возможность реализовывать более сложный функционал, улучшая пользовательский опыт взаимодействия с ботом.
👍3🤗2🌭1
Поздравляю с Новым годом, друзья!
В уходящем году произошло немало интересных вещей в мире разработки. Мы увидели много новых технологий и инструментов, которые помогут нам стать более эффективными. Особенно бурный рост испытали нейросети — они стали незаменимыми во многих сферах и продолжают развиваться с каждым днём.
Я хочу пожелать вам не только следить за новыми технологиями, но и научиться применять их в своей работе. Не бойтесь экспериментировать и искать новые подходы к решению задач. Так вы сможете стать настоящими профессионалами в своей области.
P.S. Следуя трендам, поздравительный кот также сгенерирован нейросетью)
В уходящем году произошло немало интересных вещей в мире разработки. Мы увидели много новых технологий и инструментов, которые помогут нам стать более эффективными. Особенно бурный рост испытали нейросети — они стали незаменимыми во многих сферах и продолжают развиваться с каждым днём.
Я хочу пожелать вам не только следить за новыми технологиями, но и научиться применять их в своей работе. Не бойтесь экспериментировать и искать новые подходы к решению задач. Так вы сможете стать настоящими профессионалами в своей области.
P.S. Следуя трендам, поздравительный кот также сгенерирован нейросетью)
👍2🎉2🎄2
Ранее я публиковал статью про новые интерфейсы SequencedCollection и SequencedSet, которые появились в Java 21. Они расширяют базовый интерфейс Collection, добавляя в него ряд полезных методов для манипуляций с первым и последним элементами, а также для инвертирования коллекции.
Теперь я подготовил видео на эту же тему для тех, кому удобнее смотреть, чем читать.
Подписывайтесь, ставьте лайки и пишите комментарии - так вы сможете поучаствовать в продвижении проекта.
Теперь я подготовил видео на эту же тему для тех, кому удобнее смотреть, чем читать.
Подписывайтесь, ставьте лайки и пишите комментарии - так вы сможете поучаствовать в продвижении проекта.
👍5
В продолжение темы SequencedCollection на YouTube выложил ролик про SequencedMap. То же самое, но в виде текста, можно прочитать здесь.
Интерфейс SequencedMap расширяет стандартный Map, добавляя в него методы для доступа и манипулирования первым и последним элементами. В отличие от SequencedCollection, здесь мы манипулируем не отдельными значениями, а сразу парой «ключ-значение», представленной Map.Entry.
Интерфейс SequencedMap расширяет стандартный Map, добавляя в него методы для доступа и манипулирования первым и последним элементами. В отличие от SequencedCollection, здесь мы манипулируем не отдельными значениями, а сразу парой «ключ-значение», представленной Map.Entry.
🔥3👍1
Опубликовал видео на YouTube про value-классы в Kotlin.
Иногда в процессе разработки требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
Иногда в процессе разработки требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
👍6
По мотивам статьи записал видео про ещё одну production-ready фичу из Java 21 - Pattern matching в switch.
Если ранее в этой конструкции мы могли проверять только константные значения, то теперь мы можем проверять тип переменной и в случае успеха компилятор автоматически выполнит приведение к этому типу.
Кроме того, pattern matching в switch работает также и для record-классов. Помимо приведения к типу, мы также автоматически получаем доступ ко всем значимым полям этого класса, что позволяет избегать громоздких вызовов get-методов.
Если ранее в этой конструкции мы могли проверять только константные значения, то теперь мы можем проверять тип переменной и в случае успеха компилятор автоматически выполнит приведение к этому типу.
Кроме того, pattern matching в switch работает также и для record-классов. Помимо приведения к типу, мы также автоматически получаем доступ ко всем значимым полям этого класса, что позволяет избегать громоздких вызовов get-методов.
👍5
В дополнение к статье про итератор записал видео для YouTube.
Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации).
Iterator представляет собой одноимённый шаблон проектирования «Итератор».
Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции.
Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации).
Iterator представляет собой одноимённый шаблон проектирования «Итератор».
Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции.
👍5
В повседневной работе никто из нас не компилирует исходники ☕️ Java вручную. За нас это делают такие инструменты как maven, gradle или среда разработки типа 💡 Idea.
Но для понимания процессов, которые происходят при каждом тестовом запуске вашего приложения, имеет смысл хотя бы один попробовать это сделать самостоятельно прямо из консоли.
Поэтому по мотивам 📗 статьи я подготовил 📺 видео, где привожу пример компиляции исходников Java из консоли вручную.
Но для понимания процессов, которые происходят при каждом тестовом запуске вашего приложения, имеет смысл хотя бы один попробовать это сделать самостоятельно прямо из консоли.
Поэтому по мотивам 📗 статьи я подготовил 📺 видео, где привожу пример компиляции исходников Java из консоли вручную.
👍10
Добавил на YouTube новое видео о том, как сохранять большие текстовые файлы на Java наиболее оптимальным образом. Текстовый вариант доступен на сайте.
Давайте сгенерируем строку из случайных символов на Java и затем сохраним её в текстовый файл. Строка должна быть очень большой (более 100 миллионов символов), чтобы мы могли легко заметить разницу во времени, которое требуется на сохранение файла.
Рассмотрим 3 варианта: обычный FileWriter, FileWriter с буферизацией и неблокирующее сохранение файла с помощью пакета java.nio. В конце подведём итоги.
Давайте сгенерируем строку из случайных символов на Java и затем сохраним её в текстовый файл. Строка должна быть очень большой (более 100 миллионов символов), чтобы мы могли легко заметить разницу во времени, которое требуется на сохранение файла.
Рассмотрим 3 варианта: обычный FileWriter, FileWriter с буферизацией и неблокирующее сохранение файла с помощью пакета java.nio. В конце подведём итоги.
👍4🔥1
Новое 📺 видео на YouTube канале!
Давайте научимся читать большой текстовый файл построчно. При этом каждую строку будем как-то обрабатывать. Например, будем искать наибольшую длину строки.
Поскольку размер файла больше 100 МБ, его чтение происходит с небольшой задержкой. Мы рассмотрим три варианта реализации такого чтения и выберем наиболее быстрый из них.
Также данный материал доступен в виде 📗 статьи.
Давайте научимся читать большой текстовый файл построчно. При этом каждую строку будем как-то обрабатывать. Например, будем искать наибольшую длину строки.
Поскольку размер файла больше 100 МБ, его чтение происходит с небольшой задержкой. Мы рассмотрим три варианта реализации такого чтения и выберем наиболее быстрый из них.
Также данный материал доступен в виде 📗 статьи.
👍4
Новое 📺 видео на YouTube-канале!
Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой.
Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более того, текстовый файл может быть сколь угодно большим, поэтому мы будем использовать буферизацию потока, чтобы не израсходовать всю доступную оперативную память.
Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой.
Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более того, текстовый файл может быть сколь угодно большим, поэтому мы будем использовать буферизацию потока, чтобы не израсходовать всю доступную оперативную память.
👍5
JetBrains анонсирует онлайн-конференцию IntelliJ IDEA Conf 2024, которая пройдёт в онлайн-формате 6 и 7 марта.
Вот некоторые темы, которые будут на ней обсуждаться:
🔹Улучшении производительности IntelliJ IDEA.
🔹Функции и классы стандартной библиотеки Kotlin.
🔹Основы безопасной разработки для защиты приложений.
🔹Изменения, грядущие в Java 22 и последующих версиях.
🔹Создание приложений с использованием ChatGPT API.
🔹Освоение Java-тестирования с использованием JUnit, Mockito и AssertJ в IntelliJ IDEA.
Участие бесплатное, требуется предварительная регистрация.
Вот некоторые темы, которые будут на ней обсуждаться:
🔹Улучшении производительности IntelliJ IDEA.
🔹Функции и классы стандартной библиотеки Kotlin.
🔹Основы безопасной разработки для защиты приложений.
🔹Изменения, грядущие в Java 22 и последующих версиях.
🔹Создание приложений с использованием ChatGPT API.
🔹Освоение Java-тестирования с использованием JUnit, Mockito и AssertJ в IntelliJ IDEA.
Участие бесплатное, требуется предварительная регистрация.
👍3
В продолжение предыдущей темы, канал YABED (мои хорошие знакомые) является информационным партнёром конференции и потому проводит розыгрыш лицензий JetBrains All Products Pack! Для участия в розыгрыше достаточно подписаться на их канал и нажать кнопку "Участвую".
👍3
Forwarded from YABED - Yet Another BackEnd Digest: Java/Kotlin
🚀 Всем привет! Как вы уже знаете, наш канал выступает информационным партнёром конференции IntelliJ IDEA Conf 2024. В программе много годноты – обязательно к просмотру. Регистрируйтесь по ссылке здесь.
🏆 А мы выполняем обещание и специально к конференции проводим розыгрыш ДВУХ кодов активации для полного набора инструментов для разработки JetBrains All Products Pack!
Что нужно сделать, чтобы принимать участие?
✅ быть подписанным на наш канал
✅ нажать кнопку "Участвую"
🎯 Итоги мы подведём 29 февраля с помощью рандомайзера. Всё честно и просто.
Вперёд, за призами и присоединяйтесь к IntelliJ IDEA Conf 2024! Удачи!
#IntelliJIDEAConf
🏆 А мы выполняем обещание и специально к конференции проводим розыгрыш ДВУХ кодов активации для полного набора инструментов для разработки JetBrains All Products Pack!
Что нужно сделать, чтобы принимать участие?
✅ быть подписанным на наш канал
✅ нажать кнопку "Участвую"
🎯 Итоги мы подведём 29 февраля с помощью рандомайзера. Всё честно и просто.
Вперёд, за призами и присоединяйтесь к IntelliJ IDEA Conf 2024! Удачи!
#IntelliJIDEAConf
👍3
На моём YouTube-канале в комментах под видео про итераторы пользователь karakurty попросил меня рассказать также про ConcurrentModificationException в контексте данной темы.
Поэтому в статью я добавил новый раздел о том, как менять ту же коллекцию, по которой производим перебор элементов.
P.S. Мне на самом деле очень приятно, когда аудитория моего канала предлагает различные улучшения и дополнения к тому материалу, который я публикую. В своё время так уже было с видео про поиск простых чисел, когда предложенный зрителем альтернативный алгоритм оказался гораздо более быстрым, чем рассмотренная мною реализация. И это в итоге привело даже к созданию отдельной статьи.
Поэтому в статью я добавил новый раздел о том, как менять ту же коллекцию, по которой производим перебор элементов.
P.S. Мне на самом деле очень приятно, когда аудитория моего канала предлагает различные улучшения и дополнения к тому материалу, который я публикую. В своё время так уже было с видео про поиск простых чисел, когда предложенный зрителем альтернативный алгоритм оказался гораздо более быстрым, чем рассмотренная мною реализация. И это в итоге привело даже к созданию отдельной статьи.
YouTube
Интерфейсы Iterator и Iterable в Java
#devmark #java #collections Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации). Iterator представляет…
👍5
Хочу поделиться с вами небольшой статистикой. В прошедший уик-энд количество подписчиков в этой группе перевалило за 100!
Это не может не радовать, т.к. помимо основной аудитории на моём YouTube-канале, чуть меньшей аудитории на сайте, telegram - это третья площадка, которая медленно, но верно также развивается.
Спасибо вам за те комментарии, вопросы и предложения, которые вы пишете - это позволяет создавать более качественный контент!
Это не может не радовать, т.к. помимо основной аудитории на моём YouTube-канале, чуть меньшей аудитории на сайте, telegram - это третья площадка, которая медленно, но верно также развивается.
Спасибо вам за те комментарии, вопросы и предложения, которые вы пишете - это позволяет создавать более качественный контент!
👍11❤1🔥1👏1