Dart Language Tour
Variable และ inference
หัวข้อที่มีชื่อว่า “Variable และ inference”Dart เป็น static typed พร้อม inference ที่แข็งแรง ใช้ var แล้วให้ Dart infer หรือจะ annotate เมื่อช่วยให้อ่านง่ายขึ้นก็ได้ final แปลว่า assign ครั้งเดียว ส่วน const คือค่าคงที่ตอน compile
var name = 'Ada'; // inferred Stringfinal age = 36; // assign-once intconst pi = 3.14159; // compile-time constantint? maybe; // nullable (null safety — บทถัดไป)
// `final` vs `const`: final fix ตอน runtime, const fix ตอน compile-timefinal now = DateTime.now(); // OK — คำนวณตอน runtime// const now = DateTime.now(); // ERROR — ไม่ใช่ compile-time constantconst สำคัญมากใน Flutter: ค่าที่เป็น const จะถูก canonicalize — object const ที่เหมือนกันคือ instance เดียวกัน — นี่แหละที่ทำให้ Flutter ข้ามการ rebuild widget ที่เป็น const ได้
Function และ named parameter
หัวข้อที่มีชื่อว่า “Function และ named parameter”Function ของ Dart รองรับทั้ง positional และ named parameter API ทั้งหมดของ Flutter สร้างบน named parameter — constructor ของทุก widget คือกำแพงของ named parameter
// named parameter อยู่ใน {}, `required` marks ตัวที่บังคับ ตัวอื่นมี defaultWidget greeting({required String name, String prefix = 'Hello'}) { return Text('$prefix, $name');}
greeting(name: 'Ada'); // Hello, Adagreeting(name: 'Ada', prefix: 'Hi'); // Hi, Ada
// arrow syntax สำหรับ function ที่เป็น expression เดียวint square(int x) => x * x;นี่คือเหตุผลที่การอ่าน code Flutter คือการอ่าน Widget(child: ..., padding: ..., color: ...) — named parameter ทำให้ constructor ใหญ่ ๆ อ่านง่ายและไม่ต้องสนใจลำดับ
Collection และ collection-if / for
หัวข้อที่มีชื่อว่า “Collection และ collection-if / for”List, set, map พร้อม collection-if และ collection-for — ใช้ตลอดเพื่อ build list ของ widget แบบมีเงื่อนไข
final nums = [1, 2, 3];final set = {1, 2, 3};final map = {'a': 1, 'b': 2};
// spread, collection-if, collection-for — จะใช้ข้างใน widget children:final children = [ const Header(), ...items, // spread if (isLoggedIn) const Profile(), // element แบบมีเงื่อนไข for (final n in nums) Text('$n'), // element ที่ generate ขึ้นมา];pattern if/for-ใน-list นี้เป็น idiomatic ของ Flutter — ใช้แทนการ “สร้าง list แล้วค่อย push” ที่คุณอาจใช้ในภาษาอื่น
Cascade operator
หัวข้อที่มีชื่อว่า “Cascade operator”cascade .. รัน operation หลายอันบน object เดียวกันโดยไม่ต้องเขียน reference ซ้ำ — พบบ่อยใน code แบบ configuration
final paint = Paint() ..color = const Color(0xFF027DFD) ..strokeWidth = 4 ..style = PaintingStyle.stroke;// แต่ละ `..` คืน Paint ตัวเดิม ดังนั้นทั้งหมดนี้ config object เดียว