
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

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

Vitalii
12.04.2018
16:38:49

Dmitry
12.04.2018
16:39:28
есть еще кодеин

Google

Like
12.04.2018
16:42:05

Igor
12.04.2018
17:09:14

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

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

Bogdan
12.04.2018
17:56:59

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
Кто-нибудь может предложить красивое решение для такой простой задачи: есть список и элемент из него. Нужно вернуть новый лист без этого и следующего за ним элемента

Валерий
12.04.2018
18:20:02

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

Boris
12.04.2018
18:21:29

Жабра
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
val i = 4
val list = listOf(0, 1, 2, 3, 4, 3, 2, 1, 0)
println(list.takeWhile { it != i })
?
Так он же вернёт [0, 1, 2, 3, 4].?

Руслан
12.04.2018
18:29:58

Жабра
12.04.2018
18:30:04
А, да

Руслан
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

Boris
12.04.2018
18:34:49

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)
Всё

Kirill
12.04.2018
18:39:24

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

Жабра
12.04.2018
18:41:40

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 })

Boris
12.04.2018
18:43:43

Валерий
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
а ну да(

Boris
12.04.2018
18:46:57

Руслан
12.04.2018
18:52:24

Жабра
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
> есть список и элемент из него
по условию