Sök…


Anmärkningar

mål

Det primära målet för ett flytande gränssnitt är ökad läsbarhet.

När de används för att konstruera objekt kan de val som är tillgängliga för den som ringer upp göras tydligt och verkställas via kompileringstidscheck. Överväga till exempel följande alternativträd som representerar steg längs vägen för att konstruera ett komplext objekt:

A -> B 
  -> C -> D -> Done
       -> E -> Done
       -> F -> Done.
       -> G -> H -> I -> Done.

En byggare som använder ett flytande gränssnitt skulle göra det möjligt för den som ringer enkelt att se vilka alternativ som finns tillgängliga vid varje steg. Till exempel är A -> B möjligt, men A -> C är inte och skulle resultera i ett kompileringstidsfel.

Sanningen - flytande testram

Från "Hur man använder sanningen" http://google.github.io/truth/

String string = "awesome";
assertThat(string).startsWith("awe");
assertWithMessage("Without me, it's just aweso").that(string).contains("me");

Iterable<Color> googleColors = googleLogo.getColors();
assertThat(googleColors)
    .containsExactly(BLUE, RED, YELLOW, BLUE, GREEN, RED)
    .inOrder();

Flytande programmeringsstil

I flytande programmeringsstil returnerar du this från flytande (setter) -metoder som inte skulle returnera något i icke-flytande programmeringsstil.

Detta låter dig kedja olika metodsamtal som gör din kod kortare och lättare att hantera för utvecklarna.

Tänk på denna icke-flytande kod:

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());
  }
}

Eftersom setter-metoderna inte returnerar någonting, behöver vi fyra instruktioner i main för att instansera en Person med lite data och skriva ut den. Med en flytande stil kan denna kod ändras till:

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());
  }
}

Tanken är att alltid returnera ett objekt för att möjliggöra byggande av en metodsamtalskedja och använda metodnamn som återspeglar naturligt talande. Denna flytande stil gör koden mer läsbar.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow