ข้อควรปฏิบัติเมื่อเขียนโปรแกรมด้วยจาวา 8

java8_logo

จาวา 8 ได้เพิ่มความสามารถของภาษาและได้เปลี่ยนแนวคิดในการเขียนโปรแกรมไปบ้าง พอดีไปเจอบทความหนึ่งซึ่งมีประโยชน์มาก เกี่ยวกับข้อควรปฏิบัติ (Best practices) ในการใช้จาวา 8 จึงขอสรุปแบบย่อๆดังนี้

แลมบ์ด้า (lambda):

  1. ลดรูปการอ้างถึงชนิดข้อมูล (type) ยกเว้นเมื่อเกิดความกำกวมจนทำให้คอมไพเลอร์ไม่สามารถคอมไพล์ได้ หรือจำง่ายๆว่าพยายามลดรูปเพื่อให้ใช้ความสามารถของแลมบ์ด้าให้ได้มากที่สุด นั่นคือ ->
  2. ไม่ควรประกาศตัวแปรในฟังก์ชันที่เรียกใช้แลมบ์ด้าเป็นไฟนอล (final)
  3. ใช้แลมบ์ด้าเพื่อเป็นฟังก์ชันที่ทำงานคล้ายกันได้ คล้ายการใช้ template method design pattern

ฟังก์ชันนอล (functional interface)

  1. เมื่อต้องการสร้างให้แอนโนเถตด้วย @FunctionalInterface เสมอ
  2. หลีกเลี่ยงการโอเวอร์โหลด (overload) ฟังก์ชันที่รับตัวแปรชนิดฟังก์ชันนอล ให้ตั้งชื่อให้ต่างกันแทน เพื่อหลีกเลี่ยงความสับสนเวลาใช้งาน
  3. ควรให้ตัวแปรฟังก์ชันนอลอยู่ลำดับสุดท้ายเมื่อประกาศฟังก์ชัน

เอ็กเซ็พชั่น (exception)

  1. หลีกเลี่ยงการใช้เอ็กเซ็พชั่นกับแลมบ์ด้า ถ้าเลี่ยงไม่ได้ให้ครอบด้วย
    • Unchecked.function(<แลมบ์ด้า>) หรือ
    • Unchecked.wrap( () -> { <ชุดคำสั่ง> } )

ออพชันนอล (optional)

  1. ไม่ควรมีค่าเป็นนัล (null)
  2. ใช้คู่กับ .orElse(<value>) เมื่อต้องการคืนค่าเบื้องต้น (default value)
  3. ควรใช้กับฟังก์ชันที่อาจจะไม่มีค่า (null return) เพื่อเลี่ยงการตรวจสอบที่ไม่จำเป็น (if x != null)

อินเทอร์เฟส (interface)

  1. ใช้สแตติกเม็ดเถิด (static method) แทนแฟคทรี่คลาส (factory class)
  2. ใช้ดีฟอลท์เม็ดเถิด (default method) แทนแอ๊บสแตร็กท์คลาส (abstract class)

นอกจากนี้ยังมีเรื่องสตรีม (stream) วันที่และเวลา และความสามารถใหม่ๆอีกมาก จึงหยุดแต่เพียงเท่านี้ก่อน เพื่อไม่ให้ยาวจนเกินไป ถ้าสนใจเพิ่มเติม เข้าไปดูบทความต้นฉบับ เพราะมีการยกตัวอย่างเปรียบเทียบการเขียนแบบจาวา 7 และ 8 เพื่อให้เห็นชัดเจนถึงความแตกต่างที่เปลี่ยนไป

ที่มา: http://www.slideshare.net/scolebourne/java-se-8-best-practices-53975908

สแลช (SLASH)