サーチ…


備考

目標

Fluent Interfaceの主な目的は読みやすさの向上です。

オブジェクトを構築するために使用される場合、呼び出し側が利用できる選択肢は、コンパイル時のチェックを介して明確に行われ、強制されます。たとえば、複雑なオブジェクトを構築するためのパスに沿ったステップを表す次のオプションのツリーを考えてみましょう。

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

流動的なインターフェースを使用するビルダーは、呼び出し側が各ステップで使用可能なオプションを簡単に確認できるようになります。たとえば、 A→Bでも可能ですが、 A→Cではなく、コンパイル時にエラーが発生します。

真実 - 流暢なテストフレームワーク

「真実の使い方」から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();

流暢なプログラミングスタイル

流暢なプログラミングスタイルでは、流暢でないプログラミングスタイルでは何も返さない流暢な(セッター)メソッドからthisを返します。

これにより、さまざまなメソッド呼び出しを連鎖させることができ、コードを短くして開発者にとって扱いやすくします。

この非流暢なコードを考えてみましょう:

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

セッターメソッドは何も返さないので、いくつかのデータでPersonをインスタンス化して印刷するには、 mainメソッドで4つの命令が必要です。流暢なスタイルでこのコードを変更することができます:

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

アイデアは、メソッドコールチェーンの構築と自然な会話を反映するメソッド名の使用を可能にするために、常にいくつかのオブジェクトを返すことです。この流暢なスタイルは、コードを読みやすくします。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow