Как присвоить одно и то же значение нескольким переменным в Kotlin

У меня есть две переменные, и я хочу присвоить обеим переменным одно и то же значение, как показано ниже:

var allGood: Boolean = false
val deviceId: String = "3550200583"
var isValidId: Boolean = false
allGood = isValidId = deviceId.length > 0 && deviceId.length <= 16

есть ли способ добиться этого?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
4 433
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Поскольку присваивание не является выражением в Kotlin, вы не можете выполнять множественные присваивания таким образом. Но есть и другие способы. Самое очевидное просто:

isValidId = deviceId.length > 0 && deviceId.length <= 16
allGood = isValidId

Более идиоматический (если дольше) способ:

(deviceId.length > 0 && deviceId.length <= 16).let {
    allGood = it
    isValidId = it
}

(Кстати, можно упростить условие до deviceId.length in 1..16.)

Есть несколько причин, по которым Kotlin этого не позволяет. Главный из них является, что он несовместим с синтаксисом вызова функции с именованными параметрами: fn(paramName = value). Но это также позволяет избежать путаницы между = и == (что в противном случае может привести к трудно обнаруживаемым ошибкам). См. также здесь.

Это более близкое, но не фактическое решение, которое я искал. У Java есть поддержка, но, похоже, у Kotlin нет.

Mundroid 30.05.2019 09:04

Я не думаю, что второй способ более идиоматичен, чем первый.

Alexey Romanov 30.05.2019 20:23

Другой способ - сделать это следующим образом:

val deviceId: String = "3550200583";
val condition = deviceId.length > 0 && deviceId.length <= 16
var (allGood, isValidId) = arrayOf(condition, condition);

Зная об этом синтаксисе. Не помогает в моем случае. Спасибо.

Mundroid 30.05.2019 09:01

Что о:

var allGood: Boolean = false
val deviceId: String = ...
val isValidId: Boolean = (deviceId.length in 1..16).also { allGood = it }

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

Лучший вариант для этого варианта использования в Котлине.

Ionut Negru 26.05.2020 13:35

Другие вопросы по теме