@kotlin_lang

Страница 633 из 982
whalemare
12.04.2018
16:17:22
Потому что

zir
12.04.2018
16:19:13
лол Что

Mikhail
12.04.2018
16:20:01
Пора составлять FAQ

whalemare
12.04.2018
16:20:26
+

Google
Igor
12.04.2018
16:25:33
Новый иф гораздо лучше тернарника
Он скорее не “новый”, а просто “if здорового человек” По этому и не нужны костыли (тернарник) из императивной джавы

Mikhail
12.04.2018
16:29:29
1. тернарный оператор - не ок 2. let2 - возможен 3. koin - ок либа 4. корутины - ок фича 5. ктор - ок либа 6. x?.let(f) ?: run(g) лучше заменить на if (x != null) f else g, особенно если f и g длинее пары слов 7. FP клевая штука, поэтому Котлин норм могет в FP(см val, лямбдочки, if/when expressions и т.д.), Typed FP - нет единогласного мнения, поэтому Котлин пока не оч могет в Typed FP, для желающих - arrow

и 99% процентов вопросов чатике исчезнут и останется только вяленький флуд и оффтоп

Anton
12.04.2018
16:31:05
забыл много важного

можно ли учить котлин пропуская джаву если хочется писать андроид

Vitalii
12.04.2018
16:31:31
Перформанс забыл.

Anton
12.04.2018
16:31:46
кто нибудь пробовал котлин нейтив

Mi
12.04.2018
16:31:52
Забавно что бреслав говорил что тернарного оператора нет просто потому что не хватило символов адекватных им

Vitalii
12.04.2018
16:32:07
Аналог спринга для котлин

Mikhail
12.04.2018
16:33:37
забыл много важного
ну так надо открыть репу на github и пускай пулл реквестов покидают

Vitalii
12.04.2018
16:38:49
Забавно что бреслав говорил что тернарного оператора нет просто потому что не хватило символов адекватных им
Потом было обсуждение по вводу и решили, что тернарный оператор поломает суть '?' в Котлин, что оно с нуллом ассоциируется.

Dmitry
12.04.2018
16:39:28
Аналог спринга для котлин
а сам спринг чем плох?

есть еще кодеин

Google
Like
12.04.2018
16:42:05
зачем вообще это через sharedPreferenses делать? https://developer.android.com/guide/topics/resources/localization.html
если язык Х не поддерживается, то ставить Y, но не дефолтный. Кароче для юзверей с Украинским ставить Русский, например

Alexey
12.04.2018
17:10:55
даже композии функций не подвезли

Bogdan
12.04.2018
17:20:47
ща начнется

Жабра
12.04.2018
17:30:19
Всем привет, вопрос по koin: вот я загрузил модуль с именованным контекстом при инициализации, а после этого через какое-то время релизнул контекст, и модуль остался пустым. Он останется висеть? Или он тоже выгружается?

Mikhail
12.04.2018
17:30:57
функции высшего порядка есть, поддержка хвостовой рекурсии есть, val есть. Значит все основы для ФП в его базовом виде присутствуют

Igor
12.04.2018
17:36:19
Вот блин, в хаскеле val нет, а кложуре хвостовой рекурсии - а мужики то не знают

Michael
12.04.2018
17:38:40
ну val там нет только формально

Mikhail
12.04.2018
17:41:18
в хаскелл есть let, а в кложуре recur

Michael
12.04.2018
17:42:32
да, Igor, поясни, пожалуйста, что именно ты имел в виду

по моему, в хаскель имеет дело как раз с неизменяемыми один раз назначаемыми значениями, как val

толстотроллинг, короче все понятно

я что-то не фанат этой модной русской темы нарочно говорить какую-нибудь неправду и морочить людям голову

Igor
12.04.2018
17:49:38
в хаскелл есть let, а в кложуре recur
Смешно, а в java есть final var - оказывается она почти как хаскель

Mikhail
12.04.2018
17:52:08
Харе троллить

Igor
12.04.2018
17:59:02
Харе троллить
Да на здоровье - придумывай себе “категории функциональности” и пиши ФП на котлине и джаве

Michael
12.04.2018
17:59:55
ну это просто грубо, господин админ

Mikhail
12.04.2018
18:04:31
Да на здоровье - придумывай себе “категории функциональности” и пиши ФП на котлине и джаве
У тебя есть встречное предложение "категорий функциональности"?

Bogdan
12.04.2018
18:05:29
это болезнь ? обсуждать что в каком языке не так сделали

Google
Michael
12.04.2018
18:07:20
это интересно особенно, в отношении сравнительно новых языков, находящихся на этапе формирования

Dumitru
12.04.2018
18:11:06
котлин нейтив будет сильно конкурировать с гошкой, когда релизнется
Я посмотрел примеры кода, что то много аннотации, так и должно быть ?

Boris
12.04.2018
18:14:45
Кто-нибудь может предложить красивое решение для такой простой задачи: есть список и элемент из него. Нужно вернуть новый лист без этого и следующего за ним элемента

Bogdan
12.04.2018
18:20:59
в итоге 2-а раза по цыклу

Boris
12.04.2018
18:21:29
val indexToRemove = items.indexOf(item) items.slice( (0..items.size) .filter { it != indexToRemove && it != indexToRemove+1 } ) Может так?
Я тоже сделал так, только использовал фильтерИндексед, но хочется более изящное решение

Жабра
12.04.2018
18:26:31
?

Ну list здесь новый лист

Руслан
12.04.2018
18:27:53
val i = 4 val list = listOf(0, 1, 2, 3, 4, 3, 2, 1, 0) println(list.takeWhile { it != i }) ?

Жабра
12.04.2018
18:29:44
Руслан
12.04.2018
18:29:58
Жабра
12.04.2018
18:30:04
А, да

[0, 1, 2, 3]
Но ведь это всё равно не по условию

Руслан
12.04.2018
18:30:56
Почему, убираем элемент который передали и все за ним

Жабра
12.04.2018
18:31:18
Руслан
12.04.2018
18:31:37
А, верно. миссрид

Boris
12.04.2018
18:33:43
Вроде кажется, что должно быть простое решение

Валерий
12.04.2018
18:33:50
public fun <T> List<T>.removeItemAndNext(item: T): List<T> { var currentIsToRemove = false val result = ArrayList<T>(size-1) for (curr in this) { if (currentIsToRemove) { currentIsToRemove = false continue } if (curr == item) { currentIsToRemove = true continue } } return result }

чето много кода

Google
Bogdan
12.04.2018
18:35:19
а можна ведь удалять по индексу

находим индекс и удаляем

Валерий
12.04.2018
18:37:02
ну как я понял человеку нужна супер производительность)

Boris
12.04.2018
18:37:03
fun <T> List<T>.removeItAndNext(item: T): List<T> { val position = indexOf(item) return filterIndexed { index, _ -> index !in position..position + 1 } } так вот получилось у меня, но не хочется искать, а хочется по ходу обхода удалить

да не, мне вообще не нужна производительность, просто хочется красивое решение

для фана чисто

Жабра
12.04.2018
18:38:46
для фана чисто
val oldList = mutableListOf(0, 1, 2, 3, 4, 5) val list = oldList.toMutableList() list.removeAt(index) list.removeAt(index)

Всё

Boris
12.04.2018
18:39:38
Всё
Так иммутабельный список, написал же, что надо новый вернуть

Жабра
12.04.2018
18:39:48
toMutableList() чисто для создания нового списка

Boris
12.04.2018
18:40:09
Но копируется

Жабра
12.04.2018
18:40:20
Я проверил - первый не изменился

val oldList = listOf(0, 1, 2, 3, 4, 5) val list = oldList.toMutableList() list.removeAt(index) list.removeAt(index)

Abbas
12.04.2018
18:41:11
Так иммутабельный список, написал же, что надо новый вернуть
а условие что удалямый элемент окажется последний в списке надо рассматривать? в таком случаи слудующего за ним небудет и ошибка

Жабра
12.04.2018
18:41:13
Если вам так будет проще

Boris
12.04.2018
18:41:30
К тому же это не всё, потому что это чревато проблемами

Жабра
12.04.2018
18:41:31
Google
Boris
12.04.2018
18:42:02
Ну, удаление несуществующего элемента например

Т.е. ещё код придется добавить..элегантности чот нехватает

Валерий
12.04.2018
18:43:07
Возвращаемся к filterIndexed?) val indexToRemove = items.indexOf(item) val result = items.filterIndexed({ index, _ -> index !in indexToRemove..indexToRemove + 1 })

Валерий
12.04.2018
18:44:15
ТС через него изначально и делал

Boris
12.04.2018
18:44:21
Да, он удали первый элемент, если не найдет переданного

Валерий
12.04.2018
18:45:09
если не найдет индекс будет -1 же?

Boris
12.04.2018
18:45:44
ну да, нулевой удалит

вот фикс

fun <T> List<T>.removeItAndNext(item: T): List<T> = indexOf(item).let { position -> if (position > -1) filterIndexed { index, _ -> index !in position..position + 1 } else this }

Руслан
12.04.2018
18:45:56
fun <T> removeTwo(list: List<T>, element: T): List<T> { var skipIdx = -1 return list.foldIndexed(ArrayList(list.size)) { idx, acc, curr -> if (curr == element && skipIdx == -1) skipIdx = idx + 1 else if (idx != skipIdx) acc.add(curr) acc } }

Валерий
12.04.2018
18:46:34
а ну да(

Руслан
12.04.2018
18:52:24
Вот про что-то такое думал, да
исправил багу: before: if (curr == element) after: if (curr == element && skipIdx == -1)

Жабра
12.04.2018
18:54:11
fun <T> removeTwo(list: List<T>, element: T): List<T> { var skipIdx = -1 return list.foldIndexed(ArrayList(list.size)) { idx, acc, curr -> if (curr == element && skipIdx == -1) skipIdx = idx + 1 else if (idx != skipIdx) acc.add(curr) acc } }
А почему удаляем, передавая элемент, а не индекс элемента? Есть, у меня, к примеру, последовательность 0, 1, 2, 3, 2, 4. Я хочу удалить последние два элемента.

Кидаю 2 - удалятся 2 и 3

Руслан
12.04.2018
18:54:35
> есть список и элемент из него

по условию

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