0Pricing
Dart Academy · บทเรียน

ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก

สร้างออบเจ็กต์ที่ไม่เปลี่ยนแปลงเลย

ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก เป็นบทเรียน Dart Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Dart Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน

ออกแบบให้ไม่เปลี่ยนแปลง

ออบเจ็กต์ที่ ไม่เปลี่ยนแปลงจะไม่มีการเปลี่ยนแปลงหลังจากสร้างเสร็จแล้ว ทำให้ข้อมูลของคุณคาดเดาได้และแบ่งปันได้อย่างปลอดภัยทั่วทั้งแอป 🔒

รู้จัก final

ฟิลด์ final จะถูกกำหนดค่าเพียงครั้งเดียวระหว่างการสร้าง และไม่สามารถกำหนดค่าใหม่ได้อีก ค่านี้จะถูกล็อกไว้ตลอดอายุการใช้งานของออบเจ็กต์

class Point {
  final int x;
  Point(this.x);
}

การกำหนดค่าใหม่เป็นข้อผิดพลาด

ลองกำหนดค่าใหม่ให้ฟิลด์ final แล้วคอมไพเลอร์จะหยุดการทำงานทันที ข้อผิดพลาดนี้จะถูกตรวจพบก่อนที่โปรแกรมจะเริ่มทำงาน

final p = Point(3);
p.x = 9; // compile error

final กับ const

ใช้ const เมื่อทราบค่าตั้งแต่เวลาคอมไพล์ และใช้ final เมื่อค่าถูกคำนวณระหว่างการทำงาน ทั้งสองแบบไม่อนุญาตให้กำหนดค่าใหม่ภายหลัง

const pi = 3.14;
final now = DateTime.now();

ตัวสร้าง const

กำหนดให้คลาสมี ตัวสร้าง const แล้ว Dart จะสามารถสร้างอินสแตนซ์ที่ไม่เปลี่ยนแปลงอย่างแท้จริงได้ ฟิลด์ทั้งหมดของอินสแตนซ์นั้นต้องเป็น final ด้วย

class Color {
  final int rgb;
  const Color(this.rgb);
}

อินสแตนซ์ const ที่ใช้ร่วมกัน

ออบเจ็กต์ const สองตัวที่เหมือนกันทุกประการจะเป็นอินสแตนซ์เดียวกันในหน่วยความจำ Dart จะนำกลับมาใช้ซ้ำ จึงช่วยประหยัดทั้งพื้นที่และเวลา

const a = Color(0);
const b = Color(0);
print(identical(a, b)); // true

แบบตื้นกับแบบลึก

ฟิลด์ final ป้องกันการกำหนดค่าใหม่ แต่ไม่ได้ตรึงสิ่งที่ฟิลด์นั้นชี้ไป ฟิลด์ List ที่เป็น final ยังสามารถเพิ่มรายการเข้าไปได้

final nums = [1, 2];
nums.add(3); // allowed!

เป้าหมายของการไม่เปลี่ยนแปลงแบบลึก

การไม่เปลี่ยนแปลงแบบลึกหมายความว่าไม่มีสิ่งใดที่เข้าถึงได้จากออบเจ็กต์นั้นสามารถเปลี่ยนแปลงได้เช่นกัน การใช้ final เพียงอย่างเดียวจึงยังไม่เพียงพอ

ตรึงคอลเลกชัน

ห่อรายการด้วย List.unmodifiable เพื่อให้ความพยายามเพิ่มหรือลบรายการทำให้เกิดข้อผิดพลาด ตอนนี้โครงสร้างทั้งหมดจะถูกตรึงไว้

final tags = List.unmodifiable([1, 2]);
tags.add(3); // throws at runtime

ลิเทอรัลคอลเลกชัน const

เติม const หน้าลิเทอรัลเพื่อสร้างคอลเลกชันที่ไม่เปลี่ยนแปลงแบบลึกและสร้างได้ตั้งแต่เวลาคอมไพล์ คอลเลกชันนี้จะไม่สามารถแก้ไขได้เลย

const days = ['Mon', 'Tue'];
// days.add(...) is forbidden

เหตุผลที่เรื่องนี้สำคัญ

ข้อมูลที่ไม่เปลี่ยนแปลงจะปลอดภัยสำหรับการทำงานหลายเธรด แคชได้ง่าย และเหมาะกับการจัดการสถานะใน Flutter ข้อผิดพลาดจากการเปลี่ยนแปลงข้อมูลโดยไม่ตั้งใจจะหายไป

ตรวจสอบสั้น ๆ

ตรวจสอบความเข้าใจเรื่อง final และการไม่เปลี่ยนแปลงเป็นครั้งสุดท้าย

สรุป

คุณได้เรียนรู้ว่า final จะล็อกฟิลด์ const จะล็อกค่าที่ทราบตั้งแต่เวลาคอมไพล์ และการไม่เปลี่ยนแปลงแบบลึกต้องใช้คอลเลกชันที่แก้ไขไม่ได้หรือคอลเลกชัน const 🎉

คำถามที่พบบ่อย

บทเรียน “ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก”

สร้างออบเจ็กต์ที่ไม่เปลี่ยนแปลงเลย คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม

ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก
  2. คลาส sealed และ switch แบบครอบคลุมทุกกรณี
  3. ตัวปรับแต่ง base, interface และ final
  4. copyWith และความเท่าเทียมตามค่า
← กลับไปที่ Dart Academy