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

Kotlin จาก​ศูนย์ — ภาษา​ที่​ยืม​กล่อง​เครื่อง​มือ​ของ Java มา​ทั้ง​ใบ แล้ว​เปลี่ยน​สาม​อย่าง

Kotlin ไม่​ได้​สร้าง runtime ใหม่ มัน​ยืม​ของ Java มา​ทั้ง​ใบ แล้ว​เปลี่ยน​สาม​อย่าง​ที่​เปลี่ยน​วิธี​เขียน​จริง — ชนิด​รู้​ว่า​ตัว​เอง​รับ null ได้​ไหม ความ​ผิด​พลาด​ไม่มี​ตัว​ไหน​ที่ compiler บังคับ​ให้​จัดการ และ​การ​ห่อ​ของ​คน​อื่น​ทำได้​ด้วย​คำ​เดียว เรา​เรียน​ด้วย​การ​สร้าง orderctl ตัว​เดิม​กับ​สอง​คอร์ส​ก่อน​หน้า​ใหม่​ทั้ง​ตัว ที​ละ​บท ตั้งแต่​โปรแกรม​แรก​ที่​ยัง​ไม่มี build tool จนถึง HTTP server กับ virtual thread — และ​ทุก​บท​บอก​ว่า​อีก​สอง​ภาษา​เลือก​ทาง​ไหน แล้ว​ใคร​จ่าย​อะไร
ความคืบหน้า0 / 8 บทเรียน

แปดบท เรียง​ตาม​ลำดับ​ที่ orderctl โต​ขึ้น​ที​ละ​ชั้น

คุณ​เขียน​ภาษา​อื่น​เป็น​อยู่​แล้ว และ​อยาก​รู้​ว่า Kotlin ตัดสิน​ใจ​ต่าง​ตรง​ไหน

คอร์ส​นี้​ไม่​ได้​เริ่ม​ที่​ว่า​ตัวแปร​คือ​อะไร · มัน​สมมติ​ว่า​คุณ​เขียน Go, Java, C#, TypeScript หรือ Python เป็น​อยู่​แล้ว แล้ว​อธิบาย Kotlin ด้วย​การ​เทียบ​กับ​สิ่ง​ที่​คุณ​รู้

ถ้า​คุณ​อ่าน คอร์ส Go จาก​ศูนย์ หรือ คอร์ส Java จาก​ศูนย์ มา​แล้ว คอร์ส​นี้​จะ​อ่าน​ง่าย​เป็น​พิเศษ เพราะ​ทั้ง​สาม​สร้าง​ของ​ชิ้น​เดียวกัน แต่​ไม่​จำเป็น​ต้อง​อ่าน​ก่อน

orderctl ตัว​เดิม​กับ​สอง​คอร์ส​ก่อน​หน้า เขียน​ใหม่​ทั้ง​ตัว​ด้วย Kotlin

ไม่ใช่​ตัว​อย่าง​เล่นๆ ที่​แยก​กัน​คนละ​บท · มัน​เป็น​ของ​ชิ้น​เดียว​ที่​โต​ขึ้น​ทุก​บท จน​บท​สุดท้าย มัน​อ่า​นอ​อเด​อร์​จาก JSON ตรวจ​ความ​ถูก​ต้อง คิด​ส่วนลด เก็บ​สถานะ​ลง disk และ​เปิด POST /quote ที่​รับ​ออ​เด​อร์​เข้า​มา​คิด​ยอด​แล้ว​ตอบ​กลับ ที​ละ​หลาย​คำขอ​พร้อม​กัน

การ​เขียน​ของ​ชิ้น​เดียวกัน​สาม​ภาษา ทำให้​คำถาม “ภาษา​ไหน​ดี​กว่า” กลาย​เป็น​คำถาม​ที่​ตอบ​ได้ ด้วย​การ​ชี้​ไป​ที่ code สาม​ชุด​ที่​ทำงาน​เดียวกัน

ข้อ​แรก​คือ​ข้อ​ที่​ต้อง​พูด​ออก​มา​ก่อน เพราะ​มัน​ไม่​เข้า​ข้าง​คอร์ส​นี้

คอร์ส Go ใช้ standard library ล้วน · คอร์ส Java เขียน​ประโยค​นั้น​ไม่​ได้​เพราะ Java SE ไม่มี JSON · คอร์ส​นี้​อยู่​ตำแหน่ง​ที่​สาม — HTTP ไม่​ต้อง​เพิ่ม​อะไร​เลย virtual thread ก็​ไม่​ต้อง แต่ JSON เทสต์ และ coroutine ต้อง​เพิ่ม​ทั้ง​สาม​อย่าง

  • บท​ที่ 1-2 ไม่มี build tool เลย แปล​ด้วย kotlinc แล้ว​รัน​ด้วย kotlin ตรงๆ · เครื่อง​มือ​ใหม่​มา​ถึง​ตอน​ที่​มี​เหตุผล​ให้​ต้อง​ใช้ ไม่ใช่​ตั้งแต่​บรรทัด​แรก
  • build.gradle.kts ของ​บท​ที่ 3 ยาว​สิบ​สาม​บรรทัด และ settings.gradle.kts อีก​หนึ่ง · สั้น​กว่า pom.xml ยี่สิบ​บรรทัด​ของ​คอร์ส Java ทั้ง​ที่​ทำ​มากกว่า
  • ไม่มี framework และ​ไม่มี ORM บท​ที่ 8 เปิด HTTP ด้วย JDK เปล่า

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

  • ไม่​สอน Ktor, Spring และ framework อื่น บท​ที่ 8 เปิด HTTP endpoint ด้วย JDK เปล่า ซึ่ง​แลก​ความ​สะดวก​หลาย​อย่าง​ไป — ไม่มี routing ที่​ดู method ให้ และ​ไม่มี​การ​แปลง JSON อัตโนมัติ · แต่​มัน​ตอบ​คำถาม “ภาษา​ตัดสิน​ใจ​อย่างไร” ได้​ตรง​กว่า ส่วน framework เป็น​คอร์ส​ของ​ตัว​เอง
  • ไม่​วัด​ความเร็ว คอร์ส​นี้​ไม่มี​หน่วย​เวลา​สัก​ตัว เพราะ​ตัวเลข​เวลา​ไม่​ข้าม​เครื่อง · หน่วย​ที่​ใช้​คือ​รหัส​ออก จำนวน​ไบต์ จำนวนนับ และ​ข้อความ​ของ compiler
  • ไม่​สอน Kotlin Multiplatform และ Compose คอร์ส​นี้​เป็น JVM ล้วน · การ​ข้าม​ไป​หลาย​เป้า​หมาย​เปลี่ยน​คำถาม​ทั้ง​ชุด และ​ควร​เป็น​คอร์ส​ของ​ตัว​เอง

คอร์ส​จะ​ลิงก์​ไป ไม่​เล่า​ซ้ำ