In fluent programming style you return this
from fluent (setter) methods that would return nothing in non-fluent programming style.
This allows you to chain the different method calls which makes your code shorter and easier to handle for the developers.
Consider this non-fluent code:
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String whoAreYou() {
return "I am " + firstName + " " + lastName;
}
public static void main(String[] args) {
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
System.out.println(person.whoAreYou());
}
}
As the setter methods don't return anything, we need 4 instructions in the main
method to instantiate a Person
with some data and print it. With a fluent style this code can be changed to:
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public Person withFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public String getLastName() {
return lastName;
}
public Person withLastName(String lastName) {
this.lastName = lastName;
return this;
}
public String whoAreYou() {
return "I am " + firstName + " " + lastName;
}
public static void main(String[] args) {
System.out.println(new Person().withFirstName("John")
.withLastName("Doe").whoAreYou());
}
}
The idea is to always return some object to enable building of a method call chain and to use method names which reflect natural speaking. This fluent style makes the code more readable.