@kotlin_lang

Страница 521 из 982
Руслан
30.01.2018
23:03:11
знаю, но там как-то мертво все
Там ветка 2.0 развивается вроде

А вот пример отличий junit 5.0 - 5.1 с точки зрения котлина https://github.com/Heapy/yml-ical/commit/5c559932947ba2c1fa2fd2d7ca647eb6bf8f941f

Dibro
30.01.2018
23:03:40
Там ветка 2.0 развивается вроде
тоже не особо активно

Google
Александр
30.01.2018
23:04:13
слушал доклад где поясняли почему самый правильный ооп это clojure

Ivan
30.01.2018
23:06:05
https://github.com/oleksiyp/mockk
а я давно слышал, что как-то немного корячили компилятор, чтобы он все классы делал открытыми, чтобы можно было и спринг и мокито, и у меня было ощущение что таки реализовали это, я чушь несу или правда было?

интересно было бы послушать

Александр
30.01.2018
23:06:37
Александр
30.01.2018
23:07:02
если не найдете за 20 минут - кину, пока читаю историю всех чатьв

Ivan
30.01.2018
23:07:04
Там ветка 2.0 развивается вроде
ну 21го 6 коммитов, вполне нормальное развитие для более-менее готовой либы

Dibro
30.01.2018
23:08:25
и до "более-менее" готовой там довольно далеко

Ivan
30.01.2018
23:09:18
allopen плагин https://kotlinlang.org/docs/reference/compiler-plugins.html
да, он, спасибо, а в мокито его не завезли? или никто просто не занимался?

Руслан
30.01.2018
23:10:56
да, он, спасибо, а в мокито его не завезли? или никто просто не занимался?
Это ортогональные вещи, allopen смотрит на аннотации и делает классы открытыми (например для спринговых @Service, etc). Можно использовать свои аннотации, например написать аннотацию @Testable. Но я просто делаю интерфейсы когда мне нужно мокать.

Google
Руслан
30.01.2018
23:13:14
Я делаю Interface и DefaultInterface

Ivan
30.01.2018
23:13:29
youtube fpconf 2017
https://www.youtube.com/playlist?list=PLY3spNmwoSY-4hso5zlqzv7IkYlscw6jw чёт тут по clojure не грепается

Руслан
30.01.2018
23:14:21
Я делаю Interface и DefaultInterface
Вот пример как это смотрится https://github.com/Heapy/yml-ical/blob/master/src/main/kotlin/by/heap/calendar/yml/FileWriter.kt#L13

Александр
30.01.2018
23:14:21
вот эта, но там по чуть чуть набрасывают на вентилятор

Ivan
30.01.2018
23:14:52
https://youtu.be/b-Eq4YV4uwc
точно, как я не догадался что Рыжиков как всегда за кложу топит

Вот пример как это смотрится https://github.com/Heapy/yml-ical/blob/master/src/main/kotlin/by/heap/calendar/yml/FileWriter.kt#L13
та ну всё-равно как-то... кстати, а почему тогда не префикс I

Badya
30.01.2018
23:23:42
Шарпы какие-то получаются с этим вот I)

Руслан
30.01.2018
23:25:08
та ну всё-равно как-то... кстати, а почему тогда не префикс I
Ну как показала практика это самое логичное именование, бывали случаи когда реально появлялась альтернативная имплементация и вот она называлась например AmazonInterface. Ну и получалось что есть Interface, DefaultInterface и AmazonInterface. Намного понятнее красивее чем Impl имхо

Ivan
30.01.2018
23:51:42
Ну как показала практика это самое логичное именование, бывали случаи когда реально появлялась альтернативная имплементация и вот она называлась например AmazonInterface. Ну и получалось что есть Interface, DefaultInterface и AmazonInterface. Намного понятнее красивее чем Impl имхо
ну про слово Default - окей, тут по большей части фломастеры, но вот в целом идея делать интерфейсы только для того чтобы суметь замокать - это как-то странно. Если нужна будет альтернативная имплементация - окей, проводим рефакторинг выделение интерфейса и делаем новую имплементацию, но тогда понятно откуда взялся интерфейс и зачем он вообще. единственный вариант я нашёл зачем может понадобиться интерфейс при единственной имплементации - это сокрыть остальные методы не нужные для большинства пользователей, чтобы было понятнее как предполагается использовать класс, ну и чтобы никто ничего лишнего лишний раз не вызывал

Grushin
31.01.2018
05:08:24
Grushin Sergey Work: народ, в процессе реализации была задача. пройти коллекцию элементов и поменять один булин у одного элемента этой коллекции + получить индекс. я реализовал так data.indexOfFirst { it.isNotesExpand }.let { if (it != -1) { data[it].isNotesExpand = false notifyItemChanged(it + 1) } }

можно ли его сократить?)

Igor
31.01.2018
08:49:44
вот эта, но там по чуть чуть набрасывают на вентилятор
Наверное ты все таки имел ввиду доклад “Сергей Ткаченко. OOP FOR BRAVE AND TRUE” Николай в своем докладе ничего про ООП не говорит.

Александр
31.01.2018
08:52:22
Наверное ты все таки имел ввиду доклад “Сергей Ткаченко. OOP FOR BRAVE AND TRUE” Николай в своем докладе ничего про ООП не говорит.
точно говорил, я же его в живую слушал, пара набросов была, что раз есть объекты и сообщения то чем вызов метода нн сообщение

Konstantine
31.01.2018
09:49:56
Ребят, можно как-то сахарно проверить массив на какое-то условие? Например массив стрингов на то, что все строки в нем начинаются с символа а

Konstantine
31.01.2018
09:51:34
matchAll нет?
Возможно, сейчас нет возможности проверить, но посмотрю, спасибо.

Google
Konstantine
31.01.2018
10:05:28
.all {}
Точно, спасибо:)

Vitalii
31.01.2018
10:08:56
Ребят, кто что скажет по поводу такого кодстайла (пример так, либо с проверкой на что-либо ещё), когда первая часть условия — на одной строке с сигнатурой (без переноса, телеграм сам перенёс, конец сигнатуры на else {): fun someFunction(param: Int) = if (param != 42) someFunction(param+1) else { // other code } Ну и аналогичное с when: насколько с этим неудобно работать/неудобно читать остальным?

Илья
31.01.2018
10:10:08
но ваще у меня попоболь по поводу inline if

и скобки вокруг someFunction() бы сделал

тогда сразу тебе читаемость

fun someFunction(param: Int) = if (param != 42) { someFunction(param+1) } else { // other code }

this

Andrew
31.01.2018
11:30:24
тогда сразу тебе читаемость
if как выражение не может не иметь else, потому для него отпадает необходимость в фигурных скобках

это привычка, а не читаемость ;)

Илья
31.01.2018
11:31:24
либо я тебя не понял, либо такое if (someBooleanValue) { foo = "bar" } невалидно

а оно валидно

Andrew
31.01.2018
11:33:14
вот такое не валидно: foo = if(bool) { "bar" }

Илья
31.01.2018
11:35:03
если твой иф возвращает что-то отличное от Unit то да

Andrew
31.01.2018
11:35:08
Друг, ты бы перестал вклиниваться в диалоги, не читая контекст. Я именно это и утверждаю.

Илья
31.01.2018
11:36:26
канальчик, а никто не вкуривал как под капотом работает ретрофит? – мне интересная та часть где я ему говорю что вот мол тебе GsonConverter и он начинает мне генерить соответствующие объекты?

Bogdan
31.01.2018
11:36:27
ок

Илья
31.01.2018
11:36:34
мне именно TypeAdapter интересен

хотя это андроид и гипотетически я ошибся чатиком

Google
Виталий
31.01.2018
12:45:54
layer0[2].fill(Tile(atlas.rndTile), 0, layer0[2].size) при такой заливке Tile(atlas.rndTile) выполняется всего один раз, как сделать что бы Tile(atlas.rndTile) повторился layer0[2].size раз ?

или каким другим путем заполнить второй уровень массива

в идеале было бы не плохо добавить IntRange в индексы, типа: val start = 0 val end = layer0[3].size layer0[3][start..end] = Tile(atlas.rndTile) ?

Quantum Harmonizer
31.01.2018
12:59:36
Я вот не особо понял, что требуется сделать.

Виталий
31.01.2018
13:00:21
заполнить второй уровень массива layer0[N][N2]

Quantum Harmonizer
31.01.2018
13:02:32
fill же заполняет всё от layer0[2][0] до layer0[2][size], что теперь нужно сделать?

Виталий
31.01.2018
13:03:25
Tile(atlas.rndTile) при fill выполняется только один раз, а нужно size раз

так как там береться рандомный регион текстуры

то есть если мне все заолнить null то все ок, но если разными объектами класса Tile то чет не канает

Quantum Harmonizer
31.01.2018
13:07:01
Вообще fill не подходит. val array = layer0[2] for (i in array.indices) array[i] = Tile(...)

Виталий
31.01.2018
13:07:44
хотел как короче :( в одну строку

то есть без for

Quantum Harmonizer
31.01.2018
13:09:02
inline fun <T> Array<T>.fill(getT: (Int) -> T) { for (i in indices) this[i] = getT(i) }

Виталий
31.01.2018
13:13:06
круто ))

спасиб)

а inline это хорошо или плохо ?

Quantum Harmonizer
31.01.2018
13:17:52
а inline это хорошо или плохо ?
inline — это модификатор

Марат
31.01.2018
13:18:16
lazy умеет принимать параметры?

Google
Виталий
31.01.2018
13:18:27
https://kotlinlang.ru/docs/reference/inline-functions.html почитал и не понял, палка о двух концах

Quantum Harmonizer
31.01.2018
13:18:50
https://kotlinlang.ru/docs/reference/inline-functions.html почитал и не понял, палка о двух концах
Что именно не понял? Так и есть, ничего однозначного не бывает.

Виталий
31.01.2018
13:19:17
может повысить производительность, но и повысить кол-во сгенерированного кода

а кто такие разумные пределы... не совсем ясно

Quantum Harmonizer
31.01.2018
13:22:03
а кто такие разумные пределы... не совсем ясно
Разумные пределы — это когда либо мало кода (мда, очень точно выражаюсь), либо объёмы кода в передаваемой функции ощутимо больше собственного кода inline-функции.

Виталий
31.01.2018
13:22:55
Модификатор inline влияет и на функцию, и на лямбду, переданную ей: они обе будут встроены в место вызова. тут не понял, что значит встроены ? каждое обращение будет генериться код ?

Quantum Harmonizer
31.01.2018
13:23:33
Виталий
31.01.2018
13:24:50
а в каком месте постоянная генерация кода повысит производительность ? мне кажеться пусть функция торчит заранее в памяти и обращаться к ней

Kira
31.01.2018
13:25:55
Так вроде при компиляции код из метода вставят по месту использования и всё

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