Bali
สิ่งหนึ่งที่มักได้ยินคำบ่นมาจาก java developer ก็คือ
ทำไมต้องเขียน code ที่มันซ้ำๆ น่าเบื่อ จะตาย เช่น

  • Setter/getter methods
  • Constructor
  • Overriding method ต่างๆ จาก Object class เช่น toString(), equals() และ hashCode()

โดยเราจะพบว่า code ที่เขียนด้วยภาษา Java จำนวน 100 บรรทัด
สามารถเขียนด้วยภาษา Groovy, Scala ด้วยเพียง 10 บรรทัด
มันน่าอิจฉาไหมล่ะ ?

ถึงแม้ว่าบรรดา IDE ต่างๆ เช่น Eclipse, IntelliJ ต่างมีเครื่องมือเพื่อช่วยลดงาน
ด้วยการสร้างส่วนของสร้าง code แบบอัตโนมัติมาให้ใช้งาน
แต่มันไม่ใช้ประเด็นการแก้ไขปัญหาเท่าไร เพราะว่าเรายังเห็น code เหล่านั้น

ทำความรู้จักกันหน่อย

แต่มี Project ชื่อ Lombok มาช่วยลด code ที่เราไม่ต้องการออกไป
ทำการเตรียม Annotation ต่างๆ ไว้ให้ใช้งาน
ซึ่งทำงานในขณะการพัฒนา เพื่อทำการ generate bytecode ที่มี code ส่วนต่างๆ ขึ้นมาให้อัตโนมัติ

ตัวอย่างของ Annotation เช่น

  • @Data  สำหรับ injection gettter/setter method และ equals(), hashCode() และ toString()
  • @Getter สำหรับ injection gettter method
  • @Setter สำหรับ injection settter method
  • @ToString สำหรับการ custom method toString()
  • @Log สร้างตัวแปรชื่อ log ให้แบบอัตโนมัติ ซึ่งสนับสนุน log4j, apache common log, slf4j และ xslf4j
  • @NotNull เพื่อทำการตรวจสอบ null ให้อย่างอัตโนมัติ

สามารถดู Annotation เพิ่มเติมได้ที่นี่ Lombok feature

*** ข้อควรระวังในการใช้งาน Lombok  ***
เนื่องจาก Lombok นั่นสร้างด้วยวิธีการ hack ทั้งตัวภาษาของ JDK และ IDE
ดังนั้นถ้ามีการ update version ของ JDK และ IDE
อาจจะทำให้ Lombok ไม่สามารถทำงานได้นะ
Sourcecode ทั้งหมดของ Lombok อยู่ที่ Github

มาทำการติดตั้งกัน

Software ที่ใช้งานประกอบไปด้วย

  • Eclipse IDE
  • Apache Maven
  • Java 8

ก่อนอื่นทำการติดตั้ง Lombok ด้วยการ Download lombok.java มา
แล้วเปิดโปรแกรมขึ้นมา เพื่อระบุ path ของ IDE ที่เราใช้งาน ดังรูป

Screen Shot 2557-09-30 at 3.20.13 PM

จากนั้นทำการสร้าง project ใน IDE ซึ่งผมใช้ Eclipse
โดยสร้างเป็น maven project ให้ใส่ library ของ lombok ไปดังนี้

ลองเขียน code โดยใช้ Annotation ชื่อว่า @Data กันหน่อย

จะพบว่า Lombok มันจะทำการสร้าง setter/getter มาให้เราอัตโนมัติ
โดยไม่มี code ออกมาให้เราเห็นแม้แต่ตัวเดียว นักพัฒนา Java น่าจะชอบนะ
แต่ถ้าไม่ต้องการ setter หรือ getter ไปทั้งหมด
ก็ใช้ @Getter หรือ @Setter หน้าตัวแปรที่เราต้องการได้
ดังรูป

Screen Shot 2557-09-30 at 3.27.29 PM

ถ้าต้องการ custom method toString() ให้แสดงผลเฉพาะตัวแปรที่เราต้องการ
สามารถใช้ @ToString ได้ ตัวอย่างจะให้แสดงเฉพาะ firstname และ lastname

เมื่อลองนำไปใช้งานจะแสดงผลดังนี้
Person(firstname=xxxxxxx, lastname=yyyyyyyy)

และยังมี Annotation อื่นๆ ที่อยู่ในระหว่างการพัฒนาและทดสอบอีกด้วย

ซึ่งสามารถดูเพิ่มเติมได้ที่นี่  Experiment feature
ตัวอย่างที่น่าสนใจเช่น @Builder หรืออาจจะเรียกกันว่า

  • Builder pattern
  • Method chaining
  • Train Wreck pattern

สามารถเรียกใช้งานได้แบบนี้
Person.builder().id(1).firstname(“Somkiat”).lastname(“Pui”).age(20);

โดยรวมแล้ว

Lombok project น่าจะทำให้ Java developer เห็นแสงสว่างที่ปลายอุโมงค์
ว่าชีวิตที่ดีกว่ามันเป็นอย่างไร เพื่อลด code ที่ไม่จำเป้นหรือน่าเบื่อออกไปงานของเรา
แต่อย่างคำเตือนที่บอกไป ก็ต้องระวังไว้ด้วยเช่นกันครับ
โดย community ของ project นี้คง update มาตลอด 5 ปีครับ
ลองนำไปใช้กันดูครับ ไม่ลองไม่รู้ …