มีโอกาสไปสอนและแบ่งปันเกี่ยวกับการเขียนภาษา Java ขั้นพื้นฐานมา 6 วัน
มีหลายเรื่องที่น่าสนใจ สำหรับ feature ใหม่ ๆ ของภาษา Java (Modern Java)
เลยทำการสรุปไว้กันลืมนิดหน่อย
ภาษา Java เป็นภาษาที่น่าจะเก่าแล้ว
แต่ก็ยังมีการ update และออก version ใหม่ ๆ กันอยู่
โดยปัจจุบันก็วิ่งมาถึง Java 12 และกำหลังจะออก 13 กันแล้ว
แต่จากที่เจอมานั้น หลาย ๆ บริษัทในไทยยังคงใช้งาน Java 8 หรือ 1.8 กันอยู่
หนักกว่านั้นก็ลงไปถึง Java 1.4 ที่ผมเริ่มเขียนเมื่อ 20 ปีที่แล้ว !!
แต่ไม่ว่าด้วยเหตุผลใด ๆ ก็ตาม
นักพัฒนาภาษา Java ก็ควรที่จะมีความรู้พื้นฐาน
รวมทั้งความสามารถใน version ใหม่ ๆ อีกด้วย
เพื่อทำให้รู้และเข้าใจว่า ทำไมถึงมีความสามารถต่าง ๆ เหล่านั้นขึ้นมา
บางคนอาจจะเรียก Java ใหม่ ๆ ว่า Modern Java
ซึ่งน่าจะหมายถึง Java 8/1.8 ขึ้นมานั่นเอง
ยกตัวอย่างเช่นการใช้งาน Stream API
ถ้าต้องทำการแสดงจำนวนที่เป็นเลขคู่ ไม่น่าจะมีใครเขียน code แบบนี้แล้ว
[gist id="0e88e89e0b37457185d649415409aa85" file="old_01.java"]น่าจะต้องเขียนแบบนี้หรือเปล่า ?
[gist id="0e88e89e0b37457185d649415409aa85" file="new_01.java"]หรือจะเป็นการประกาศตัวแปร ไม่ต้องมากำหนด type แล้วนะ
ใช้ var ไปได้เลย นั่นหมายความว่า
ตัวแปรเหล่านั้นจะมี type ตามค่าแรกที่กำหนดให้นั่นเอง
หรือจะเป็น Switch expression ใน Java 12 ก็ทำให้ code อ่านง่ายขึ้น
[gist id="0e88e89e0b37457185d649415409aa85" file="switch.java"]หรือถ้าใครคุ้นเคยกับ Promise ใน JavaScript
สำหรับการทำงานแบบ Asynchronous แล้ว
ใน Java ก็มี completableFuture ให้ใช้
อีกทั้งยังมี JShell มาให้ใช้งาน
หรือ feature ใหม่ ๆ ที่อาจจะเพิ่มเข้ามาในอนาคต
ยกตัวอย่างเช่น หนึ่งใน Project Amber
นั่นก็คือ data class and sealed type for Java
บางคนเรียกว่า Record เพราะว่าใช้ keyword ชื่อว่า record นำหน้า class นั่นเอง ดังนี้
หรือแม้กระทั่ง Project Loom
ก็มี feature ใหม่ ๆ ที่น่าสนใจทั้ง
- Fibers (lightweight user-mode threads)
- Delimited continuations
- Tail-call elimination
ดังนั้น น่าจะพอทำให้เห็นว่า Java นั้นก็มีการปรับปรุงและเปลี่ยนแปลงตลอดเวลา
ถึงแม้จะช้าหรือมี drama เยอะหน่อย
แต่ก็ปฏิเสธไม่ได้ว่า ยังคงเป็นภาษาที่หลาย ๆ องค์กรยังใช้งาน (เยอะมาก)
ดังนั้นการเรียนรู้ความสามารถใหม่ ๆ ของภาษาจึงเป็นเรื่องที่จำเป็น
แต่คำถามที่น่าจะต้องตอบกันก่อนคือ
บนเครื่องของนักพัฒนาหรือบน server ใช้ Java version อะไรกันอยู่ ?