Size: a a a

Kotlin Community

2020 April 25

AN

Alexander Nozik in Kotlin Community
when(val v = f()){
 v <0 -> {}
v == 0 ->{}
v >0 -> {}
}
источник

AM

Andrew Mikhaylov in Kotlin Community
Quantum Harmonizer
Как в котлине удобнее всего сравнить два comparable (или числа) и обработать все варианты?
Заведи себе такой же Ordering, если хочется, чё страдать-то? :)
источник

AL

Alexander Levin in Kotlin Community
Quantum Harmonizer
Как в котлине удобнее всего сравнить два comparable (или числа) и обработать все варианты?
Вариант 1 - страдать с числами.
Вариант 2 - страдать с числами, но меньше:
val Int.Companion.positive = 1..Int.MAX_VALUE
val Int.Companion.negative = Int.MIN_VALUE..-1

when(a.compareTo(b)) {
   in Int.positive -> "Too big"
   in Int.negative -> "To small"
   else -> "You Win"


Вариант 3 - написать конверцию чисел в нормальный Ordering
источник

AM

Andrew Mikhaylov in Kotlin Community
Но вообще да, при учёте, что в when можно завести переменную на скоуп, мне вариант с обычным меньше/больше нравится вполне.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Но вообще да, при учёте, что в when можно завести переменную на скоуп, мне вариант с обычным меньше/больше нравится вполне.
По буквам получается даже сильно экономнее.
источник

AL

Alexander Levin in Kotlin Community
Alexander Nozik
when(val v = f()){
 v <0 -> {}
v == 0 ->{}
v >0 -> {}
}
разве так сработает? Сравнивать числа и булевы будем же в таком  случае
источник

AN

Alexander Nozik in Kotlin Community
Alexander Levin
разве так сработает? Сравнивать числа и булевы будем же в таком  случае
Comparator выдает int. В переменную запихвиваем этот инт
источник

AM

Andrew Mikhaylov in Kotlin Community
Ах ты ж ёжкин кот, и правда не сработает
источник

QH

Quantum Harmonizer in Kotlin Community
брр, мало того, что там три сравнения, так оно ещё и не exhaustive
источник

AL

Alexander Levin in Kotlin Community
Alexander Nozik
Comparator выдает int. В переменную запихвиваем этот инт
А затем пытаемся сравнить инт с булевой и проигрываем. Так что либо не захватывать в when, либо работать через in или числа.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Ах ты ж ёжкин кот, и правда не сработает
when(val v = a.compare(b)){
 v <0 -> {}
v == 0 ->{}
v >0 -> {}
}
источник

AN

Alexander Nozik in Kotlin Community
Alexander Levin
А затем пытаемся сравнить инт с булевой и проигрываем. Так что либо не захватывать в when, либо работать через in или числа.
Не понял. Как это сравнить инт с булей? Они несравнимы.
источник

AL

Alexander Levin in Kotlin Community
Alexander Nozik
Не понял. Как это сравнить инт с булей? Они несравнимы.
Именно. А у тебя это ровно и происходит (если мы написали что-то в скобках в when, то сравнивать мы будем именно с этим)
источник

AN

Alexander Nozik in Kotlin Community
Alexander Levin
Именно. А у тебя это ровно и происходит (если мы написали что-то в скобках в when, то сравнивать мы будем именно с этим)
Все еще не понял, у меня там выхлоп компаратора.
источник

AL

Alexander Levin in Kotlin Community
Alexander Nozik
Все еще не понял, у меня там выхлоп компаратора.
Кратко. Так компилится:

    val v = a.compareTo(b)
   when {
      v < 0 -> {}
      v == 0 -> {}
      v > 0 -> {}
  }


Ибо каждая ветка when ожидает булеву.

Твоё не компилится, ибо каждая ветка ожидает либо число, либо is/in.
источник

AL

Alexander Levin in Kotlin Community
Quantum Harmonizer
брр, мало того, что там три сравнения, так оно ещё и не exhaustive
Хорошего механизма для сравнений из коробки не завезли, я даже немного об этом рассуждал в своей статье про сравнения :)
источник

AN

Alexander Nozik in Kotlin Community
Alexander Levin
Кратко. Так компилится:

    val v = a.compareTo(b)
   when {
      v < 0 -> {}
      v == 0 -> {}
      v > 0 -> {}
  }


Ибо каждая ветка when ожидает булеву.

Твоё не компилится, ибо каждая ветка ожидает либо число, либо is/in.
Понял
источник

QH

Quantum Harmonizer in Kotlin Community
Не запрятано ли где-нибудь в МПП-стдлибе array.newOfSameType(size)? Могу взять copyOf, но он делает дополнительную работу.
источник

AL

Alexander Levin in Kotlin Community
Quantum Harmonizer
Не запрятано ли где-нибудь в МПП-стдлибе array.newOfSameType(size)? Могу взять copyOf, но он делает дополнительную работу.
Ну т.е. вопрос насколько полезна функция, которая либо только с nullable типами работает, либо приводит к nullable типу.
источник

AL

Alexander Levin in Kotlin Community
Alexander Levin
Ну т.е. вопрос насколько полезна функция, которая либо только с nullable типами работает, либо приводит к nullable типу.
А так, если не туплю, это не однострочник будет?
inline fun <reified T> Array<T>.newOfSameType(size: Int) = arrayOfNulls<T>(size)
источник