paulo-dutra logo

Kotlin variável do tipo string utilizando null safety

Fala galera, recentemente estava estudando alguns conceitos básicos sobre o kotlin.

Um dos recursos que achei interessante, foi o null safety que consiste em uma forma de declarar uma variável do tipo string para previnir alguns erros durante a sua manipulação.

De forma geral para declarar váriavel no kotlin, podemos utilizar a palavra reservada val ou var, sendo que val se assimila ao const no Javascript e var se assimila ao let. Ou seja val para valores constantes e var para valores que podem mudar ao longo do ciclo de execução.

Após a escolha do tipo de declaração que atenda a sua necessidade, você informa o tipo de dado que aquela variável irá armazenar neste caso string, abaixo esta a forma padrão de declaração sem a proteção do null safety:

fun main() {
   var str: String = "my value"
}

Digamos que em algum momento você deseje sobreescrever o valor da variável acima, atribuindo um valor nulo, você irá notar que irá acontecer um erro de compilação:

fun main() {
  var str: String = "my value"
  str = null
  print(str)
  //será apresentado o seguinte erro: Null can not be a value of a non-null type String 
}

Entretanto se você fizer a mesma coisa, usando o null safety esta atribuição será permitida. Para declarar uma variável do tipo string com null safety, basta informar um ponto de interrogação após o tipo string:

fun main() {
  var str: String? = "my value"
  str = null
  print(str)
  //será apresentado o valor null  
}

Caso você tente acessar o tamanho da variável que esteja com null safety e a mesma esteja nula, é recomendado que você também utilize o ponto de interogação antes da palavra reservada length, para previnir que seja apresentado um erro:

fun main() {
  var str: String? = "my value"
  str = null
  print(str.length)
  //será apresentado o seguinte erro: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

}
fun main() {
  var str: String? = "my value"
  str = null
  print(str?.length)
  //será apresentado o valor null  
}

Veja mais informações sobre null safety na documentação do kotlin: https://kotlinlang.org/docs/null-safety.html