|
|||
Использование условных выраженийИспользование условных выражений fun max(a: Int, b: Int): Int { if (a > b) return a else return b}Также if может быть использовано как выражение (т. е. if ... else возвращает значение): fun max(a: Int, b: Int) = if (a > b) a else bNullable-значения и проверка на null Ссылка должна быть явно объявлена как nullable (символ ?) когда она может принимать значение null. Возвращает null если str не содержит числа: fun parseInt(str: String): Int? { // ...}Использование функции, возвращающей null: fun main(args: Array<String>) { if (args.size < 2) { print("Ожидается два целых числа") return } val x = parseInt(args[0]) val y = parseInt(args[1]) // Использование `x * y` приведет к ошибке, потому что они могут содержать null if (x != null && y != null) { // x и y автоматически приведены к не-nullable после проверки на null print(x * y) }}или // ... if (x == null) { print("Неверный формат числа x '${args[0]}'") return } if (y == null) { print("Неверный формат числа у '${args[1]}'") return } // x и y автоматически приведены к не-nullable после проверки на null print(x * y)Проверка типа и автоматическое приведение типов Оператор is проверяет, является ли выражение экземпляром заданного типа. Если неизменяемая внутренняя переменная или свойство уже проверены на определенный тип, то в дальнейшем нет необходимости явно приводить к этому типу: fun getStringLength(obj: Any): Int? { if (obj is String) { // в этом блоке `obj` автоматически преобразован в `String` return obj.length } // `obj` имеет тип `Any` вне блока проверки типа return null}или fun getStringLength(obj: Any): Int? { if (obj !is String) return null // в этом блоке `obj` автоматически преобразован в `String` return obj.length}или даже fun getStringLength(obj: Any): Int? { // `obj` автоматически преобразован в `String` справа от оператора `&&` if (obj is String && obj.length > 0) return obj.length return null}
|
|||
|