[JAVA] Viel Spaß beim Programmieren mit Lambda-Stil und flüssiger Oberfläche

Seit ich Java 8 für Unternehmen verwende, habe ich nach Möglichkeiten gesucht, mit Lambda-Ausdrücken etwas flüssigeren Code zu schreiben. Ich habe in letzter Zeit endlich einen netten Code geschrieben, daher würde ich ihn gerne mit Java-Ingenieuren teilen, also schreibe ich zum ersten Mal einen Artikel über Qiita.

Dieses Mal möchte ich nur das Beispiel beschreiben und den Mechanismus dahinter separat vorstellen.

https://github.com/mt-village/nagare

Das Beispiel ist ein Programm, das das Verfahren zum Brühen von Kaffee imitiert.

python


public void easygoing() {
    WholeCoffeeBeans wholeBeans = WholeCoffeeBeans.inGrams(50);
    GroundCoffeeBeans groundBeans = Mill.grind(wholeBeans);
    Water water = Water.inMilliliters(500);
    HotWater hotWater = Kettle.boil(water);
    Coffee coffee = Dripper.drip(groundBeans, hotWater);
    CoffeeAddict saya = new CoffeeAddict();
    saya.drink(coffee);
}

Saya-san ist auf Japanisch geschrieben und mahlt Kaffeebohnen mit einer Mühle, kocht Wasser mit einem Yakan und trinkt Kaffee, der mit einem Tropfer extrahiert wurde. Ich schreibe es absichtlich sorgfältig, ohne es zu verschachteln, aber es ist ziemlich mühsam, weil ich die Form einzeln schreiben muss.

Sie können den gleichen Vorgang wie folgt schreiben

python


public void impatient() {
    new CoffeeAddict().drink(Dripper.drip(
            Mill.grind(WholeCoffeeBeans.inGrams(50)), Kettle.boil(Water.inMilliliters(500))));
}

Es ist viel kürzer, aber es ist ein bisschen hart für das menschliche Gehirn, weil es eine doppelt verschachtelte Struktur hat und in der Reihenfolge von innen nach außen interpretiert werden muss.

Mit den 8 von nagare hinzugefügten Klassen ist die folgende Beschreibung möglich.

python


public void nagare_prepositive() {
    CoffeeAddict saya = new CoffeeAddict();
    Do.when(WholeCoffeeBeans.inGrams(50), Water.inMilliliters(500))
            .then(Do.first(Mill::grind).and(Kettle::boil))
            .then(Dripper::drip)
            .done(saya::drink);
}

python


public void nagare_postpositive() {
    CoffeeAddict saya = new CoffeeAddict();
    Do.first(Mill::grind).and(Kettle::boil)
            .then(Dripper::drip)
            .done(saya::drink)
            .by(WholeCoffeeBeans.inGrams(50), Water.inMilliliters(500));
}

python


public void nagare_logic_and_exec() {
    Saver<Coffee> brewCoffee = Do.when(WholeCoffeeBeans.inGrams(50), Water.inMilliliters(500))
            .then(Do.first(Mill::grind).and(Kettle::boil))
            .then(Dripper::drip);
    CoffeeAddict saya = new CoffeeAddict();
    saya.drink(brewCoffee.let());
}

Die Grundidee ähnelt dem in Java 8 hinzugefügten Stream. Die erste ist die Schreibmethode, die das Argument zuerst angibt, die zweite ist die Schreibmethode, die das Argument am Ende angibt, und die dritte ist die Schreibmethode, die Logik und Ausführung trennt.

Sie können eine Reihe von Prozessen in der Reihenfolge von links nach rechts (von oben nach unten) schreiben. Sobald Sie sich daran gewöhnt haben, stimmen Ihre Gedanken und Ihr Code überein und es wird ziemlich lustig. Bitte versuchen Sie es mit dem Code, den Sie als Hobby schreiben. (Ich weiß nicht, ob jemand Java als Hobby schreibt)

Muster sind auch als Komponententest enthalten. Wenn Sie also daran interessiert sind, sie mit dem dahinter liegenden Mechanismus zu kombinieren, schauen Sie bitte nach. https://github.com/mt-village/nagare

Recommended Posts

Viel Spaß beim Programmieren mit Lambda-Stil und flüssiger Oberfläche
Ausnahmebehandlung mit einer Fluidschnittstelle
Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
Nehmen Sie an einer unterhaltsamen Programmier-Lernsitzung teil!
Behandeln Sie Ausnahmen kühl mit Java 8-Lambda-Ausdrücken und der Stream-API
Java-Lambda-Ausdruck, der mit Comparator gelernt wurde
Bedingte Verzweigung mit fließender Schnittstelle
Verstehe die Lambda-Formel ein wenig
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
Heutzutage Java Lambda Expressions und Stream API
Zeichnen Sie Diagramme mit Sinatra und Chartkick
Bis zur Programmierung können Anfänger Lambda-Ausdrücke verwenden