Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (17)

Лучшие ответы пользователя

Все ответы (25)
  • Как работают бесконечные циклы с пустым телом цикла в Java?

    @koperagen
    public class Main {
        public static void main(String[] args) {
            int a = Integer.MAX_VALUE;
            System.out.println(++a == Integer.MIN_VALUE); // true
        }
    }


    Получается, в вашем коде цикл доходит до максимального положительного значения int, происходит переполнение, переменная принимает отрицательное значение и условие цикла резко перестает быть истинным. Т.е. это не бесконечный цикл, но 2 миллиарда принтов в стандартный вывод ну очень уж долго происходят, поэтому впечатление, что цикл бесконечный.
    Ответ написан
  • Как вы учите программирование?

    @koperagen
    Не так давно понял, что стримы, мемы, игры и прочие развлечения не имеют ничего общего с отдыхом для мозга и тела. Будем честны, это - досуг, требующий времени и внимания. Отдых это лечь и поспать, расслабиться (в кровати или кресле). Попробуйте выработать привычку отдыхать тогда, когда вы говорите себе об усталости. После отдыха идти и заниматься без отговорок, а в качестве награды за это - возможность посмотреть стрим или поиграть без угрызений совести.
    Ответ написан
  • Как стать Котлин разработчиком?

    @koperagen
    Смотря, что вы под этим понимаете. Не думаю, что можно стать "профессиональным котлин разработчиком". Это будет либо мобильная разработка, либо бэкенд. В теории можно и десктоп с фронтом пилить. Но ни в одном из этих случаев знания самого языка не будут решающими.
    Если абстрагироваться и от направлений, то всегда будет полезно знать хотя бы распространенные структуры данных, парадигмы (структурная, объектно-ориентированная, функциональная), паттерны, используемые в этих парадигмах, принципы проектирования (SOLID, KISS, YAGNI). Это и к языку не привязано.
    Дальше - работа с БД (SQL, NoSQL), HTTP, асинхронность (Coroutines как пример средства реализации асинхронности). Тут придется выбирать библиотеки, доступные для котлина и изучать их.
    Это все скорее всего встретится. Но можно под андроид начать приложения делать и с 0. Есть обучающие курсы, в которых все нужное расскажут. По остальным направлениям их меньше, но тоже достаточно. Для бэкенда отправная точка - ktor, для desktop - tornadofx.
    Java код вам наверняка придется читать, поэтому хотя бы поверхностно стоит изучить.
    Ответ написан
  • Зачем нужен Optional и почему над null нельзя выполнить те же действия?

    @koperagen
    Вы и так можете проверить проверить ссылку на null, без каких-то дополнительных методов и сущностей. Optional здесь явным образом сообщает, что результат метода может существовать (значение), либо не существовать (null) и не даёт получить значение, не сделав выбор, как обработать ситуацию с его отсутствием. Кроме обычного get() есть ещё методы getOrElse(), позволяющий указать значение по умолчанию, getOrNull().

    Ещё бывает удобно сначала выполнить цепочку преобразований над Optional при помощи метода map(), а в конце получить значение любым удобным способом и дальше работать с "чистым" объектом ожидаемого типа.

    В kotlinе (раз язык не принципиален) на помощь с борьбой с NPE приходят nullable типы. Каждый класс порождает два типа, к примеру для класса Person это будет Person и Person?. В сигнатурах методов можно явно указать, какой из типов допустим. Если Person?, то компилятор вынудит вас обработать случай с приходом null. Так же вы не сможете вернуть из метода null, если объявили в качестве результата тип Person. Программа просто не скомпилируется. Все ради того, чтобы null не приходил из неожиданных мест, обрабатывался и не ронял программу.
    Ответ написан
  • Почему столько восторгов вокруг типизации? По-моему без нее намного проще, не?

    @koperagen
    Зная тип переменной среда разработки может подсказать:
    1. можно ли присвоить ей результат функции
    2. можно ли её передать как аргумент функции
    3. к каким методам и свойствам можно обратиться

    В некоторых языках, например Kotlin, система типов позволяет отслеживать null значения и обрабатывать их в коде.
    Более того, в большинстве статически типизированных языков есть возможность вывода типа исходя из выражения. Т.е. можно писать тип только там, где это действительно необходимо. Отличие от JS в том, что типы все равно отслеживаются на этапе компиляции и нельзя присвоить переменной значение другого типа.
    Запись вида
    val a = 2 + 3
    Эквивалентна записи
    val a : Int = 2 + 3
    Это приведет к ошибке:
    val a = 2 + 3
    a = "Hello"

    Все это помогает переместить целые категории ошибок из времени исполнения в этап компиляции (Для IDE и вовсе этап написания кода)
    Ответ написан