ข้าม​ไป​ยัง​เนื้อหา

Java 8 ถึง 25 — เขียน​ใหม่​ที​ละ​อย่าง แล้ว​วัด​ว่า​ได้​อะไร​กลับ​มา

ความ​รู้​เรื่อง Java บน​อินเทอร์เน็ต​ล้า​สมัย​เร็ว​กว่า​ที่​คน​คิด — API ของ structured concurrency ที่​บทความ​สาม​ปี​หลัง​ทุก​ชิ้น​สอน​ไว้ ไม่มี​อยู่​ใน JDK 25 แล้ว ส่วน​ของ​ที่​หลาย​คน​ยัง​คิด​ว่า​เป็น preview กลับ final ไป​แล้ว คอร์ส​นี้​จึง​ไม่​เริ่ม​ด้วย​การ​แนะนำ feature มัน​เริ่ม​ด้วย​การ​สอน​ให้​คุณ​ถาม javac เอง​ว่า​อะไร​ใช้ได้ แล้ว​เดิน​ที​ละ​บท​ไป​วัด​ว่า​ของ​ใหม่​แต่ละ​อย่าง​ให้​อะไร​กลับ​มา​ที่​ตรวจ​สอบ​ได้
ความคืบหน้า0 / 8 บทเรียน

แปดบท เรียง​จาก​คำถาม​ว่า​อะไร​ใช้ได้ ไป​หา​คำถาม​ว่า​ควร​รับ​อะไร​เข้า​ทีม​ก่อน

คุณ​เขียน Java เป็น​มา​นาน​แล้ว แต่​ความ​รู้​หยุด​อยู่​ที่ 8 หรือ 11

คอร์ส​นี้​ไม่​ได้​เริ่ม​ที่​ว่า​ตัวแปร​คือ​อะไร · ถ้า​ยัง​ไม่​เคย​เขียน Java ให้​ไป​ที่ คอร์ส Java จาก​ศูนย์ ก่อน แล้ว​ค่อย​กลับ​มา

และ​มัน​ไม่ใช่​รายการ feature ใหม่ · รายการ​แบบ​นั้น​หา​ได้​ทุก​ที่​และ​มัก​ล้า​สมัย​ตั้งแต่​วัน​ที่​เขียน

ทั้ง​สอง​ข้อ​ตอบ​ด้วย​การ​รัน ไม่ใช่​ด้วย​การ​อ่าน

ของ​พวก​นี้ ใช้ได้​จริง​แล้ว​หรือ​ยัง ใน​รุ่น​ที่​ผม​รัน​อยู่

และ​เปลี่ยน​ไป​ใช้​แล้ว ได้​อะไร​กลับ​มา​ที่​ตรวจ​สอบ​ได้

คำถาม​แรก​ดู​เหมือน​ง่าย แต่​มัน​คือ​คำถาม​ที่​คำ​ตอบ​บน​อินเทอร์เน็ต​ผิด​บ่อย​ที่สุด · รูป​ของ StructuredTaskScope ที่​บทความ​สาม​ปี​หลัง​ทุก​ชิ้น​สอน​ไว้ แปล​ไม่​ผ่าน​ใน JDK 25 · ขณะ​ที่ Gatherers กับ ScopedValue ซึ่ง​หลาย​คน​ยัง​จำ​ว่า​เป็น preview กลับ​รัน​ได้​โดย​ไม่​ต้อง​ใส่​ธง​อะไร​เลย

เจ็ด​ข้อ · ทุก​ข้อ​มี​คำ​สั่ง​ที่​คุณ​รัน​เอง​แล้ว​เห็น​ผล​เดียวกัน

  • อะไร final อะไร preview — แปล​ตัวอย่าง​สอง​รอบ ต่าง​กัน​ที่​ธง​เดียว แล้ว​อ่าน​สถานะ​จาก​ผล
  • record เป็น​สัญญา ไม่ใช่​การ​พิมพ์​น้อย​ลง — อ่าน​ชื่อ member กับ​กลไก​ที่ javap เห็น
  • switch เหนือ sealed พลาด​ไม่​ได้ — แต่​มี​อยู่​ช่อง​หนึ่ง​ที่​มัน​ยัง​พลาด​ได้​เงียบๆ
  • record pattern แปล​ออก​มา​เป็น​อะไร — เทียบ bytecode กับ​รูป​ที่​เขียน​มือ
  • Gatherers ขี้​เกียจ​จริง — นับ​จำนวน​ครั้ง​ที่​ต้นทาง​ถูก​ถาม
  • virtual thread สร้าง​พร้อม​กัน​ได้​มาก — นับ​จำนวน thread กับ​จำนวน carrier
  • preview มี​ราคา — รัน​โดย​ไม่​ใส่​ธง​แล้ว​อ่าน​ข้อความ​ที่ JVM ตอบ

ห้า​ข้อ​ที่​ตัด​ออก พร้อม​เหตุผล​ของ​แต่ละ​ข้อ

  • ไม่มี build tool ทั้ง​คอร์ส ทุก​ตัวอย่าง​แปล​ด้วย javac และ​รัน​ด้วย java ตรงๆ · คอร์ส​นี้​พูด​เรื่อง​ภาษา ไม่ใช่​เรื่อง​เครื่อง​มือ และ​การ​ไม่มี Maven ทำให้​คุณ​รัน​ตาม​ได้​ทันที
  • ไม่​แตะ framework ไม่มี Spring ไม่มี Jakarta EE · เรื่อง​นั้น​เป็น​ของ คอร์ส Kotlin กับ Spring Boot
  • ไม่​วัด​ความเร็ว ทั้ง​คอร์ส​ไม่มี​หน่วย​เวลา​สัก​ตัว · หน่วย​ที่​ใช้​คือ​สถานะ​การ​แปล · ข้อความ​ของ compiler · ชื่อ​และ​จำนวน member ใน bytecode · จำนวน thread · จำนวน​ครั้ง​ที่​ถูก​เรียก
  • ไม่​เล่า​ซ้ำ​เรื่อง pinning ของ virtual thread เว็บ​นี้​มี​บทความ​ที่​มี​ด่าน​ของ​ตัว​เอง​อยู่​แล้ว · virtual thread ที่​ยัง pin ข้าม JEP 491
  • ไม่​ลง​เรื่อง​ที่​ยัง​ไม่​เข้า​รุ่น​ไหน คอร์ส​นี้​พูด​ถึง​ของ​ที่​แปล​ได้​วัน​นี้​เท่านั้น

อย่าง​เดียว

JDK 25 · ตรวจ​ด้วย javac --version แล้ว​ต้อง​ขึ้น​ต้น​ด้วย javac 25

ถ้า​คุณ​อยู่​บน macOS แล้ว java --version ตอบ​ว่า​ไม่มี runtime นั่น​คือ stub ของ​ระบบ ไม่ใช่ JDK จริง · ต้อง​ชี้​ไป​ที่ JDK home ที่​ติด​ตั้ง​ไว้​เอง