Parametros de construtor e funcoes


Os parâmetros no Kotlin são um pouco diferentes do Java. Como você pode ver, primeiro escrevemos o nome do parâmetro e, em seguida, seu tipo.

Kotlin

      
fun add(x: Int, y: Int) : Int {
    return x + y
}
      

Uma coisa extremamente útil sobre parâmetros é que podemos torná-los opcionais especificando um valor padrão. Aqui está um exemplo de uma função que você poderia criar em uma activity, que usa um toast para mostrar uma mensagem:

Kotlin

      
fun toast(message: String, length: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(this, message, length).show()
}
      

Como você pode ver, o segundo parâmetro (length) especifica um valor padrão. Isso significa que você pode escrever o segundo valor ou não, o que evita a necessidade de sobrecarga de função:

Kotlin

      
toast("Hello")
toast("Hello", Toast.LENGTH_LONG)
      

Isso seria equivalente ao código em Java:

Kotlin

      
void toast(String message){
    toast(message, Toast.LENGTH_SHORT);
}

void toast(String message, int length){
    Toast.makeText(this, message, length).show();
}
      

E isso pode ser tão complexo quanto você quiser. Veja este outro exemplo:

Kotlin

      
fun niceToast(message: String,
                tag: String = MainActivity::class.java.simpleName,
                length: Int = Toast.LENGTH_SHORT) {

    Toast.makeText(this, "[$tag] $message", length).show()
}
      

Foi adicionado um terceiro parâmetro que inclui uma tag cujo padrão é o nome da classe. A quantidade de sobrecargas que precisaríamos em Java cresce exponencialmente. Agora você pode escrever estas chamadas:

Kotlin

      
niceToast("Hello")
niceToast("Hello", "MyTag")
niceToast("Hello", "MyTag", Toast.LENGTH_SHORT)
      

E há ainda outra opção, porque os argumentos nomeados podem ser usados, o que significa que você pode escrever o nome do argumento que precede o valor para especificar qual deles você deseja:

Kotlin

      
niceToast(message = "Hello", length = Toast.LENGTH_SHORT)