@kotlin_lang

Страница 606 из 982
Тимур
26.03.2018
09:14:15
Лишь бы не табами
дурацкий вопрос: а чем табы плохи? знаю что многим не нравится, но самому это никогда особо не мешало

Konstantine
26.03.2018
09:15:24
дурацкий вопрос: а чем табы плохи? знаю что многим не нравится, но самому это никогда особо не мешало
От системы к системе таб может быть разным. Запушил ты одно, кто-то у себя поручил другое. Пробел везде один. Это то что я слышал когда кодил на питоне, там яро за проьелы все.

Не знаю насколько оно истинно.

Google
Vladimir
26.03.2018
09:16:36
Не знаю насколько оно истинно.
Ну да, так и есть, сталкивался с тем, что всё едет при открытии на другой системе или в другом редакторе (или в git diff)

Денис
26.03.2018
09:17:08
Кажется, проблема решается на 110% использованием средств разработки,которые способны нормально обработать отображение N пробелов/табов в начале строки так, как этого хочет пользователь. Нет?

Konstantine
26.03.2018
09:17:53
Решается это просто - использованием пробелов:)

Idea вроде из коробки делает 4 пробела вместо таба.

Денис
26.03.2018
09:18:44
Если человек запушил с отступом в 2 таба - он прям сильно интересная личность, потому что в ~любом нормальном редакторе AFAIK ширина таба в пробелах выставляется в настройках

Bogdan
26.03.2018
09:24:17
От системы к системе таб может быть разным. Запушил ты одно, кто-то у себя поручил другое. Пробел везде один. Это то что я слышал когда кодил на питоне, там яро за проьелы все.
>Это то что я слышал когда кодил на питоне, там яро за проьелы все. ну да там от табуляции зависит к чему относися строчка, к методу, к класс и т.д.

Konstantine
26.03.2018
09:30:10
>Это то что я слышал когда кодил на питоне, там яро за проьелы все. ну да там от табуляции зависит к чему относися строчка, к методу, к класс и т.д.
Да. Но на табах никто не мешает делать эти отступы. Просто из-за разницы на системах иногда может похериться всё.

Bogdan
26.03.2018
09:31:15
Да. Но на табах никто не мешает делать эти отступы. Просто из-за разницы на системах иногда может похериться всё.
ну так написал код напитончике все работает, перешул на другую систему все похе***

Boris
26.03.2018
09:33:15
пробелы ты будешь использовать в любом случае, а вместе с табами будет непонятно проблемы это или табы, лучше путь всё будут пробелами

Kirill
26.03.2018
09:33:36
Интересно, а почему там отступы по 2 пробела? (скалисты что ли писали…)
Чтобы больше кода по ширине помещалось. Для джавы тоже два пробела у нас

Boris
26.03.2018
09:34:43
Чтобы больше кода по ширине помещалось. Для джавы тоже два пробела у нас
два пробела это же абсолютно нечитаемо, нынче не 90-е, поди больше 80 символов влезает

Kirill
26.03.2018
09:35:58
Google
Boris
26.03.2018
09:36:30
это как не делать пустых строк в коде, сперто очень выглядит и мусорно

Mikhail
26.03.2018
10:54:29
От системы к системе таб может быть разным. Запушил ты одно, кто-то у себя поручил другое. Пробел везде один. Это то что я слышал когда кодил на питоне, там яро за проьелы все.
в пайтоне просто блоки определяются по отступам, поэтому у них все жестко - только пробелы и обязательно 4 штуки, чтобы прям издалека были блоки видны. зачем это в котлине, который использует {} для определения блоков - не знаю

Vitalii
26.03.2018
10:56:43
прочесть можно, но 4 более читаемо
Дело привычки. Со временем начинаешь парсить два пробела очень легко.

Boris
26.03.2018
10:58:23
Дело привычки. Со временем начинаешь парсить два пробела очень легко.
Да, я на скале писал. Потом пересел обратно на джава/котлин и вздохнул с облегчением

Хотя скала в этом свою роль тоже сыграла ?

Konstantine
26.03.2018
11:01:10
Дело привычки. Со временем начинаешь парсить два пробела очень легко.
Привыкнуть можно и на пиках точенных сидеть, но зачем

Vitalii
26.03.2018
11:01:38
Привыкнуть можно и на пиках точенных сидеть, но зачем
Хз, мне и на двупробельных пиках норм ? Анивей, это холивар и вкусовщина.

Alexey
26.03.2018
11:02:16
Давно не видил столько коментов про пробельчики ?

Bogdan
26.03.2018
11:13:45
может в оффтоп

Albert
26.03.2018
11:15:42
Давно не видил столько коментов про пробельчики ?
Те, кто ставят пробелы, получают больше тех, кто ставит табуляцию в коде

Alexey
26.03.2018
11:26:31
Те, кто ставят пробелы, получают больше тех, кто ставит табуляцию в коде
Там еще был какой то классный график про количество пиратов

Ivan
26.03.2018
12:31:42
Привет. Решил сделать немного магии с помощью Kotlin Compiler Plugins API. Идея такая, найти в датаклассах автоматически сгинеренные ф-ции и добавить им аннотацию. Взял SyntheticResolveExtension. Получил список функций синтетических, осталось добавить аннотацию, и на этом этапе я застрял. Как я понимаю просто изменить объект Annotations нельзя и нужно вызовом SimpleFunctionDescriptorImpl.create создать новый класс и засунуть в него уже модифицированный Annotations. Из коробки у Annotations есть несколько статиков среди которых EMPTY и еще парочка функий,которые мне не очень подходят. Вопрос вот в чем, как мне создать новый объект Annotations с нужным мне типом аннотации?

и если кто-то знает где найти док на компиляторные кишки

буду очень благодарен

Vladimir
26.03.2018
12:45:05
Ivan
26.03.2018
12:45:29
ну апи для плагинов вроде открытый же

Vladimir
26.03.2018
12:47:07
ну апи для плагинов вроде открытый же
Ну вот здесь говорят обратное (но ситуация могла измениться) https://www.reddit.com/r/Kotlin/comments/7hoytl/kotlin_team_ama_ask_us_anything/dqsryql/

Google
Ivan
26.03.2018
12:49:34
ну вот есть такой занятный модуль https://github.com/JetBrains/kotlin/tree/master/compiler/plugin-api

Gennady
26.03.2018
12:56:38
Товарищи, я новичок в программировании. Сейчас пытаюсь реализовать Leaderboard гугловый в своем приложении. Все туториалы, что я смогу найти, старые и про 2014 год. Может у кого-то есть пример реализации? Рабочий кусок кода. Спасибо и извините за глупый новичковый вопрос :)

Oleg
26.03.2018
12:56:57


Руслан
26.03.2018
12:59:52
Это грустное хаха или веселое? Там все так плохо что сразу нашли баг после релиза, причем настолько тупой: https://twitter.com/tagir_valeev/status/976351563961831425

Ivan
26.03.2018
13:00:08
Всем привет. Вопрос по красивому оформлению лямбд. Есть такая шняга: fun <T>.replaceIf(condition: Boolean, mapper: (T) -> T): T = if (condition) mapper(this) else this Я захотел её каррировать, чтобы сначала передать предикат (а не уже вычисленный результат в виде Boolean), а потом вызывать маппер. Получилось следующее: fun <T> T.replaceIf(predicate: (T) -> Boolean): ((T) -> T) -> T = { mapper: (T) -> T -> replaceIf(predicate(this)) { mutator(this) } } Вопрос следующий - я так понимаю, красиво вызвать это теперь в одну строчку, опуская круглые скобки, уже не получится? Компилятор съедает только следующее: someValue.replaceIf { somePredicate(it) } ({ it.someModification() }) Т.е. несмотря на то, что мне возвращается функция, принимающая единственный аргумент, другую функцию, я не могу сразу вызвать её, опустив круглые скобки? Хотелось бы чего-нибудь типа: someValue.replaceIf { somePredicate(it) } { it.someModification() }

Руслан
26.03.2018
13:02:27
я в том плане что " а у нас var уже есть")
Ну Java var вообще тяжело без слез сравнивать с Котлиновским. Там только для локальных переменных и при этом еще и с доп ограничениями, типо нельзя array сделать var. Ну и визуально тупее сделан, просто по инициализатору (правой части).

С учетом как это все протестировали (судя по тому же багу выше) боюсь что этот var еще наделает беды в Java

Vladimir
26.03.2018
13:08:52
final var. Этим всё сказано.

Roman
26.03.2018
13:09:56
Хватит гнобить дедушку, он еще могет! :)

Где-то был доклад почему они так сделали. Не помню точно, но вроде как потому что иначе оно сильно много чего ломает.

Andrew
26.03.2018
13:24:46
Всем привет. Вопрос по красивому оформлению лямбд. Есть такая шняга: fun <T>.replaceIf(condition: Boolean, mapper: (T) -> T): T = if (condition) mapper(this) else this Я захотел её каррировать, чтобы сначала передать предикат (а не уже вычисленный результат в виде Boolean), а потом вызывать маппер. Получилось следующее: fun <T> T.replaceIf(predicate: (T) -> Boolean): ((T) -> T) -> T = { mapper: (T) -> T -> replaceIf(predicate(this)) { mutator(this) } } Вопрос следующий - я так понимаю, красиво вызвать это теперь в одну строчку, опуская круглые скобки, уже не получится? Компилятор съедает только следующее: someValue.replaceIf { somePredicate(it) } ({ it.someModification() }) Т.е. несмотря на то, что мне возвращается функция, принимающая единственный аргумент, другую функцию, я не могу сразу вызвать её, опустив круглые скобки? Хотелось бы чего-нибудь типа: someValue.replaceIf { somePredicate(it) } { it.someModification() }
Вот такое ещё разве что завелось: 5.replaceIf { true } () { it * 2 } А вообще нельзя, да — передать таким образом можно ровно одну лямбду, и две подряд даже с каррированием всё равно являются синтаксической ошибкой. По мне это хорошо, ибо читать такое было бы не особо просто.

Boris
26.03.2018
13:32:54
Может инфикс можно как то прикрутить?

Ivan
26.03.2018
14:01:30
Долго думал. В итоге изобрел функциональную композицию: infix fun <T,R> (((T) -> R) -> R).forwardCompose(mapper: (T) -> R) = invoke(mapper) someVal.replaceIf { true } forwardCompose { it * 2 }

Но чтобы прямо вообще ничего между блоками не ставить не выходит. Хотя что забавно, IDE это сделать предлагает, и даже не подсвечивает как ошибку потом, но не компилируется)

Andrew
26.03.2018
14:07:49
> Хотя что забавно, IDE это сделать предлагает, и даже не подсвечивает как ошибку потом, но не компилируется) Звучит как повод сходить в kotl.in/issue :)

Vyacheslav
26.03.2018
14:52:00
ребят а что в котлине нельзя перегрузить конструктор ?

Andrew
26.03.2018
14:53:49
ребят а что в котлине нельзя перегрузить конструктор ?
https://kotlinlang.org/docs/reference/classes.html#secondary-constructors

Vyacheslav
26.03.2018
14:54:30
тьфу не докрутил колесико как раз до этого

сори

Google
Vyacheslav
26.03.2018
14:54:54
facepalm

Andrew
26.03.2018
14:55:20
Читай статью целиком, в том числе о том, как работают блоки init { ... }, ибо это не самая очевидная штука в языке.

Vyacheslav
26.03.2018
14:56:26
окей спасибо)

Антон
26.03.2018
20:21:21
Ребят, если яву не особо учил, нужно сначала ее, а потом уже котлин?)

Konstantin
26.03.2018
20:25:01
Интересно, сколько человек ещё задаст этот вопрос...

Антон
26.03.2018
20:28:26
Это уже беда

Bogdan
26.03.2018
20:29:14
Ребят, если яву не особо учил, нужно сначала ее, а потом уже котлин?)
Почитай доку, что не понятно то в джаву, если много не понятно то читай джаву. Как то так

Антон
26.03.2018
20:31:02
окей, но чисто на практике разработки под андроид, чем котлин интереснее?

Malik
26.03.2018
20:31:03
Конечно нет, можешь спокойно начать учить kotlin, не зная Java.

Жабра
26.03.2018
20:31:26
Подскажите, как лучше сделать: есть глобальная переменная currentUser: User, которая содержит данные о пользователе, который залогинился на данный момент. Когда пользователь разлогинится - надо занулить переменную. Как обойтись без вездесущего !!

?

Mayor
26.03.2018
20:32:32
кто такой вездесущий?

Malik
26.03.2018
20:32:57
Он!!

Жабра
26.03.2018
20:33:23
кто такой вездесущий?
Я имел ввиду без вызовов Аля currenrUser!!.name

Жабра
26.03.2018
20:33:51
Malik
26.03.2018
20:34:52
Может задать ей параметр, который говорит о том, есть там значение или нет?)

Google
Владислав
26.03.2018
20:38:37
Может проще завезти обычную переменную авторизован/не авторизован?

Владислав
26.03.2018
20:42:27
Ну в смысле, ты же точно знаешь авторизован ты или нет?

Жабра
26.03.2018
20:43:48
Ну в смысле, ты же точно знаешь авторизован ты или нет?
Да. Но есть данные о пользователе, к которым мне надо обращаться

Владислав
26.03.2018
20:44:25
Ну, какие-то данные у тебя всегда есть, каких-то нет, можешь значения какие-нибудь по умолчанию задать

Жабра
26.03.2018
20:45:49
Ну, какие-то данные у тебя всегда есть, каких-то нет, можешь значения какие-нибудь по умолчанию задать
Те данные, что мне нужны, есть всегда, они просто лежат внутри. И к ним надо получить доступ.

Владислав
26.03.2018
20:46:59
Блин, ну сделай синглтон с юзером, который никогда не null, получай спокойно нужные данные когда хочешь

Жабра
26.03.2018
20:49:06
Сейчас прибежит @Harmonizr и ударит по рукам за такие советы. :D (синглтон с зависимостями)

Владислав
26.03.2018
20:50:00
¯\_(ツ)_/¯

balolam
26.03.2018
20:52:39
Еще бы за вопросы кто бил по рукам

Egor
26.03.2018
21:35:08
А котлин компилит код через джаву или напрямую в байт-код?

Igor
26.03.2018
21:36:10
В байткод конечно

Egor
26.03.2018
21:39:23
Просто если декомпилить его в джаву - нормальный код получается, вот и проверял, может он и в байт-код через кодогенератор джавы проходит

Страница 606 из 982