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 sì . 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.