¿Por qué Kotlin no apoya al "operador ternario"?

Explique: esta pregunta es más acerca de las intenciones de layout de Kotlin. Muchos lenguajes de expresión admiten tanto el Ternary operator como la if expression [por ejemplo, Ruby, Groovy ].


Antes que nada, sé que Groovy es compatible tanto con el Ternary operator Elvis operator : operador ternario en Groovy . Entonces no creo que sea un problema de syntax.


Entonces los documentos oficiales dijeron:

En Kotlin, si es una expresión, es decir, devuelve un valor. Por lo tanto, no hay operador ternario (condición? Entonces: más), porque ordinario si funciona bien en este rol.

Y esto no me convence Porque Kotlin soporta el Elvis operator que normalmente funciona bien en ese rol.

Creo que el ternary operator veces es mejor que lo normal if , aunque me pregunto por qué Kotlin no solo apoya al ternary operator .

    Porque if .. else .. funciona bien. Echar un vistazo:

     fun main(args: Array<String>) { var i = 2 println("i ${ if(i == 1) "equals 1" else "not equals 1" }") } 

    En idiomas que tienen un ternary operator lo utilizas así

     String value = condition ? foo : bar; 

    En Kotlin puedes hacer lo mismo usando if y else

     var value = if(condition) foo else bar; 

    Es un poco detallado que el ternary operator . Pero los diseñadores de Kotlin han pensado que está bien. Puedes usar if-else así porque en Kotlin if es una expresión y devuelve un valor

    Elvis operator es esencialmente una versión comprimida del enunciado condicional ternario y equivalente a seguir en Kotlin.

     var value = if(foo != null) foo else bar; 

    Pero si se usa el Elvis operator se simplifica de la siguiente manera

     var value = foo ?: bar; 

    Esto es una simplificación considerable y Kotlin decidió savelo.

    El operador ternario tiene sus problemas, por ejemplo, es difícil de leer con expresiones grandes. Aquí hay una línea de mi proyecto C ++ donde utilicé el operador ternario:

     const long offset = (comm_rank > 0) ? task_size_mod + (comm_rank - 1) * task_size : 0; 

    Prefiero usar una expresión if else aquí ya que es mucho más visible.

    En respuesta a su pregunta, conozco dos razones por las cuales el ternary operator no se implementó en Kotlin:

    1) Dado que if else es una expresión de todos modos, puede replace ? : ? :

    2) La experiencia de otros idiomas (C ++) muestra eso ? : ? : provoca código difícil de leer, por lo que es mejor dejarlo fuera