Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

Consejo rápido: escribe código más limpio con conversiones Sam Kotlin

Difficulty:BeginnerLength:ShortLanguages:

Spanish (Español) translation by Xiomara Reynoso (you can also view the original English article)

Si eres un desarrollador de aplicaciones de Android con experiencia, probablemente estés acostumbrado a la verbosidad de Java 7. Como resultado, es posible que encuentres la sintaxis concisa de Kotlin, que está orientada a los programadores funcionales, un poco inquietante.

Un problema común que los principiantes encuentran al aprender Kotlin es entender cómo espera que trabaje con interfaces Java que contienen un solo método. Tales interfaces son ubicuas en el mundo Android y a menudo se conocen como interfaces SAM, donde SAM es la abreviatura de Single Abstract Method.

En este breve tutorial, aprenderás todo lo que necesitas saber para usar adecuadamente las interfaces SAM de Java en código Kotlin.

1. ¿Qué es una conversión de SAM?

Cuando deseas hacer uso de una interfaz Java que contiene un solo método en su código Kotlin, no tienes que crear manualmente una clase anónima que lo implemente. En su lugar, puedes utilizar una expresión lambda. Gracias a un proceso llamado conversión SAM, Kotlin puede convertir de forma transparente cualquier expresión lambda cuya firma coincida con la del método único de la interfaz en una instancia de una clase anónima que implementa la interfaz.

Por ejemplo, considera la siguiente interfaz Java de un método:

Un enfoque ingenuo y similar a Java 7 para usar la interfaz anterior implicaría trabajar con una expresión de objeto y se vería así:

Eso es una gran cantidad de código innecesario, que tampoco es muy legible. Sin embargo, al aprovechar la facilidad de conversión de SAM de Kotlin, puede escribir el siguiente código equivalente en su lugar:

Como puedes ver, ahora hemos reemplazado la clase anónima con una expresión lambda corta, que lleva como prefijo el nombre de la interfaz. Ten en cuenta que el número de argumentos que toma la expresión lambda es igual al número de parámetros de la firma del método de la interfaz.

2. Conversiones de SAM en llamadas de función

Mientras trabajas con clases Java que tienen métodos que toman tipos SAM como sus argumentos, puedes simplificar aún más la sintaxis anterior. Por ejemplo, considera la siguiente clase Java, que contiene un método que espera un objeto que implementa la interfaz Adder:

En tu código Kotlin, ahora puedes pasar directamente una expresión lambda al método setAdder(), sin prefijarlo con el nombre de la interfaz Adder.

Vale la pena señalar que al llamar a un método que toma un tipo SAM como su único argumento, eres libre de omitir el paréntesis para que el código sea aún más conciso.

3. Conversiones de SAM sin lambdas

Si crees que las expresiones lambda son confusas, tengo buenas noticias para ti: las conversiones de SAM también funcionan bien con funciones ordinarias. Por ejemplo, considera la siguiente función cuya firma coincide con la del método de la interfaz Adder:

Kotlin te permite pasar directamente la función myCustomAdd() como argumento al método setAdder() de la clase calculator. No olvides hacer referencia al método usando el operador ::. Así es como:

4. La variable it

Muchas veces, las interfaces SAM contienen métodos de un parámetro. Un método de un parámetro, como su nombre indica, solo tiene un parámetro en su firma. Mientras trabajas con estas interfaces, Kotlin te permite omitir el parámetro en la firma de la expresión lambda y usar una variable implícita llamada it en el cuerpo de la expresión. Para aclarar las cosas, considera la siguiente interfaz Java:

Al usar la interfaz de Doubler en el código Kotlin, no tiene que mencionar explícitamente el parámetro de número en la firma de la expresión lambda. En su lugar, simplemente puedes referirse a él como it.

5. Interfaces SAM en Kotlin

Como desarrollador de Java, es posible que te inclines a crear interfaces SAM en Kotlin. Hacerlo, sin embargo, no suele ser una buena idea. Si creas una interfaz SAM en Kotlin, o crea un método Kotlin que espera un objeto que implementa una interfaz SAM como argumento, el recurso de conversión SAM no estará disponible para ti: la conversión SAM es una característica de interoperabilidad Java y se limita a clases e interfaces Java solamente.

Debido a que Kotlin admite funciones de orden superior, funciones que pueden tomar otras funciones como argumentos, nunca necesitarás crear interfaces de SAM en él. Por ejemplo, si la clase calculator se reescribe en Kotlin, su método setAdder() se puede escribir de tal manera que tome directamente una función como argumento, en lugar de un objeto que implemente la interfaz Adder.

Al utilizar la clase anterior, puedes establecer adder en una función o una expresión lambda mediante el operador =. El código siguiente muestra cómo:

Conclusión

Las API de Android están escritas en gran parte en Java, y muchas usan interfaces de SAM extensivamente. Lo mismo se puede decir de la mayoría de las bibliotecas de terceros también. Mediante el uso de las técnicas que aprendiste en este tutorial, puedes trabajar con ellos en tu código Kotlin de una manera concisa y fácil de leer.

Para obtener más información sobre las características de interoperabilidad de Java de Kotlin, consulta la documentación oficial. ¡Y echa un vistazo a algunos de nuestros otros tutoriales sobre el desarrollo de aplicaciones para Android!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.