ฟิลด์ 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 errorfinal กับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟิลด์ final และความไม่เปลี่ยนแปลงอย่างลึก
- คลาส sealed และ switch แบบครอบคลุมทุกกรณี
- ตัวปรับแต่ง base, interface และ final
- copyWith และความเท่าเทียมตามค่า