ProgrammazioneSviluppatore Android

Come funzionano gli argomenti di default e i parametri nominati in Kotlin? Parla delle differenze rispetto a Java, delle sfumature nella trasmissione degli argomenti, della compilazione con metodi di overload, dell'ordine dei parametri nominati e posizionali. Fai un esempio.

Supera i colloqui con l'assistente IA Hintsage

Risposta.

Kotlin supporta valori di default (default arguments) e parametri nominati (named parameters), il che offre maggiore flessibilità rispetto a Java.

Punti principali:

  • In Kotlin, i parametri di una funzione possono avere valori di default:
    fun greet(name: String = "User", greeting: String = "Hello") { println("$greeting, $name!") }
  • È possibile chiamare una funzione specificando solo i parametri necessari, mentre gli altri verranno riempiti con i valori di default.
  • Parametri nominati consentono di specificare esplicitamente il nome dell'argomento, particolarmente utile quando una funzione ha molti parametri:
    greet(greeting = "Ciao") // -> Ciao, User!
  • È possibile combinare parametri normali (posizionali) e nominati, finché i nominati non vengono utilizzati a metà chiamata.
  • A differenza di Java (dove si fanno overload per ogni combinazione), Kotlin compila i default-arguments in metodi di overload solo per l'interoperabilità con Java, mentre all'interno di Kotlin non è visibile.

Sfumature:

  • Dopo l'uso di un argomento nominato, i successivi argomenti devono essere anch'essi nominati.
  • Per utilizzare funzioni con parametri di default da Java, potrebbero essere necessarie le annotazioni @JvmOverloads.

Domanda insidiosa.

È possibile mescolare argomenti posizionali e nominati in qualsiasi ordine durante la chiamata di una funzione in Kotlin?

Risposta corretta: No, dopo aver specificato almeno un argomento nominato, tutti i successivi devono essere nominati. La violazione genererà un errore di compilazione.

// Errato greet(greeting = "Ciao", "Ivan") // Errore! // Corretto greet("Ivan", greeting = "Ciao") greet(name = "Ivan", greeting = "Ciao")

Esempi di errori reali dovuti all'ignoranza delle sfumature dell'argomento.


Storia

Il team ha integrato un modulo Kotlin in un progetto Java legacy e ha dimenticato di aggiungere l'annotazione @JvmOverloads per la funzione con parametri di default. Di conseguenza, il codice Java non vedeva i necessari metodi di overload, generando errori di runtime durante la chiamata.


Storia

Durante un refactoring utilizzando parametri nominati, uno sviluppatore ha accidentalmente scambiato gli argomenti: durante una successiva modifica ai nomi dei parametri, questo è passato inosservato (la tipizzazione non è stata violata, ma il significato della chiamata è cambiato!). Questo ha portato a strani bug nella logica dell'interfaccia utente, scoperti solo dopo.