Vamos a ver una tabla básica de los 5 modismos básicos de Kotlin para ver donde se encuentra let en ella:
Uno de los principales usos de let
es hacer algo con el objeto en el caso de que éste no sea null
. En otras palabras: ejecutar si no es nulo.
En el código anterior puedes ver como repetimos una operación 10 veces, la cual consiste en generar un booleano aleatorio (true
o false
) y en función de lo que salga randomNull
será null
o será un String
.
Con let
solo mostrará por pantalla cuando randomNull
no sea nulo hasta terminar las repeticiones, si es nulo obviará la operación y no mostrará nada.
Puedes ver más información en Ejecutar si no es nulo.
También puedes utilizarlo de otras formas y no solo cuando es nulo. Como has visto en la tabla, let
permite devolver un bloque por lo que puedes hacer algo con con un valor pero en realidad el valor que le asignarás a la variable será el que indiques dentro del let
.
Ten cuidado con el ejemplo anterior, porque si no hubiésemos puesto "Peter"
la variable name
no sería "John"
, ni siquiera sería un String
sería un Unit
. Para conseguir que fuese un String
tendrías que utilizar also
.
Con todos los modismos basados en funciones de extensión puedes hacer referencias a funciones:
Una cosa que te preguntarás cuando termines de ver todos los modismos es y cuando los estés usando es: ¿Pero aunque estemos usando let
para hacer esta cosa, podríamos haberlo hecho también con este otro modismo (en ocasiones será also
, run, etc)? La respuesta es que muchas veces puedes conseguir el mismo resultado con dos modismos diferentes, pero algunos favorecen la semántica a la hora de leer el código por lo que es preferibles usar esos a otros.
Por ejemplo si quieres hacer X y como efecto secundario Y (asignar variable y mostrar por pantalla), es preferible a que lo hagas con also
a con let
ya que si alguien lo lee lo comprenderá de un simple vistazo.
Enlaces de interés:
- Modism – Execute if not null – Kotlinlang
- Kotlin Standard Functions cheat-sheet – Jose Alcérreca
- Function references in Kotlin – Antonio Leiva