- แม้ Java จะเป็นที่รู้กันว่าเหมาะกับโปรเจกต์ขนาดใหญ่และระยะยาว แต่ก็สามารถเป็นเครื่องมือที่ยอดเยี่ยมสำหรับ งานเล็ก ๆ ได้เช่นกัน
- การตรวจสอบชนิดแบบสแตติก และ การรองรับเครื่องมือที่ยอดเยี่ยม เป็นข้อได้เปรียบสำคัญแม้ในงานขนาดเล็ก
- การปรับปรุงภาษาล่าสุดทำให้ Java ใช้งานได้มีประโยชน์ยิ่งขึ้น
รันได้โดยไม่ต้องคอมไพล์
ไวยากรณ์ที่กระชับ: เมธอด main แบบอินสแตนซ์และคลาสโดยนัย
- JEP 477: ทำให้การเขียนโปรแกรมขนาดเล็กและสคริปต์ง่ายขึ้น
- ตัดไวยากรณ์ที่ยุ่งยากแบบเดิม (
public static void main) ออกไป:
var someVariable = initialValue;
String helper(int param) { ... }
void main(String[] args) {
...
}
- มีการ import โมดูล
java.base ให้อัตโนมัติ เพิ่มความสะดวก
- เมธอด
println, print, readln ก็ถูก import ให้อัตโนมัติเช่นกัน
Records และ Enums
- Records: ใช้แทนดิกชันนารีของ Python สำหรับการแสดงข้อมูลแบบมีโครงสร้าง
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}
- Enums: การแสดงค่า enum ที่เข้าใจได้ตรงไปตรงมามากกว่า Python
enum Direction { NORTH, EAST, SOUTH, WEST };
ฟีเจอร์ภาษาและ API ที่มีประโยชน์
- การใช้
var: ทำให้ใช้ตัวแปรในสคริปต์ได้โดยไม่ต้องประกาศชนิด
static import: ช่วยให้การคำนวณทางคณิตศาสตร์กระชับขึ้น
import static java.lang.Math.*;
var diagonal = sqrt(pow(width, 2) + pow(height, 2));
- text block: ช่วยเก็บโค้ดและข้อมูลไว้ด้วยกันพร้อมเพิ่มความอ่านง่าย
- มีไลบรารีที่ทรงพลังสำหรับสตริง, regular expression, collection และวันที่/เวลา
- การอ่านไฟล์:
var content = Files.readString(Path.of(filename));
String run(String... cmd) throws Exception {
var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();
process.waitFor();
return new String(process.getInputStream().readAllBytes());
}
การจัดการ dependency และ JBang
- JBang: สามารถเพิ่ม dependency ของ Maven ลงในไฟล์ซอร์สได้โดยตรง
//DEPS org.eclipse.angus:jakarta.mail:2.0.3
jbang MailMerge.java
- แปลงสคริปต์ให้เป็นไฟล์รันได้:
///usr/bin/env jbang "$0" "$@" ; exit $?
สภาพแวดล้อมแบบโน้ตบุ๊ก
ข้อดีของโน้ตบุ๊ก
- การเขียนโปรแกรมเชิงสำรวจ: เหมาะกับการจัดการข้อมูลและการรันโค้ดแบบครั้งเดียวหรือขนาดเล็ก
- โครงสร้างแบบเซลล์โค้ดและเซลล์ข้อความ:
- ผลลัพธ์จากการรันเซลล์โค้ดสามารถแสดงเป็นข้อความ ตาราง รูปภาพ เสียง หรือวิดีโอได้
- สามารถลองผิดลองถูกซ้ำ ๆ จนได้ผลลัพธ์ที่ต้องการ แล้วค่อยเพิ่มคำอธิบายประกอบ
- ดีกว่า JShell:
- การทำงานเป็นหน่วยเซลล์ทำได้ง่ายกว่า
- มองเห็นตารางข้อมูลและกราฟได้ในเชิงภาพ
- บันทึกและแชร์ได้ง่าย
Jupyter และ Java Notebook
- Jupyter Notebook: เป็นเครื่องมือที่นักวิทยาศาสตร์ข้อมูลสาย Python ใช้กันอย่างแพร่หลาย
- รันได้ทั้งบนเครื่องและบนคลาวด์ (เช่น Google Colab)
- เทคโนโลยีของ Jupyter ไม่ขึ้นกับภาษา:
- ติดตั้งเคอร์เนลสำหรับหลายภาษาได้ (เช่น IJava, JJava, Ganymede, Rapaio)
- Jupyter Java Anywhere: ใช้ JBang เพื่อทำให้การติดตั้ง Java kernel ง่ายขึ้น
- ข้อจำกัด:
- แต่ละเคอร์เนลมีวิธีจัดการ dependency และการแสดงผลลัพธ์ที่ไม่ใช่ข้อความต่างกัน
- เคอร์เนล IJava มีปัญหาบางอย่างในการแก้ไข dependency
- Oracle หรือผู้ให้บริการรายใหญ่ควรมีบริการ Colab สำหรับ Java โดยเฉพาะ
การประมวลผลข้อมูลและการทำภาพข้อมูลใน Java
- Python มีไลบรารีอย่าง NumPy และ Matplotlib ที่ทำให้การประมวลผลข้อมูลเป็นเรื่องง่าย
- ในฝั่ง Java ยังขาดระบบนิเวศที่ใกล้เคียงกันอยู่
- tablesaw:
- ใช้เป็นทางเลือกแทน NumPy ได้
- รองรับการทำภาพข้อมูลโดยใช้แพ็กเกจ JavaScript ของ Plot.ly
โปรเจกต์ JTaccuino
- JTaccuino:
- เป็น Java notebook ที่ Sven Reimers กำลังพัฒนา
- มี UI ที่ใช้งานง่ายบนพื้นฐาน JavaFX
- ใช้ JShell เป็นแบ็กเอนด์
- ยังอยู่ในระยะเริ่มต้น แต่มีศักยภาพในการพัฒนาสูง
Kotlin Notebook
- มี Kotlin Notebook IntelliJ plugin สำหรับนักพัฒนา Kotlin
บทสรุป
- หากใช้เครื่องมือได้เหมาะสม Java เป็นตัวเลือกที่มีประสิทธิภาพมากสำหรับการจัดการงานเล็ก ๆ
- JBang ทำให้การเขียนสคริปต์ที่ใช้ไลบรารีของบุคคลที่สามง่ายขึ้น
- Java มีศักยภาพสำหรับการเขียนโปรแกรมเชิงสำรวจเช่นกัน แต่ยังต้องการการปรับปรุงด้านการรองรับเครื่องมือ
2 ความคิดเห็น
เวลาใช้ทำงานง่ายๆ แบบสคริปต์ ภาษาแบบไดนามิกไทป์มันสะดวกมากจริงๆ...
แน่นอนว่าถ้าพ้นช่วงทำต้นแบบไปแล้วก็คงใช้ภาษาสแตติกครับ
ความเห็นจาก Hacker News
พบวิธีรันโปรแกรม "Hello World" ได้อย่างง่ายมาก โค้ดซับซ้อนแบบเดิมถูกทำให้สั้นลงมาก
varและrecordที่มีประโยชน์มากjava myfile.javaเพื่อแก้ปัญหา AoC และฟีเจอร์ที่ importjava.baseให้อัตโนมัติก็มีประโยชน์ใช้ Java, JavaScript และ TypeScript แต่สำหรับงานสคริปต์ใช้ .NET กับ LINQPad ซึ่ง LINQ ช่วยให้การเขียนสคริปต์ง่ายขึ้น
ตอนพัฒนา JDK 1.1 ยังไม่มีฉันทามติเกี่ยวกับ test suite โดย Mark Reinhold ปฏิเสธการทดสอบในรูปแบบ JCK และเขียน test harness แบบง่ายขึ้นมา
ภาษาโปรแกรมพัฒนาไปตามกาลเวลา ตอนนี้ Java เร็วขึ้นแล้ว และมีทั้ง generics กับความสามารถในการอนุมานชนิดแบบง่าย ๆ เพิ่มเข้ามา ทำให้โค้ด boilerplate ลดลง
PHP ก็เป็นภาษาที่มีประโยชน์เช่นกัน มีติดตั้งมาให้ล่วงหน้าในระบบ *nix จำนวนมาก และมี standard library ที่เหมาะกับการจัดการไฟล์, JSON และ network request
ใน Java 23 มี 3 เมธอดจาก
java.io.IOที่ถูก import ให้อัตโนมัติ นี่เป็น type ใหม่ที่ใช้งานได้ด้วยตัวเลือก --enable-previewเรียนรู้การเขียน "Java ไฟล์เดียว" จาก Hacker Rank และมันมีประโยชน์สำหรับการแก้โจทย์ whiteboard coding
ถ้าอยากรู้เหตุผลของ main method แบบง่าย ๆ ก็ควรไปดู JEP 495 ซึ่งมีกำหนดจะรวมอยู่ใน JDK 24
ใช้ Java กับทุกงานสคริปต์และงานเขียนโค้ดมานานกว่า 5 ปีในบริษัท และพอใจกับการพัฒนาอย่างต่อเนื่องของ Java