นากมิ้นต์ต้นฉบับป้อนริบบิ้นครีมผ่านกล่องแปลงสีเขียวสองขั้นจนออกมาเรียบร้อย

Java String.transform: ตั้งชื่อ pipeline แปลงข้อความแทนการซ้อนเมธอด

พี่โชว์Engineering

การซ้อนเมธอดแปลงข้อความหลายชั้นทำให้เราอ่านจากวงเล็บในสุดออกมาข้างนอกครับ String.transform กลับทิศให้เริ่มจากข้อความ แล้วส่งเข้า Function ที่ตั้งชื่อและทดสอบแยกได้

WHY: pipeline อ่านตามลำดับงาน

เหมือนสายพานที่ของไหลจากซ้ายไปขวา เราเห็นขั้น trim แล้ว normalize แล้ว validate แทนการหาว่าวงเล็บไหนทำก่อน transform ไม่ได้ทำให้ string mutable; มันเพียงเรียก function ด้วย string ปัจจุบันและคืนชนิดผลลัพธ์ของ function

import java.util.Locale;
import java.util.function.Function;

public class Main {
    static final Function<String, String> NORMALIZE = value ->
        value.strip().toLowerCase(Locale.ROOT).replace(' ', '-');

    static String slug(String input) {
        return input.transform(NORMALIZE);
    }

    public static void main(String[] args) {
        assert slug("  Showkhun Blog  ").equals("showkhun-blog");
        assert "abc".transform(String::length) == 3;
        System.out.println("String.transform checks passed");
    }
}

ข้อดีชัดเมื่อ function เป็น domain operation ที่มีชื่อ เช่น normalizeUserId หรือ redactSecret ถ้าเป็นการเรียกสั้น ๆ ครั้งเดียวอย่าง value.strip() การใช้เมธอดตรงอ่านง่ายกว่า อย่าเพิ่ม abstraction เพียงเพื่อให้ทุกบรรทัดดูเป็น functional style

Recap

  • transform ส่ง string เข้า Function
  • ผลลัพธ์ไม่จำเป็นต้องเป็น String
  • ตั้งชื่อ function เมื่อเป็นกฎ domain ที่ใช้ซ้ำ
  • ใช้เมธอดตรงเมื่อ pipeline สั้นและชัดอยู่แล้ว