Wow! Siempre me había preguntado cómo es que se hacía algo así. Cuando hago APIs en Java, me encuentro muy seguido con esto:
Introducción a la programación Funcional
¿Qué es la Programación Funcional?
Entendiendo las partes de la programación funcional
¿Qué es una función en Java?
Funciones como ciudadanos de primera clase
Funciones puras
Entendiendo los efectos secundarios
Funciones de orden mayor
Funciones lambda
Inmutabilidad
Functional Programming en Java
Repositorio del curso
Configuración del entorno de trabajo
Revisando el paquete java.util.function: Function
Revisando el paquete java.util.function: Predicate
Revisando el paquete java.util.function: Consumer y Supplier
Revisando el paquete java.util.function: Operators y BiFunction
Entendiendo dos jugadores clave: SAM y FunctionalInterface
Operador de Referencia
Analizando la inferencia de tipos
Comprendiendo la sintaxis de las funciones lambda
Usando metodos default en nuestras interfaces
Dándole nombre a un viejo amigo: Chaining
Entendiendo la composición de funciones
Optional y Streams: Datos mas interesantes
La clase Optional
Entendiendo los Streams
¿Qué son los Stream listeners?
Operaciones y Collectors
Streams de tipo específico y Paralelismo
Operaciones Terminales
Operaciones Intermedias
Collectors
Todo junto: Proyecto Job-search
job-search: Un proyecto para encontrar trabajo
Vista rápida a un proyecto de Gradle
Revisando las opciones para nuestro CLI
Librerías adicionales para nuestro proyecto
Entendiendo la API de jobs
Diseñando las Funciones Constructoras de nuestro Proyecto
Agregando validaciones de datos
Diseñando las funciones de transformacion de datos
Creando flujos extras de transformación de Datos
Conclusiones
Un repaso a lo aprendido
You don't have access to this class
Keep learning! Join and start boosting your career
Call chaining, also known as "chaining", is a concept frequently used in programming, although it is not exclusive to functional programming. It allows you to connect the output of one execution with the input of another, providing more efficient and readable code. This pattern is especially useful when working with functions or objects that return an instance of themselves.
StringBuilder
class?The StringBuilder
class is a classic example of the use of call chaining. This class is designed to construct strings efficiently in Java. You can start by creating an instance of StringBuilder
and then chain multiple methods over it. Here is an example:
StringBuilder sb = new StringBuilder();sb.append("Hello").append(", ").append("world!").append(" How are you?");
This code makes multiple calls to the append
method without the need to retype the name of the sb
object. Each call to append
returns the same StringBuilder
instance, allowing the calls to be chained.
The process for implementing method chaining in a class of your own is fairly straightforward. You can create a class that returns an instance of itself in each method. Let's illustrate it with a simple class, Chainer
:
{public class Chainer { public Chainer sayHello() { System.out.println("Hello"); return this; }
public Chainer sayGoodbye() { System.out.println("Goodbye"); return this; }
public static void main(String[] args) { Chainer chain er = new Chainer(); chainer.sayHello().sayGoodbye(); } }}
In this example, each method returns this
, which is the current instance of Chainer
. This allows one method to be called immediately after the other, as in chainer.sayHello().sayGoodbye();
.
Call chaining offers several advantages in software development:
Although chaining is not unique to functional programming, it is a technique that integrates well with it, especially in function composition. You will see how chaining can facilitate complex data manipulation processes and transformations while maintaining code immutability and clarity. The ability to seamlessly connect functions is an invaluable resource that can significantly simplify the development process in multiple contexts and complex applications.
Explore more about libraries and frameworks that implement chaining to gain a better understanding. Whether in Java, JavaScript, or any other programming language, this technique is widely applicable and will allow you to create simpler and more scalable applications. Don't hesitate to practice implementing your own classes with chained methods, as this practice will help you internalize its benefits and apply them in future projects.
Keep learning and innovating in your journey as a developer!
Contributions 18
Questions 1
Wow! Siempre me había preguntado cómo es que se hacía algo así. Cuando hago APIs en Java, me encuentro muy seguido con esto:
Es interesante como el profesor explica cosas que usualmente un programador utiliza diariamente y no conoce el “como” y “por que” funciona.
⠀
El Chaining o encadenamiento consiste en hacer llamadas consecutivas a diferentes metodos de un mismo objeto.
⠀
Un ejemplo claro es al utilizar la clase StringBuilder
, esta permite encadenar llamadas al objeto creado inicialmente para manipular la creación de un String
.
StringBuilder stringBuilder = new StringBuilder();
String s = stringBuilder.append("Hola") // Agrega el texto "Hola"
.append(" world") // Agrega el texto " world"
.delete(5, 10) // Borra el texto "world" (por índices)
.append("mundo") // Agrega el texto "mundo"
.reverse() // Invierte el texto
.toString(); // Lo convierte a String (termina la cadena)
System.out.println(s); // Imprime "odnum aloH"
La explicación detrás de este comportamiento es que cada una de las funciones aplica el cambio correspondiente y devuelve una referencia al mismo objeto (return this;
), lo que hace posible llamar otra función sin perder el cambio realizado en la anterior.
estoy un poco confundido pense que esto se llamaba patron builder, en donde podia instanciar un elemento con los atributos de la clase que yo seleccionara.
Employee employee = new Builder().name(“John”).lastName(“Doe”).department(“Accounting”).build();
Es lo mismo o en algo difiere??
Chaining es un ecadenamiento de llamadas
Bueno, por lo menos yo no sabia esto. Gracias
hice un ejemplo pocho con hates ou yeaaa
package com.platzi.functional._10_chaining.data;
import com.platzi.functional._06_reference_operator.TestArea;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
public class HotDogs {
public static void main(String[] args) {
Hate hSinTochino = new Hate();
hSinTochino.agregarIngrediente("Sin tocino")
.agregarIngrediente("Crema")
.agregarIngrediente("Tomate")
.agregarIngrediente("Catsu")
.dondeComer("Para llevar")
.cantidadDeHates(2);
System.out.println(hSinTochino);
}
/*
* Se crea una clase statica de un objeto, en la cual los métodos de ella returnean siempre el propio objeto
* por lo cual se le pueden seguir aplicando los otros metodos, de esta manera, se puede, por ejemplo crear un hate
* pasandole los ingredientes, podria haber otro metodo, indicando por ejemplo si es para llevar, cuantos pedirá y
* se seguirian pudiendo usar siempre y cuando se devuelvan en todos los métodos el propio objeto, es como
* andarse pasando una papa cacliente
* */
static class Hate{
ArrayList<String> ingredientes = new ArrayList<>();
int cantidadHates;
String dondeComer;
public Hate() {
this.ingredientes.add("Salchicha");
this.ingredientes.add("Pan");
}
public Hate agregarIngrediente(String ingrediente){
ingredientes.add(ingrediente);
return this;
}
public Hate dondeComer(String ubicacion){
this.dondeComer = ubicacion;
return this;
}
public Hate cantidadDeHates(int cantidad){
this.cantidadHates = cantidad;
return this;
}
@Override
public String toString() {
return
"Ingredientes: "+ingredientes.toString() + "\n" +
"Cantidad: " + cantidadHates + "\n"+
"Pa donde se fue: " + dondeComer;
}
}
}
Este profe explica bien y sin relleno irrelevante.
Este concepto se llama fluent interface
Chaining es el resultdo de una ejecucion con respecto a otra ejecucion
Chaining no ayuda a encadenar funciones sin necesidad de guardar los resultados en variables
Excelente clase instructor Sinuhé, no conocía esta forma de encadenar funciones, la aprovechare y la implementare cuando vea la oportunidad.
super! tampoco conocía este concepto 😃
Muy interesante, es algo que me volvió loco cuando empecé a aprender a programar con Java. Y al final es algo que aprendí con la práctica sin darme cuenta.
Ahora soy totalmente consciente gracias a esta explicación.
Muchas gracias, ahora entiendo la funcioinalidad de chaining.
El Chaining nos da la posibilidad de encadenar una seria de procedimientos sobre un objeto dado.
Want to see more contributions, questions and answers from the community?