Operatore condizionale ternario di Kotlin

1. Panoramica

In breve, non esiste un operatore ternario in Kotlin . Tuttavia, l'utilizzo di espressioni if e when aiuta a colmare questa lacuna.

In questo tutorial, esamineremo alcuni modi diversi per imitare l'operatore ternario.

2. se e quando espressioni

A differenza di altre lingue, se e quando in Kotlin sono espressioni. Il risultato di tale espressione può essere assegnato a una variabile .

Usando questo fatto, sia se che quando possono essere sostituiti a modo loro all'operatore ternario.

2.1. Utilizzando if-else

Diamo uno sguardo all'uso dell'espressione if per imitare l'operatore ternario:

val result = if (a) "yes" else "no"

Nell'espressione precedente, se a è impostato su true , la nostra variabile di risultato è impostata su yes . Altrimenti, è impostato su no .

Vale la pena notare che il tipo di risultato dipende dall'espressione sul lato destro . In generale, il tipo è Any . Ad esempio, se il lato destro ha un tipo booleano , anche il risultato sarà booleano :

val result: Boolean = if (a == b) true else false

2.2. Usando quando

Possiamo anche usare un'espressione when per creare un operatore pseudo-ternario:

val result = when(a) {   true -> "yes"   false -> "no" }

Il codice è semplice, diretto e di facile lettura. Se a è vero , assegna il risultato a . Altrimenti assegnalo al n .

2.3. Operatore Elvis

A volte, usiamo espressioni if per estrarre un valore quando non è nullo o restituirne uno predefinito quando è nullo :

val a: String? = null val result = if (a != null) a else "Default"

È anche possibile fare lo stesso con le espressioni when :

val result = when(a) { null -> "Default" else -> a }

Poiché questo è un modello così comune, Kotlin ha un operatore speciale per esso:

val result = a ?: "Default"

Il ?: È conosciuto come l'operatore Elvis. Restituisce l'operando se non è nullo . In caso contrario, si tornerà al valore predefinito specificato alla destra del :? Dell'operatore .

2.4. DSL

C'è sicuramente la tentazione di creare un DSL che imiti un operatore ternario. Ma le restrizioni linguistiche di Kotlin sono troppo rigide per consentire una riproduzione al 100% della sintassi ternaria tradizionale.

Pertanto, evitiamo questa tentazione e usiamo semplicemente una delle soluzioni menzionate in precedenza.

3. Conclusione

Sebbene Kotlin non abbia un operatore ternario, ci sono alcune alternative che possiamo usare - se e quando . Non sono uno zucchero sintattico, ma espressioni complete, come abbiamo visto in precedenza.

Come sempre, il codice è disponibile su GitHub.