Есть ли способ связать несколько let для нескольких переменных, допускающих значение NULL, в kotlin?
fun example(first: String?, second: String?) {
first?.let {
second?.let {
// Do something just if both are != null
}
}
}
Я имею в виду, что-то вроде этого:
fun example(first: String?, second: String?) {
first?.let && second?.let {
// Do something just if both are != null
}
}
Ответы:
Если интересно, вот две мои функции для решения этой проблемы.
Использование:
источник
Вот несколько вариантов, в зависимости от того, какой стиль вы хотите использовать, если у вас все одного или разных типов, и если в списке неизвестное количество элементов ...
Смешанные типы, все не должны быть нулевыми, чтобы вычислить новое значение
Для смешанных типов вы можете создать серию функций для каждого количества параметров, которые могут выглядеть глупо, но хорошо работают для смешанных типов:
Пример использования:
Выполнить блок кода, если в списке нет нулевых элементов
Здесь два варианта: первый для выполнения блока кода, когда в списке есть все ненулевые элементы, и второй, чтобы делать то же самое, когда в списке есть хотя бы один ненулевой элемент. В обоих случаях в блок кода передается список ненулевых элементов:
Функции:
Пример использования:
Небольшое изменение, чтобы функция получала список элементов и выполняла те же операции:
Пример использования:
Эти варианты можно изменить, чтобы они возвращали такие значения, как
let()
.Использовать первый ненулевой элемент (Coalesce)
Подобно функции SQL Coalesce, возвращает первый ненулевой элемент. Две разновидности функции:
Пример использования:
Другие варианты
... Есть и другие варианты, но с большей спецификацией их можно было бы сузить.
источник
whenAllNotNull
с таким , как уничтожение того :listOf(a, b, c).whenAllNotNull { (d, e, f) -> println("$d $e $f")
.Вы можете написать для этого свою функцию:
источник
Вы можете создать
arrayIfNoNulls
функцию:Затем вы можете использовать его для переменного количества значений с помощью
let
:Если у вас уже есть массив, вы можете создать
takeIfNoNulls
функцию (вдохновленнуюtakeIf
иrequireNoNulls
):Пример:
источник
В случае простой проверки двух значений и отсутствия работы со списками:
Пример использования:
источник
На самом деле, вы можете просто сделать это, понимаете? ;)
Нет ничего плохого в использовании обычной проверки на нуль в Kotlin.
И он намного удобнее для чтения для всех, кто будет изучать ваш код.
источник
let
ярлык для выполнения этих проверокНа самом деле я предпочитаю решать эту проблему с помощью следующих вспомогательных функций:
И вот как их следует использовать:
источник
Я решил эту проблему, создав несколько функций, которые более или менее повторяют поведение with, но принимают несколько параметров и вызывают только функцию, все параметры которой не равны нулю.
Тогда я использую это так:
Очевидная проблема заключается в том, что мне нужно определять функцию для каждого случая (количества переменных), которые мне нужны, но, по крайней мере, я думаю, что код выглядит чистым при их использовании.
источник
Вы также можете сделать это
источник
Я немного обновил ожидаемый ответ:
это делает это возможным:
источник
Для любого количества проверяемых значений вы можете использовать это:
И он будет использоваться так:
элементы, отправленные в блок, используют подстановочный знак, вам необходимо проверить типы, если вы хотите получить доступ к значениям, если вам нужно использовать только один тип, вы можете изменить его на общие
источник