Java ได้แก้ไขปัญหาหนึ่งในแง่มุมที่ถูกวิพากษ์วิจารณ์มากที่สุดในที่สุด - จุดเริ่มต้นที่ยาวเหยียดและสับสนซึ่งเป็นปัญหาให้กับผู้เริ่มต้นมาหลายทศวรรษ ด้วยการนำเสนอ JEP 445 (Unnamed Classes and Instance Main Methods) ใน Java 21 และ JEP 512 ใน Java 25 นักพัฒนาสามารถเขียนโปรแกรมง่ายๆ ได้โดยไม่ต้องใช้การประกาศแบบดั้งเดิม public static void main(String[] args)
ที่เป็นแหล่งของความหงุดหงิดมาตั้งแต่ยุคแรกของภาษานี้
การเปลี่ยนแปลงนี้แสดงถึงการเปลี่ยนแปลงที่สำคัญในแนวทางของ Java ต่อการเขียนโปรแกรมที่เป็นมิตรกับผู้เริ่มต้น แทนที่จะต้องให้นักเรียนจำสิ่งที่หลายคนเรียกว่าคาถาเวทมนตร์ โปรแกรม Java ใหม่สามารถเริ่มต้นด้วยฟังก์ชัน void main()
อย่างง่าย ซึ่งขจัดความจำเป็นในการเข้าใจคลาส เมธอดแบบ static และตัวปรับการเข้าถึงก่อนที่จะเขียนโค้ดบรรทัดแรก
วิวัฒนาการของจุดเริ่มต้นใน Java
ไวยากรณ์แบบดั้งเดิม (Java 1.0-20):
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("What is your name? ");
String name = scanner.nextLine();
System.out.println("Hello, " + name);
}
}
ไวยากรณ์แบบใหม่ที่เรียบง่าย (Java 21+):
void main() {
var name = IO.readln("What is your name? ");
IO.println("Hello, " + name);
}
ผลกระทบต่อการศึกษา
ชุมชนการศึกษาการเขียนโปรแกรมได้ต่อสู้กับจุดเริ่มต้นที่ยาวเหยียดของ Java มานาน ผู้สอนหลายคนพบว่าตัวเองต้องบอกนักเรียนให้เพิกเฉยต่อส่วนนี้ไปก่อนเมื่อสอนแนวคิดการเขียนโปรแกรมเบื้องต้น สิ่งนี้สร้างประสบการณ์การเรียนรู้ที่อึดอัดซึ่งนักเรียนต้องยอมรับโค้ดต้นแบบที่ลึกลับโดยไม่เข้าใจจุดประสงค์
ไวยากรณ์ใหม่ที่เรียบง่ายแก้ไขความท้าทายทางการสอนนี้โดยตรง นักเรียนสามารถมุ่งเน้นไปที่แนวคิดการเขียนโปรแกรมหลักอย่างตัวแปร ลูป และการรับส่งข้อมูลพื้นฐานโดยไม่ต้องจมอยู่กับแนวคิดเชิงวัตถุที่ยังไม่พร้อมจะเข้าใจ การเปลี่ยนแปลงนี้ทำให้ Java สอดคล้องกับภาษาอย่าง Python และ Ruby ที่ได้รับความนิยมในหลักสูตรการเขียนโปรแกรมเบื้องต้นมาโดยตลอด
การใช้งานทางเทคนิคและข้อจำกัด
แม้จะมีไวยากรณ์ที่เรียบง่าย แต่ Java ไม่ได้ทิ้งรากเหง้าเชิงวัตถุไปโดยสิ้นเชิง แนวทางใหม่ใช้คลาสที่ไม่มีชื่อ - โดยพื้นฐานแล้วเป็นตัวห่อคลาสแบบนัยที่คอมไพเลอร์สร้างขึ้นเบื้องหลัง เมื่อคุณเขียนฟังก์ชัน void main()
อย่างง่าย คอมไพเลอร์ Java ยังคงสร้างโครงสร้างคลาสแบบดั้งเดิม แต่ซ่อนความซับซ้อนนี้จากนักพัฒนา
อย่างไรก็ตาม คุณสมบัตินี้มาพร้อมกับข้อจำกัดที่สำคัญ ไวยากรณ์ที่เรียบง่ายทำงานได้เฉพาะกับโปรแกรมไฟล์เดียวและไม่สามารถใช้ในแอปพลิเคชันขนาดใหญ่ที่มีหลายคลาส นอกจากนี้ แม้ว่าคุณจะสามารถกำหนดฟังก์ชันระดับบนสุดอื่นๆ ควบคู่ไปกับ main ได้ แต่โปรแกรมเหล่านี้ยังคงไม่สามารถนำเข้าหรืออ้างอิงจากไฟล์ Java อื่นได้ ทำให้เป็นเครื่องมือสำหรับการเรียนรู้และการเขียนสคริปต์อย่างง่ายมากกว่าการพัฒนาเพื่อใช้งานจริง
ข้อเสนอการปรับปรุง Java หลัก (JEPs)
- JEP 445: Unnamed Classes และ Instance Main Methods ( Java 21 )
- JEP 512: Module Import Declarations ( Java 25 )
- JEP 511: การปรับปรุงเพิ่มเติมสำหรับ module import
ข้อจำกัดของ Syntax ใหม่:
- ใช้งานได้เฉพาะกับโปรแกรมไฟล์เดียวเท่านั้น
- ไม่สามารถถูก import โดยไฟล์ Java อื่นได้
- มีจุดประสงค์หลักสำหรับการเรียนรู้และการเขียน script แบบง่าย
- ยังคงต้องใช้ syntax แบบดั้งเดิมสำหรับแอปพลิเคชันที่มีหลาย class
การตอบรับของชุมชนและผลกระทบในวงกว้าง
การตอบสนองของชุมชนการเขียนโปรแกรมมีความหลากหลายแต่โดยทั่วไปเป็นไปในทางบวก นักพัฒนาหลายคนแสดงความโล่งใจที่ได้เห็น Java แก้ไขสิ่งที่พวกเขาถือว่าเป็นอุปสรรคที่ไม่จำเป็นต่อการเข้าถึง บางคนมองการเปลี่ยนแปลงนี้เป็นส่วนหนึ่งของวิวัฒนาการที่กว้างขึ้นของ Java ในการเป็นมิตรกับนักพัฒนามากขึ้น ตามหลังการเพิ่มคุณสมบัติอย่าง lambda expressions คีย์เวิร์ด var และ records ในปีที่ผ่านมา
โค้ดต้นแบบนั้นช่วยได้อย่างแปลกประหลาดเมื่อฉันเริ่มต้น... แต่นั่นเป็นแค่ Stockholm Syndrome ลองคิดดู: อะไรอีกที่บ้าบิ่นกว่านี้ที่คุณสามารถเพิ่มเข้าไปซึ่งไร้ประโยชน์สำหรับผู้เริ่มต้นแต่ 'จะเข้าใจได้ในภายหลัง'?
นักวิพากษ์โต้แย้งว่าการเปลี่ยนแปลงนี้แสดงถึงการปรับปรุงเพียงระดับผิวเผินและไม่ได้แก้ไขปัญหาทางวัฒนธรรมที่ลึกซึ้งกว่าของ Java เกี่ยวกับการออกแบบที่ซับซ้อนเกินไปและการนามธรรมที่มากเกินไป คนอื่นๆ กังวลว่าการซ่อนโครงสร้างคลาสอาจทำให้นักเรียนสับสนเมื่อพวกเขาจำเป็นต้องเข้าใจธรรมชาติเชิงวัตถุของ Java สำหรับการพัฒนาในโลกแห่งความจริง
มองไปข้างหน้า
การทำให้เรียบง่ายนี้สะท้อนถึงความพยายามอย่างต่อเนื่องของ Java ในการรักษาความเกี่ยวข้องในภูมิทัศน์ภาษาการเขียนโปรแกรมที่มีการแข่งขันสูงขึ้น ภาษาอย่าง Kotlin, Scala และแม้แต่ C# เวอร์ชันใหม่ได้เสนอไวยากรณ์ที่กระชับกว่ามาหลายปี ซึ่งสร้างแรงกดดันให้ Java ปรับปรุงแนวทางของตนเอง
แม้ว่าไวยากรณ์แบบดั้งเดิม public static void main(String[] args)
ยังคงได้รับการสนับสนุนอย่างเต็มที่เพื่อความเข้ากันได้แบบย้อนหลัง แต่จุดเริ่มต้นที่เรียบง่ายใหม่แสดงถึงการเปลี่ยนแปลงทางปรัชญาสู่การทำให้ Java เข้าถึงได้ง่ายขึ้นสำหรับผู้มาใหม่ในขณะที่ยังคงความสามารถระดับองค์กรไว้สำหรับนักพัฒนาที่มีประสบการณ์
การเปลี่ยนแปลงอาจดูเล็กน้อย แต่สำหรับนักเรียนหลายล้านคนที่จะพบ Java เป็นภาษาการเขียนโปรแกรมแรกของพวกเขา มันขจัดอุปสรรคเบื้องต้นที่สำคัญและช่วยให้พวกเขามุ่งเน้นไปที่การเรียนรู้พื้นฐานการเขียนโปรแกรมมากกว่าการจำคาถาลึกลับ