Обновить
14
Сергей Игушкин@h0tkey

Kotlin/Java Developer

0,2
Рейтинг
2
Подписчики
Отправить сообщение
Исходя из самого факта в заголовке, видимо, плохо.
Спасибо за статью.

Проблема в том, что Kotlin компилируется в Java
Вы же, наверное, имели в виду генерацию Java-файлов annotation processor'ом из аннотаций в коде на Kotlin? Обычные исходники на Kotlin компилируются напрямую в байт-код, без трансляции в Java.

<...> если мы используем переданный в конструктор параметр, то он будет присвоен полю сразу, минуя переопределенный setter
Тут можно сделать что-нибудь в духе

class User(nameParam: String) {
    var name: String = ""
        set(value) { field = value.toUpperCase() }

    init { name = nameParam } // вызовется сеттер
}

Лямбда, вложенная в лямбду
Про такое, кстати, даже в документации (coding conventions) сказано, что если лямбды вложены, то у всех лучше явно писать все параметры вместо использования it.
Форматтеру IDEA вполне можно запретить форматировать участок кода, но по умолчанию эта фича выключена. Например, здесь это позволило избежать лишнего большого отступа, который бы добавился из-за того, что это аргумент конструктора. :)
Согласен, во время написания поста тоже думал, что для цепочек вызовов это должно быть осуществимо примерно так, как написано у вас (спасибо что показали, как именно!). В таком случае остаётся только такой недостаток, как необходимость воевать с форматтером, чтобы он не выровнял все вызовы функций.
Мне кажется, как минимум, потому что в адресах попадаются правильные скобочные последовательности, а они уже не относятся к регулярным языкам. Но это если ограничения на длину нет.
Проглядел, было, виноват.
Удивлён, что про stacksort ещё ничего не было в комментариях. :)

На StackOverflow есть решение с reflection, там вместо values() используют enumConstants, но про valueOf() не написано.
Есть такой вопрос: планируете что-нибудь для метапрограммирования, более мощное, чем annotation processing javac'а? Например, что-нибудь из разряда Groovy AST.
Я, вероятно, что-то упустил, но для достижения latency уведомлений в 30-60 секунд вам пришлось и «будильник» с таким же периодом запускать? Если да, то подозреваю, что устройства в сон уходить почти не будут, потому что это, ЕМНИП, не мгновенный процесс, сон многоуровневый и наступает постепенно.
Рассказывайте, пожалуйста, тема очень интересная. Например, хотелось бы узнать, что такое происходит с клетками, что иммунитет с ними хуже справляется.
Я бы возразил, что сайд-проекты бывают разные и что разработчик, занятый в кровавом энтерпрайзе, может по выходным заниматься инди-геймдевом и не только писать код, но ещё и рисовать и даже музыку сочинять для этого, но тут, наверное, спорить не о чем, я вашу мысль понял.
Тогда было бы здорово узнать чужие мнения и опыт по вопросу, работает ли это.
На мой взгляд, то же самое, что запрещать жениться или детей заводить — мысли не о том будут — а то и вообще из офиса не выпускать.
Если не утрировать, то мне казалось, что смена деятельности, наоборот, повышает продуктивность, и это даже без учёта всех плюсов, описанных в статье.
И второй вопрос, по важности не уступающий вопросу «как?» — зачем? :)
Нет, серьёзно интересно, какие цели может преследовать работодатель, запрещая сторонние проекты?
С проверяемыми исключениями далеко не всё однозначно, и в Java такой подход был скорее экспериментальным. В документации по поводу отсутствия проверяемых исключений в Kotlin ссылаются cюда, сюда и сюда.
Придётся, но, как в ветке ниже верно отметили, эта работа сведётся к одной строчке кода прямо перед объявлением метода. Для класса, помеченного аннотацией data, компилятор сам сгенерирует equals, hashCode, copy и component1..N. Ну, ещё есть Pair и Triple в стандартной библиотеке, если семантику полей не жалко. :)
Интересно, насколько лучше или хуже бы себя показало применение visibility graph'а для поиска пути…
Пробовали? Или A* по сетке — первое решение, proof of concept?
Про скобочки, пожалуй, правда ваша, в тех разумных пределах, пока синтаксический шум не мешает читать код.
А насчёт возврата нескольких значений — Kotlin так умеет:
val (x, y, z) = points3d[0]
или даже
for ((k, v) in hashMap) { /* ... */ }
Настоящих tuples, правда, нет (мотивация — не нужны), и примеры выше работают за счёт реализации методов component1..N.

Информация

В рейтинге
3 513-й
Дата рождения
Зарегистрирован
Активность