Encadenamiento de Llamadas en Programación Orientada a Objetos

Clase 20 de 39Curso de Programación Funcional con Java SE

Contenido del curso

Functional Programming en Java

Optional y Streams: Datos mas interesantes

Todo junto: Proyecto Job-search

Resumen

Encadenar el resultado de una ejecución con otra es una técnica que aparece constantemente en programación y que resulta fundamental cuando trabajamos con programación funcional. Conocer cómo funciona internamente te permitirá escribir código más limpio, reducir variables innecesarias y prepararte para temas como la composición de funciones.

¿Qué es chaining y por qué es tan útil?

El chaining consiste en encadenar la llamada de un resultado con respecto a otra ejecución [00:10]. En lugar de guardar cada resultado intermedio en una variable, aprovechas que cada método devuelve un objeto sobre el cual puedes seguir operando de inmediato.

Esta técnica no es exclusiva de la programación funcional, pero se utiliza intensamente en ella. Más adelante, cuando una función devuelva un resultado, ese resultado se pasará directamente a otra función, creando cadenas de transformaciones sin almacenar valores intermedios [01:10].

¿Cómo funciona chaining con StringBuilder?

Un ejemplo clásico es la clase StringBuilder [00:28]. Con ella puedes construir un string paso a paso, encadenando llamadas al método append:

java StringBuilder sb = new StringBuilder() .append("texto1") .append("texto2") .append("texto3") .append("texto4");

Cada invocación de append devuelve la misma instancia de StringBuilder, lo que permite seguir agregando texto sin crear variables adicionales.

¿Cómo crear tu propia clase con chaining?

El mecanismo interno es sencillo: cada método retorna this, es decir, la misma instancia del objeto [01:30]. Veamos una clase de ejemplo llamada Chainer:

java class Chainer {

public Chainer sayHi() { System.out.println("hola"); return this; } public Chainer sayBye() { System.out.println("bye"); return this; }

}

  • Cada método imprime un mensaje y retorna this.
  • Al devolver la propia instancia, el siguiente método se ejecuta sobre el mismo objeto.

Ahora puedes hacer esto en una sola línea [02:12]:

java new Chainer().sayHi().sayBye();

El resultado en consola será:

hola bye

¿Es obligatorio encadenar o se pueden guardar los resultados?

Almacenar resultados intermedios es totalmente válido [02:38]:

java Chainer chainer2 = new Chainer().sayHi(); Chainer chainer3 = chainer2.sayBye();

Sin embargo, la ventaja principal del chaining es precisamente evitar la creación de variables intermedias cuando no aportan claridad.

¿Dónde aplicarás chaining más adelante?

Esta técnica cobra especial relevancia cuando trabajas con composición de funciones [02:20]. En temas posteriores se aplica al encadenar operaciones sobre un solo tipo de dato: filtrados, conversiones y transformaciones se van agregando una tras otra sin necesidad de almacenar cada paso en una variable distinta [02:55].

Puntos clave para recordar:

  • El chaining reduce el ruido de variables temporales.
  • Funciona porque cada método devuelve la instancia actual con return this.
  • Es la base para patrones como el builder pattern y las cadenas de streams en Java.
  • Facilita la lectura cuando las operaciones siguen un flujo lógico claro.

Si ya has trabajado con StringBuilder o con streams, ahora entiendes qué ocurre detrás de escena. Practica creando tus propias clases con métodos encadenables y comparte en los comentarios qué otros usos le encuentras al chaining en tus proyectos.