Kotlin - одно и то же условие: множественные операторы if или один оператор if - PullRequest
0 голосов
/ 22 октября 2018

В Kotlin вы можете использовать операторы if, вроде тернарных операторов.

У нас есть возможность сделать что-то вроде этого:

val x = if (isOdd) 1 else 2

, но если у нас есть несколько переменных, которые должныустановить на основе какого-либо условия, правильнее ли это сделать по старинке, например так:

val x: Int
val y: Int
val z: Int

if (isOdd) {
    x = 1
    y = 3
    z = 5
} else {
    x = 2
    y = 4
    z = 6
}

или вот так:

val x = if (isOdd) 1 else 2
val y = if (isOdd) 3 else 4
val z = if (isOdd) 5 else 6

второй способ выглядит для меня намного чище, но я хотел бы знать, будет ли первый метод работать на компьютере быстрее, поскольку ему нужно только один раз вычислить условие, тогда как второму способу необходимо проверить условие 3 раза.

Второй способ на самом деле медленнее илибудет ли он оптимизирован компилятором?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я бы предпочел что-то вроде этого, выглядит намного более Kotlinesque:

data class Point3D(val x: Int, val y: Int, val z: Int)

fun foo(isOdd: Boolean): Point3D = if (isOdd) Point3D(1, 3, 5) else Point3D(2, 4, 6)

//or using destructureing see https://kotlinlang.org/docs/reference/multi-declarations.html)
val (x,y,z) = if (isOdd) Triple(1, 3, 5) else Triple(2, 4, 6)

Также он сочетает в себе лучшее из обоих, используя if в качестве выражения и необходим только один if.(За счет дополнительного выделения объекта).

Но ответить на ваш вопрос.Делайте то, что вам нравится, и считаете наиболее читабельным.Мудрая производительность, я сомневаюсь, что вы будете иметь значение.

0 голосов
/ 22 октября 2018

if - это выражение в Kotlin, а не утверждение: оно возвращает значение, тогда как в случае Java это не так.

Я не думаю, что здесь есть такая проблема оптимизации, которую вы должны когда-либоподумай честно.Преждевременная оптимизация является распространенным источником проблем.Если эта логическая переменная ограничена потоками, то я думаю, что компилятор выполнит все возможные оптимизации в этом контексте, так что это почти не потребует дополнительных затрат (если не полностью).

Мудрый выбор вОО-языки предпочитают ясность и гибкость, а не низкоуровневые проблемы оптимизации (особенно, когда компиляторы могут их решить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...