<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Комментарии / Профиль infinity_coder]]></title>
    <link>https://habr.com/ru/users/infinity_coder/comments/</link>
    <description><![CDATA[Хабр: комментарии пользователя infinity_coder]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Sat, 25 Apr 2026 02:30:23 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      

      
        
  
    <item>
      <title>05.07.2025 10:48:53 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/alfa/articles/917998/#comment_28531642</guid>
      <link>https://habr.com/ru/companies/alfa/articles/917998/#comment_28531642</link>
      <description><![CDATA[<p>Поправили опечатки<br>Спасибо за комментарий! </p>]]></description>
      <pubDate>Sat, 05 Jul 2025 10:48:53 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.06.2025 20:40:11 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/alfa/articles/916536/#comment_28464770</guid>
      <link>https://habr.com/ru/companies/alfa/articles/916536/#comment_28464770</link>
      <description><![CDATA[<p>Спасибо за комментарий! <br><br>К сожалению, я не понял как он относится к теме статьи. Попробуйте переформулировать его</p>]]></description>
      <pubDate>Fri, 20 Jun 2025 20:40:11 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.06.2025 20:36:16 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/alfa/articles/916536/#comment_28464756</guid>
      <link>https://habr.com/ru/companies/alfa/articles/916536/#comment_28464756</link>
      <description><![CDATA[<p>Спасибо за комментарий! <br>Действительно в некоторых местах я опирался на те материалы, которые я прикрепил в статье. Здорово, что вы заинтересовались темой, и прочли в том числе и прикрепленные к статье материалы! <br><br>Достойное применение контрактов можно посмотреть в стандартной библиотеке Kotlin. Именно отсюда я старался брать примеры для раздела "Contracts DSL". <br><br>Поломку неизменяемости я привел в пример, чтобы дать понять почему важно писать валидные контракты, и что произойдет если написать неправильный контракт. На практике, конечно, не рекомендуется использовать такие особенности Kotlin контрактов и специально ломать Kotlin компилятор :)</p><blockquote><p>Если это отключение длинных проверок для увеличения производительности, хорошо</p></blockquote><p>Контракты нельзя применять для таких кейсов. Они про другое: расширить знания компилятора, чтобы улучшить smart-cast'ы и убрать лишние проверки на null или типы. </p><p>Я специально привел в пример функцию, которая выглядит просто как обертка ради обетки, чтобы максимально упростить код. <br><br>Хорошие примеры функций, которые нужны в реальной жизни: `<code>check(...)</code>`, <code>isNullOrEmpty()</code>. Чтобы лучше понять зачем нужны контракты, попробуйте скопировать эти функции из стандартной библиотеки Kotlin и убрать оттуда контракты. После этого компилятор начнет ругаться, что переменные nullable типа, которые очевидно не могут быть <code>null</code>  после вызова функции</p>]]></description>
      <pubDate>Fri, 20 Jun 2025 20:36:16 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>24.10.2024 18:36:44 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/alfa/articles/837880/#comment_27464598</guid>
      <link>https://habr.com/ru/companies/alfa/articles/837880/#comment_27464598</link>
      <description><![CDATA[<p>Классная поучительная статья с долей фана. То, что нужно после рабочего дня :) Спасибо!</p>]]></description>
      <pubDate>Thu, 24 Oct 2024 18:36:44 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>17.03.2024 12:23:20 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/alfa/articles/799873/#comment_26620801</guid>
      <link>https://habr.com/ru/companies/alfa/articles/799873/#comment_26620801</link>
      <description><![CDATA[<p>Для генерации кода в одномодульном проекте можно использовать встренную в Android Studio фичу "File and Code Templates". Она позволяет генерировать сразу серию файлов и пакетов без написания собственного плагина</p>]]></description>
      <pubDate>Sun, 17 Mar 2024 12:23:20 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>17.03.2024 07:53:20 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/alfa/articles/799873/#comment_26620281</guid>
      <link>https://habr.com/ru/companies/alfa/articles/799873/#comment_26620281</link>
      <description><![CDATA[<p>Спасибо за статью, Алексей! Тема достаточно полно и просто раскрыта для того, чтобы попробовать самому написать свой плагин. <br><br>Я бы только добавил, что по умолчанию в Intellij IDEA не будет доступен пункт "IDE Plugin" в Community Edition при создании проекта. Для добавления этого пункта нужно из Plugin Marketplace скачать плагин "Plugin Dev Kit". </p>]]></description>
      <pubDate>Sun, 17 Mar 2024 07:53:20 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>28.10.2022 10:31:21 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/dododev/articles/694746/#comment_24860218</guid>
      <link>https://habr.com/ru/companies/dododev/articles/694746/#comment_24860218</link>
      <description><![CDATA[<p>Топовая статья! <br>Когда я работал в Альфе, я наткнулся на тот же самый баг, пришлось его исследовать. Рад, что появилась статья, которую в случае чего можно скинуть, если кто-то захочет сохранять среднего/большого размера данные в fragments/activity. Особенно если fragments/activity много. <br><br>Спасибо за столь подробный разбор :)</p>]]></description>
      <pubDate>Fri, 28 Oct 2022 10:31:21 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.05.2022 16:08:10 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/moex/articles/586192/#comment_24362412</guid>
      <link>https://habr.com/ru/companies/moex/articles/586192/#comment_24362412</link>
      <description><![CDATA[<p>Удобный подход. Спасибо за статью!</p>]]></description>
      <pubDate>Fri, 20 May 2022 16:08:10 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>05.03.2021 09:42:24 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/badoo/articles/545260/#comment_22768576</guid>
      <link>https://habr.com/ru/companies/badoo/articles/545260/#comment_22768576</link>
      <description><![CDATA[Оптимизацию в ~4% пользователи вряд ли заметят. А вот программисты будут тратить слишком много времени, чтобы обдумывать где нужен data класс, а где нет, а в дальнейшем будут проверять есть ли ключевое слово data у модели, с которой работает программист. В итоге, такое тщательное обдумывание может повлечь за собой больше багов, так как уменьшится предсказуемость кода. <br>
Автору большое спасибо за статью! Отличная работа :)]]></description>
      <pubDate>Fri, 05 Mar 2021 09:42:24 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.10.2020 09:36:57 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22202838</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22202838</link>
      <description><![CDATA[Спасибо за комментарий! <br>
<br>
Я полностью разделяю Вашу точку зрения и придерживаюсь аналогичного подхода. <br>
Я хотел добавить пункт «Повышение версии SDK», но я не мог найти весомого примера, который отображал бы потенциальную проблему. Я благодарен за аргументированный комментарий. Когда будет время, я постараюсь обновить статью, добавив туда мысли из Вашего комментария)]]></description>
      <pubDate>Tue, 20 Oct 2020 09:36:57 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.10.2020 09:22:54 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22202766</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22202766</link>
      <description><![CDATA[Прослушал Ваш доклад. Согласен с мыслью, изложенной в нем. Писать свои велосипеды для тех случаев, когда что-то уже хорошо реализовано и протестировано действительно не стоит. Например, я в своем проекте использую Room, Retrofit, ViewModel&amp;LiveData и некоторые другие библиотеки, в которых я уверен. Но думаю, что важно убедиться, что данная библиотека действительно подходит вашему проекту (Порой библиотеки с кучей багов и без должной оптимизации могут вполне подходить Вашему проекту).]]></description>
      <pubDate>Tue, 20 Oct 2020 09:22:54 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>19.10.2020 09:41:03 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22197614</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22197614</link>
      <description><![CDATA[Ничем :) Я форкнул библиотеку, исправив некоторые баги.]]></description>
      <pubDate>Mon, 19 Oct 2020 09:41:03 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.10.2020 07:52:35 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22183648</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22183648</link>
      <description><![CDATA[<blockquote>в Kotlin есть какая-то особая поддержка Builder'ов?</blockquote><br>
Да не, впринципе так же. Но некоторые разработчики считают, что в Kotlin лучше использовать строитель не через цепочку вызываемых методов, а через именованные параметры. Порой это выглядит читабельнее, но это спорный вопрос. <br>
<br>
<blockquote>еще бы объяснялось в туториалах лучше, как именно они работают</blockquote><br>
Это точно. Сам как-то задавался таким вопросом. В итоге где-то на просторах YouTube нашел 2-х часовую лекцию, где в подробностях разбираются кишки корутин. Если не ошибаюсь канал называется ComputerScience. Но, к сожалению, понять как работают корутины внутри действительно непросто в связи с малым количеством годного материала на эту тему.]]></description>
      <pubDate>Thu, 15 Oct 2020 07:52:35 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.10.2020 07:28:01 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22183496</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22183496</link>
      <description><![CDATA[Вот вот! :)]]></description>
      <pubDate>Thu, 15 Oct 2020 07:28:01 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.10.2020 06:28:49 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22183220</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22183220</link>
      <description><![CDATA[То, что Koin и Kodein не DI, а Service Locator — это не мешает им быть прекрасными инструментами для прокидывания зависимостей. <br>
Да, я согласен, что у них есть свои минусы по сравнению с Dagger (как и свои плюсы). Но все же Dagger подходит для более узкого числа проектов, чем остальные либы. Если Dagger действительно подходит для проекта и упрощает жизнь, то заюзать можно. При этом важно, чтобы разработчик, использующий Dagger, использовал его правильно. Но когда Dagger используют таким образом: <br>
 — Нет Binds<br>
 — Для всего пишут Provides<br>
 — Все помечено аннотацией Singleton<br>
 — Скоупы нигде не хранятся<br>
то проект превращается в кучу костылей, которые отовсюду летят в тебя. <br>
На самом деле я и сам сторонник Dagger, в какое-то время я его достаточно глубоко изучал и использовал в проекте. А Koin, Kodein и Toothpick я изучал лишь в теории, но на практике не использовал. <br>
В общем, хоть Dagger и классный, но в большинстве проектов он не подходит по большей части из-за своей сложности. Не многие джуны, мидлы и даже сеньоры находят силы его полноценно изучить, к сожалению. <br>
<br>
<blockquote>С objectом нужно быть очень осторожным, иначе получите плохотестируемое нечто</blockquote><br>
Полностью согласен. Он заменяет, конечно, паттерн Singleton, но как и с паттерном с object надо быть аккуратным. <br>
<br>
<blockquote>Можно еще примеров? Моя фантазия, к сожалению, ставит меня в тупик.</blockquote><br>
Паттерны — делегат, строитель. Работа с асинхронностью — корутины. Но мне кажется, что это уже не сильно связано с темой статьи)<br>
<br>
<blockquote>Не она, случайно?</blockquote><br>
Не она. Тут видимо просто хотят скопировать Koin. Если Koin хорошо работает из коробки, то в таком коде мало смысла. Другим разработчикам будет лишь сложнее разобраться с кодом. ИМХО<br>
<br>
В целом, моя статья предназначена для новичков, миддл разработчиков, которые любят внедрять в свой проект новые либы, не задумываясь о последствиях. Надеюсь, кому-то она действительно поможет)]]></description>
      <pubDate>Thu, 15 Oct 2020 06:28:49 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>15.10.2020 05:49:43 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22183062</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22183062</link>
      <description><![CDATA[Спасибо за комментарий!]]></description>
      <pubDate>Thu, 15 Oct 2020 05:49:43 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>14.10.2020 17:04:14 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22181632</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22181632</link>
      <description><![CDATA[Полностью с Вами согласен<br>
<br>
Нужно внедрять библиотеку относительно требований проекта. Также существуют проверенные библиотеки, которые показали себя на практике и их можно использовать не боясь.<br>
К таким библиотекам могу отнести: <br>
 — Room <br>
 — Retrofit<br>
 — Библиотеки для работы с Firebase]]></description>
      <pubDate>Wed, 14 Oct 2020 17:04:14 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>14.10.2020 17:00:48 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22181612</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22181612</link>
      <description><![CDATA[Думаю тут зависит от того какой бюджет закладывается в проект, есть ли время сделать качественный продукт или все таки нужно сделать кое-как, но по-быстрому<br>
<br>
Я убежден в том, что если бездумно тащить в проект библиотеки, когда нужно внедрить какую-то новую фичу, написать качественный проект не получится.]]></description>
      <pubDate>Wed, 14 Oct 2020 17:00:48 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>14.10.2020 14:20:27 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22180962</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22180962</link>
      <description><![CDATA[Согласен<br>
<br>
Спасибо за комментарий!]]></description>
      <pubDate>Wed, 14 Oct 2020 14:20:27 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>14.10.2020 14:19:57 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/523392/#comment_22180954</guid>
      <link>https://habr.com/ru/articles/523392/#comment_22180954</link>
      <description><![CDATA[Полностью с Вами согласен. Жаль, что понимание баланса приходит с годами. <br>
<br>
Спасибо за комментарий!]]></description>
      <pubDate>Wed, 14 Oct 2020 14:19:57 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

      

      

    
  </channel>
</rss>
