Условный оператор Котлина
Что эквивалентно этому выражению в Котлине?
Это неверный код в Котлине.
В Kotlin, if утверждения являются выражениями. Таким образом, следующий код эквивалентен:
Здесь важно различие между выражением и высказыванием. В Java / C # / JavaScript, if формирует оператор, то есть он не разрешает значение. Более конкретно, вы не можете назначить его переменной.
Если вы исходите с языка, где, if это утверждение, это может показаться неестественным, но это чувство должно скоро исчезнуть.
Вы можете определить свою собственную функцию расширения Boolean которая возвращает null когда Boolean false является false чтобы создать структуру, похожую на тернарный оператор:
Это сделает a ? b : c a ? b : c выражение a ? b : c преобразуется в a then b ?: c , как показано ниже:
Обновление. Но для того, чтобы сделать еще один условный переключатель, похожий на Java, вам понадобится нечто подобное
infix fun Boolean.then(param: () -> T): T? = if (this) param() else null
println(condition then < "yes" >?: «no») обратите внимание на лямбда. его расчет содержания должен быть отложен до тех пор, пока мы не убедимся в том, что condition true
Этот выглядит неуклюжим, поэтому существует высокий спрос на порт Java-оператора Тройны в Котлин
Для себя я использую следующие функции расширения:
Первый возвращает значение по умолчанию, если объект равен нулю. Второй будет оценивать выражение, представленное в лямбда в том же случае.
Лично для меня код выше более читабельного, чем if строительство
В Kotlin, if является выражением, т.е. оно возвращает значение. Поэтому нет тройного оператора (condition ? then : else) , потому что обычный, если работает отлично в этой роли. ручной источник отсюда
Взгляните на документы :
В Kotlin, if является выражением, т.е. оно возвращает значение. Поэтому нет тройного оператора (условие? Then: else), потому что обычный, если работает отлично в этой роли.
В kotlin нет тернарного оператора , поскольку блок if else возвращает значение
так что вы можете сделать: val max = if (a > b) a else b вместо java max = (a > b) ? b : c max = (a > b) ? b : c
Мы также можем использовать when построении, это также возвращает значение:
Некоторые угловые случаи, не упомянутые в других ответах.
С появлением takeIf в Kotlin 1.1 тернарный оператор a ? b : c a ? b : c также может быть выражено следующим образом:
Это становится еще короче, если c имеет значение null :
Также обратите внимание, что типичный в Java мире null проверяет как value != null ? value : defaultValue value != null ? value : defaultValue переводить в идеоматическом Kotlin просто value ?: defaultValue .
Аналогично a != null ? b : c a != null ? b : c можно перевести на a?.let < b >?: c .
при замене оператора switch C-подобных языков. В простейшей форме это выглядит так:
В Котлине нет тройного оператора. Это кажется проблематичным с первого взгляда. Но подумайте, что мы можем сделать это с помощью inline if else, потому что это выражение здесь. Просто мы должны сделать –
Здесь мы можем еще, если блок слишком много, сколько нам нужно. Подобно-
Так что эта строка настолько проста и удобочитаема, как тернарный оператор. когда мы используем более одного тернарного оператора в java, это кажется ужасным. Но здесь мы имеем четкий синтаксис. даже мы можем написать его также в нескольких строках.
Другим интересным подходом было бы использовать, when :
Может быть весьма удобно в некоторых более сложных сценариях. И, честно говоря, это более читаемо для меня, чем if . else .
как цитирует Дрю Ноукс, kotlin использует выражение if как выражение, поэтому Тернарный Условный Оператор больше не нужен,
но с функцией расширения и перегрузкой infix вы можете реализовать это самостоятельно, вот пример
затем используйте его так
Вы можете сделать это много в Котлине
Выражения -> Выражения
В Kotlin многие управляющие выражения, включая if , when или even try могут использоваться в качестве выражений . Это означает, что он имеет результат и может быть назначен переменной, возвращенной из функции и т. Д.
Нет необходимости в тройном операторе
Сказав это, Котлин не нужен тернарный оператор .
if (a) b else c – это то, что вы можете использовать вместо выражения Java a ? b : c a ? b : c .
ИМО , последний менее читабель, так как все знают, что делает, если ? : ? : довольно неудобно. Поэтому я согласен, что тернарный оператор не имеет права существовать в Котлине.
Другие альтернативы
когда
Вы также можете увидеть многое, when создаете, когда условия проверяются в Котлине. Это также способ выражения if-else каскадов альтернативным способом. Следующее соответствует вашему примеру.
расширения
Как показывает множество хороших примеров ( https://stackoverflow.com/a/39687177/8073652 ), в других ответах также могут быть расширения.
Вы можете использовать выражение для этого в Котлине. В Kotlin if – выражение с результатом результата. Итак, в Котлине мы можем написать
и в Java мы можем добиться того же, но с большим кодом
Еще один короткий подход к использованию
Здесь kotlin сам проверяет нулевое значение, и если он равен нулю, он передает пустое строковое значение.
В Котлине нет тройного оператора .
В Kotlin, if является выражением, т.е. оно возвращает значение.
Поэтому нет тройного оператора (условие? Then: else), потому что обычный, если работает отлично в этой роли.
Эквивалент в Котлине
Со следующими функциями infix я могу охватить многие распространенные случаи использования почти так же, как это можно сделать в Python:
Источник
Тернарный Условный Оператор Котлина
каков эквивалент этого выражения в Котлине?
это недопустимый код в Kotlin.
26 ответов:
В Котлин, if выражения. Таким образом, следующий код эквивалентен:
здесь важно различие между выражением и утверждением. В Java / C# / JavaScript, if формирует оператор, что означает, что он не разрешает значение. Более конкретно, вы не можете назначить его переменной.
если вы пришли из языка, где if это заявление, это может показаться неестественным, но это чувство скоро спадать.
вы могли бы определить свой собственный Boolean функция расширения, которая возвращает null когда Boolean и false чтобы обеспечить структуру, аналогичную тернарному оператору:
это a ? b : c выражение перевести на a then b ?: c , например:
обновление: Но чтобы сделать еще один Java-подобный условный переключатель, вам понадобится что-то вроде этого
infix fun Boolean.then(param: () -> T): T? = if (this) param() else null
println(condition then < "yes" >?: «no») обратите внимание на лямбду. его расчет содержания должен быть отложен до тех пор, пока мы не убедимся condition и true
для себя я использую следующие функции расширения:
первая будет возвращать значение по умолчанию в случае, если объект равен null. Второй будет оценивать выражение, представленное в лямбде в том же случае.
лично для меня код выше более читабельный чем if строительство подстановкой
В Котлин, if — это выражение, т. е. она возвращает значение. Следовательно нет никакого тернарного оператора (condition ? then : else) , потому что обычный, Если отлично работает в этой роли. руководство по эксплуатации источник здесь
здесь нет тернарного оператора в Котлине, как то if else блок возвращает значение
Итак, вы можете сделать: val max = if (a > b) a else b вместо того, чтобы в Java max = (a > b) ? b : c
мы также можем использовать when строительство, он также возвращаемое значение:
в Kotlin, если это выражение, т. е. оно возвращает значение. Поэтому нет тернарного оператора (условие ? потом : еще), потому что обычный Если отлично работает в этой роли.
некоторые случаи, не указанные в других ответах.
С момента появления takeIf на Котлин 1.1 тернарный оператор a ? b : c также можно выразить так:
это становится еще короче, если c null :
Также обратите внимание, что типичные в мире Java нулевые проверки, такие как value != null ? value : defaultValue перевести в ideomatic Котлин просто value ?: defaultValue .
как a != null ? b : c можно перевести на a?.let < b >?: c .
у Котлина есть выражения
в Котлине многие операторы управления, включая if , when или даже try может использоваться как выражения. Это означает, что они имеют результат и могут быть назначены переменной, возвращенной из функции и т. д.
синтаксически, нет необходимости в тернарном операторе
сказав, что Котлин не нуждается в тернарном операторе.
if (a) b else c что можно использовать вместо Ява выражение a ? b : c .
Я думаю, что идея заключается в том, что последнее менее читаемо, так как все знают, что ifelse делает, а ? : довольно неудобно, если вы не знакомы с синтаксисом. Хотя я должен признать, что я часто пропускаю более удобный тернарный оператор.
Другие Альтернативы
, когда
вы также можете увидеть много when конструирует всякий раз, когда условия проверяются в Котлине. Это также способ экспресс if-else каскадирует альтернативным способом. Следующее соответствует вашему примеру.
расширения
как много хороших примеров (Котлин Тернарный Условный Оператор) в других ответах показывают, расширения также могут быть способом пойти.
когда заменяет оператор коммутатора C-подобных языков. В самом простом виде это выглядит так
в Котлине нет тернарного оператора. Это кажется проблематичным на первый взгляд. Но думаю, что мы можем сделать это с помощью inline if else, потому что это выражение здесь. Просто мы должны сделать —
здесь мы можем еще, если блокировать слишком много, сколько нам нужно. Как —
таким образом, эта строка настолько проста и читаема, чем тернарный оператор. когда мы используем более одного тернарного оператора в java, это кажется ужасным. Но здесь у нас есть четкий синтаксис. даже мы можем написать это в несколько строк тоже.
как цитировал Дрю Ноукс, Котлин использует оператор if в качестве выражения, так что тернарный условный оператор больше не нужен,
но с функцией расширения и перегрузки инфикса, вы могли бы реализовать это самостоятельно, вот пример
тогда используйте его вот так
еще один интересный подход будет использовать when :
может быть весьма удобно в некоторых более сложных сценариев. И, честно говоря, это более читаемо для меня, чем if . else .
вы можете сделать это много способов в Котлине
в Котлине нет тернарного оператора, для этого есть выражение if:
согласно документации Kotlin для себя, я использую следующий код:
Если вы хотите знать больше информации, проверьте эту ссылку : поток управления: если, когда, Для, в то время как
можно использовать if выражение для этого в Котлин. В Котлине if — выражение со значением результата. Так что в Котлине мы можем написать
и в Java мы можем достичь того же, но с большим кодом
в Котлине нет троичной операции, но есть несколько интересных способов обойти это. Как указывали другие, прямой перевод на Котлин будет выглядеть так:
но, лично я думаю, что это может быть немного загромождено и трудно читать. Есть и другие опции, встроенные в библиотеку. Вы можете использовать takeIf <> с оператором Элвиса:
что там происходит, так это то, что команда takeIf < >возвращает либо ваш result1, либо null, и оператор elvis обрабатывает параметр null. Есть некоторые дополнительные опции, takeUnless < >, например:
язык понятен, вы знаете, что это делает.
если это обычно используемое условие, вы также можете сделать что-то интересное, например, использовать встроенный метод расширения. Предположим, что мы хотим отслеживать счет игры как Int, например, и мы хотим всегда возвращать 0, если данное условие не выполняется:
ок, это кажется уродливый. Но подумайте, как это выглядит, когда он используется:
как вы можете видеть, Kotlin предлагает большую гибкость в том, как вы решите выразить свой код. Существует бесчисленное множество вариантов моих примеров и, вероятно, способов, которые я еще даже не обнаружил. Надеюсь, это поможет!
еще один короткий подход к использованию
здесь Котлин сам проверяет значение null, и если оно равно null, то он передает пустое строковое значение.
зачем использовать что-то вроде этого:
когда вы действительно можете использовать что-то вроде этого ( a является логическим в этом случае):
в Котлине есть нет тернарного оператора.
в Kotlin, если это выражение, т. е. оно возвращает значение.
поэтому нет тернарного оператора (условие ? потом : еще), потому что обычный Если отлично работает в этой роли.
эквивалент в Котлин
С помощью следующих функций инфикса я могу охватить многие распространенные случаи использования почти так же, как это можно сделать в Python :
используйте либо условный оператор if-else, либо оператор when следующим образом
в Котлине нет тернарного оператора, наиболее закрытыми являются следующие два случая,
- если что другое, как выражение
val a = true if(a) print(«A is true») else print(«A is false»)
если выражение слева ?: не является нулем, оператор Элвиса возвращает его, в противном случае он возвращает выражение вправо. Отмечать что правостороннее выражение вычисляется только в том случае, если левостороннее сторона имеет значение null.
пример: var энергия: Int = данные?.получить (должность)?.энергия?.toInt() ?: 0
в Котлине, если вы используете ?: это будет работать, как если бы оператор вернет null тогда ?: 0 это займет 0 или все, что у вас есть написать эту сторону.
при работе с apply (), let кажется очень удобным при работе с троичными операциями, так как это более элегантно и дает вам пространство
Источник