var vs final vs const

25:00

1. สรุปแนวคิดสำคัญ (5–10 นาที)

Micro-Concept

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

var
การอนุมานชนิดข้อมูล (Type Inference)

Dart จะเดา Type ให้อัตโนมัติจากค่าเริ่มต้น และเปลี่ยนค่าในภายหลังได้ แต่ต้องเป็น Type เดิมเท่านั้น เช่น var age = 20; age = 21;

final
กำหนดค่าครั้งเดียวตอนรัน (Run-time Constant)

เมื่อกำหนดค่าแล้ว ห้ามเปลี่ยนค่าเด็ดขาด เหมาะสำหรับค่าที่รู้หลังโปรแกรมเริ่มทำงานแล้ว เช่น เวลาปัจจุบัน final now = DateTime.now(); หรือข้อมูลจากการยิง API

const
ค่าคงที่สมบูรณ์ตั้งแต่คอมไพล์ (Compile-time Constant)

ต้องรู้ค่าแน่นอน ตั้งแต่ก่อนรันโปรแกรม เช่น ค่าพาย const double pi = 3.14159; ใน Flutter นิยมใส่ const หน้า Widget เพื่อช่วยประหยัด Memory และ CPU

คีย์เวิร์ด เปลี่ยนค่าได้ไหม? เวลาที่รู้ค่า
var ได้ (Type เดิม) ตอนประกาศ
final ไม่ได้ (ครั้งเดียว) Run-time (ตอนรัน)
const ไม่ได้ (ถาวร) Compile-time (ก่อนรัน)
ไวยากรณ์ตัวอย่าง (Syntax Pattern)
const double pi = 3.14159;
final String appName = 'CircleMaster';
var radius = 7.0;

double area = pi * radius * radius;
print('$appName: พื้นที่รัศมี $radius = $area ตร.ซม.');

ควิซเช็กความเข้าใจ (Quick Quiz)

1 ข้อสั้นๆ

คำสั่งใดต่อไปนี้จะทำให้ Dart แจ้ง Compile Error ทันทีตั้งแต่ยังไม่เริ่มรันโปรแกรม?

Daily Coding Challenge (15–20 นาที) Circle Area & Constant

โจทย์ประจำวัน: โปรแกรมคำนวณพื้นที่วงกลมด้วย const & final

เขียนโค้ดในฟังก์ชัน main() ตามเงื่อนไขต่อไปนี้:
1) ประกาศค่าคงที่คงวา const double pi = 3.14159;
2) ประกาศตัวแปร var radius กำหนดรัศมี เช่น 7.0
3) ประกาศตัวแปร final double area หรือ final area คำนวณพื้นที่ (pi * radius * radius)
4) ใช้ print() แสดงรัศมีและพื้นที่วงกลมด้วย String Interpolation
5) (ทางเลือก) ทดลองพิมพ์ pi = 3.14; เพื่อดูตัวตรวจจับ Error ป้องกันการแก้ค่าคงที่

main.dart
1
2
3
4
5
6
7
8
9
10
11
Dart Console Output
พร้อมรัน
// ผลลัพธ์จากการรันคำสั่ง print() และการเช็ก const/final จะแสดงที่นี่...
ตรวจรับการบ้านประจำวัน Day 4

มี const pi, var radius, final area และแสดงผลพื้นที่วงกลม

แจ้งเตือน