Java กำจัด "public static void main" ที่น่ารำคาญออกไปด้วยจุดเริ่มต้นแบบใหม่ที่เรียบง่าย

ทีมชุมชน BigGo
Java กำจัด "public static void main" ที่น่ารำคาญออกไปด้วยจุดเริ่มต้นแบบใหม่ที่เรียบง่าย

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 เป็นภาษาการเขียนโปรแกรมแรกของพวกเขา มันขจัดอุปสรรคเบื้องต้นที่สำคัญและช่วยให้พวกเขามุ่งเน้นไปที่การเรียนรู้พื้นฐานการเขียนโปรแกรมมากกว่าการจำคาถาลึกลับ

อ้างอิง: public static void main(String[] args) is dead