Modificadores de visibilidad en Kotlin para principiantes
Actualizado: 5 oct 2022
Si has llegado hasta aquí es porque estás un poco perdide o tienes curiosidad por los modificadores de visibilidad. No estas sole, yo he estado en ese punto y por eso ahora vengo a ayudarte. Primero vamos con lo básico.
¿Qué es un modificador de visibilidad?
Los modificadores de visibilidad se utilizan para limitar la accesibilidad de clases, objetos, interfaces, constructores, funciones y propiedades a un cierto nivel.
Es decir, nos podemos imaginar que tenemos un castillo, y dependiendo de la accesibilidad al público que queremos darle podemos ponerles guardias para no permitir la entrada, tickets para que sólo entre quien deseemos, etc.
Tipos de modificadores
Tenemos 4 modificadores para restringir la visibilidad:
private: Marca una declaración como visible en la clase o archivo actual. Es decir, solo la declaración actual puede acceder a él.
Con el ejemplo del castillo, nos podemos imaginar que sólo el propietario del castillo puede acceder a él. Por lo tanto, los guardias no permitirían que nadie más pudiese ver lo que hay en su interior.
private set: Marca una declaración como visible fuera de la clase o archivo actual, pero sólo modificable por esta.
Aquí, nos podemos imaginar que el interior del castillo es accesible mediante entradas, todos pueden ver cómo es pero nadie puede tocar las pertenencias.
protected: Marca una declaración como visible en la clase y subclases de la misma.
En este caso, los guardias sólo permiten que entren al castillo el dueño y sus herederos.
internal: Marca una declaración como visible en el módulo actual.
Aquí los guardias serían un poco racistas y sólo permitirían entrar a los que vivan en el mismo pueblo donde se encuentra el castillo.
public: Marca una declaración como visible en todas partes. Esta es la visibilidad por defecto si no hay un modificador explícito.
Este es un castillo abierto a todo el mundo, los guardias solo están ahí para que les saquen fotos.
Declaraciones de alto nivel
Las funciones, propiedades, clases, objetos e interfaces pueden ser declarados en el "nivel superior", es decir, directamente dentro de un paquete. Ejemplo:

* Nota: el módulo es un conjunto de archivos compilados juntos (por ejemplo: una carpeta).
Si intentamos llamar a estas funciones desde otro fichero nos daremos cuenta de estas restricciones.

Como podemos ver en este tipo de declaraciones no está disponible el modificador protected.
Las analogías de alto nivel, son un poco más abstractas que un castillo. En este caso nos podríamos imaginar que estas declaraciones están dentro de un país. Y la información “privada” es aquella que cada persona tiene en su hogar. Las “internas” son las que pertenecen al país entero, por ejemplo, las tácticas de guerra. Y lo público son las zonas que pueden ser visitadas por cualquier persona del mundo.
Modificadores de visibilidad aplicados en clases e interfaces
Para no repetirme voy a poner un ejemplo de código dentro de las clases. Como se puede ver a continuación, podemos utilizar los modificadores en los campos y métodos, y así restringir su visibilidad.

Entre tantas cosas, esto es lo que he aprendido con Code Sherpas ¡Espero que te sirva de ayuda! 🥰A medida que vaya ampliando conocimiento iré complementando con más posts.
Si tienes alguna duda, quieres comentar alguna cosilla o simplemente proponer algún tema ponte en contacto conmigo o únete a nuestro slack. Estamos siempre curioseando y deseando aprender para crecer y poder compartirlo. ¡Nos vemos!😊