Size: a a a

Kotlin Community

2021 January 07

IP

Iaroslav Postovalov in Kotlin Community
LevT
И впрямь у меня к ним личное, но в данном контексте учебника о них пока и слове не было. Только о фильтрах-мапах и простейших агрегациях
а, то есть надо именно композицию из преобразований списков на уровне учебника
источник

L

LevT in Kotlin Community
Учебник на материале скалы, но о паттернматчинге тоже не было
источник

IP

Iaroslav Postovalov in Kotlin Community
LevT
А вот еще вопрос.

...if that value (max) is nonzero, divides all elements
by that value and returns a new list;
- сделано:

fun normalize(doubles: List<Double>) = doubles
   .map { it / doubles.map { kotlin.math.abs(it) }.maxOrNull()!! }

normalize(listOf(1.0, 4.0, 2.0))


Надо:
otherwise returns the original list.  очевидно в том же функциональном стиле.  

Я сейчас занимаюсь не "решением задач", а изучением стандартных FP техник c котлином, так что просьба моя не читерство и не зашквар.
Помогите не застопориться опять на этой ерунде.
окей, давай думать.
doubles.map { it / doubles.maxOrNull() ?: 1.0 }
источник

IP

Iaroslav Postovalov in Kotlin Community
а, не деление на ноль
источник

IP

Iaroslav Postovalov in Kotlin Community
doubles.map { it / doubles.maxOrNull()?.takeUnless(0::equals) ?: 1.0 }
источник

IP

Iaroslav Postovalov in Kotlin Community
но вообще, писать такое на языке без мемоизации гадко
источник

L

LevT in Kotlin Community
Это только начало, чую автор подводит студента к самостоятельному запросу на всё такое
источник

IP

Iaroslav Postovalov in Kotlin Community
LevT
Это только начало, чую автор подводит студента к самостоятельному запросу на всё такое
а я не знаю, зачем вообще париться с превращением программ в chain call'ы в контексте котлина
источник

L

LevT in Kotlin Community
Iaroslav Postovalov
а я не знаю, зачем вообще париться с превращением программ в chain call'ы в контексте котлина
Мне дико нравится учебник, я долго рыл в поисках подобного
Это учебник не скалы, а FP для мейнстрим императивщиков.
Тех, которые котлин/C#/etc. умеют, но вот в функциональщине плавают
источник

L

LevT in Kotlin Community
Я вот решил проходить его параллельно в скале-котлине,
но крайне полезным счёл бы полиглот ресурс на основе этого учебника
источник

VY

Vladimir Yevtochenko in Kotlin Community
Здраствуйте, возникла у меня возникла вот такая ошибка:
Cannot use 'T' as reified type parameter. Use a class instead.

У меня есть вот такой класс:
class A<B> {
     fun foo() {
          ...
          Json.decodeFromString<B>(..) // ошибка при указании <B>
    }
}

и как я понимаю требует сделать <B> reified, но у меня дженерик находится не на уровне функции. Как это можно решить или как-то сделать по другому? Спасибо заранее!
источник

I

Ilya in Kotlin Community
Vladimir Yevtochenko
Здраствуйте, возникла у меня возникла вот такая ошибка:
Cannot use 'T' as reified type parameter. Use a class instead.

У меня есть вот такой класс:
class A<B> {
     fun foo() {
          ...
          Json.decodeFromString<B>(..) // ошибка при указании <B>
    }
}

и как я понимаю требует сделать <B> reified, но у меня дженерик находится не на уровне функции. Как это можно решить или как-то сделать по другому? Спасибо заранее!
У тебя нет дженерика в функции
источник

I

Ilya in Kotlin Community
fun <T> foo()

вот это дженерик на уровне функции
источник

VY

Vladimir Yevtochenko in Kotlin Community
Ilya
У тебя нет дженерика в функции
я вот потому и спрашиваю, как вообще можно это реализовать. У меня <B> находится на уровне класса и как то не удобно добавлять в функцию ещё раз тот же <B>

оно требует что-бы я сделал <B> reified, но у меня он не в функции и потому это невозможно. вопрос наверное о возможном решении для сериализации класса в таком случае
источник

I

Ilya in Kotlin Community
Vladimir Yevtochenko
я вот потому и спрашиваю, как вообще можно это реализовать. У меня <B> находится на уровне класса и как то не удобно добавлять в функцию ещё раз тот же <B>

оно требует что-бы я сделал <B> reified, но у меня он не в функции и потому это невозможно. вопрос наверное о возможном решении для сериализации класса в таком случае
Ну пока единственный вариант, что я вижу это inline fun <reified T: B>()
Других пока в котлин вроде ещё не завезли
источник

VY

Vladimir Yevtochenko in Kotlin Community
Ilya
Ну пока единственный вариант, что я вижу это inline fun <reified T: B>()
Других пока в котлин вроде ещё не завезли
Спасибо, буду тогда иначе наверное вопрос решать
источник

с#

саша сок #KotlinGang... in Kotlin Community
Vladimir Yevtochenko
Здраствуйте, возникла у меня возникла вот такая ошибка:
Cannot use 'T' as reified type parameter. Use a class instead.

У меня есть вот такой класс:
class A<B> {
     fun foo() {
          ...
          Json.decodeFromString<B>(..) // ошибка при указании <B>
    }
}

и как я понимаю требует сделать <B> reified, но у меня дженерик находится не на уровне функции. Как это можно решить или как-то сделать по другому? Спасибо заранее!
class A<B>(private val serializer: KSerializer<B>) {
   fun foo() {
       ...
       Json.decodeFromString(..., serializer)
   }
}

inline fun <reified B> A() = A(Json.serializer<B>())
источник

ХХ

Халид Хушмадов... in Kotlin Community
Добрый день я новичок в программировании и начал с котлина

У меня такой вопрос
Извиняюсь за тупость но в чем польза let когда можно использовать "?"

?
источник

AL

Alexander Levin in Kotlin Community
Халид Хушмадов
Добрый день я новичок в программировании и начал с котлина

У меня такой вопрос
Извиняюсь за тупость но в чем польза let когда можно использовать "?"

?
Ну, т.е. именно в контексте nullalble цепочек, let иногда просто больше вещей позволяет. Например если у вас обычная функция (не экстешн), то с помощью nullable call не получится вызвать. И тогда можно применять nullable let:

someNullableDouble?.let { sqrt(it) }
источник

AN

Alexander Nozik in Kotlin Community
Халид Хушмадов
Добрый день я новичок в программировании и начал с котлина

У меня такой вопрос
Извиняюсь за тупость но в чем польза let когда можно использовать "?"

?
Это так называемые scope functions. Они позволяют выполнять не одну операцию, а целый блок в нужном окружении
источник