web analytics

Dart : สรุป syntax และการใช้รูปย่อแแบบต่างๆในภาษา Dart

สวัสดีผู้อ่านทุกท่าน เผอิญผมไปเจอบล็อกของฝรั่งที่ได้อธิบาย syntax การเขียนแบบลดรูปในภาษา dart เอาไว้ ซึ่งอ่านแล้วผมคิดว่ามีประโยชน์มาก ยิ่งสำหรับมือใหม่ในการเขียน flutter น่าจะดีมาก เลยตั้งใจแปลแล้วก็เพิ่มเติมเรื่องอื่นๆที่ผมคิดว่าน่าจะมีประโยชน์กับผู้เริ่มต้นภาษา Dart นำมาสรุปในบล็อกนี้ครับ

สามารถลองรัน code โดยการกดที่รูปภาพตัวอย่าง code แล้วจะเปิดเว็บ DartPad ขึ้นมา จากนั้นกดรันได้เลย



Package importing

ขอเริ่มจากพื้นฐานที่สุดก่อน คือ การ import package รูปแบบปกติที่เราใช้ เช่น
import ‘dart:math’;

โดยจะเป็นการนำ package math มาใช้ ซึ่งเราก็จะเรียกใช้ทุกอย่างใน math ได้ทั้งหมด เช่น ฟังชันก์ log และ sin cos tan ตรีโกณทั้งหลาย

ทีนี้ในหลายครั้งชื่อฟังชันก์ของ package ที่ import เข้ามา มันก็มีโอกาสซ้ำกับของเรา แถมยังอ่านยากว่ามาจากไหนกันแน่ เราสามารถเพิ่ม keyword as เพื่อตั้งชื่อให้มันได้

อีก keyword คือ show มันคือการเลือกเฉพาะ class ที่เราจำเป็นต้องใช้เข้ามา เช่น เราต้องการใช้เฉพาะ Random ใน math เราก็เลือกใช้ show Random โดยสามารถ , เพิ่มได้หลาย class



String concatenate

การ ต่อ String ซึ่งใน dart ก็ยังใช้ + operator ได้เหมือนภาษาอื่นๆ อีกแบบคือการใช้ $ มาแทนใน String เลยก็ได้เช่นกัน หากเป็นกรณี instance จะต้องมี { } ครอบ



?: (Ternary Operator)

Ternary operator คือ รูปย่อของ if ที่น่าจะคุ้นเคยกันในหลายๆภาษา เช่น php , javascript มันคือ

condition? true : false



?? (Null coalescing operator)

ในการเขียนโปรแกรม บ่อยครั้งที่การตรวจสอบค่า null เกิดขึ้นอย่างเป็นประจำ ซึ่งมันก็เป็นโค้ดเดิมๆ อย่างเช่น if( data !== null ) ดังนั้น Null coalescing operator จึงเกิดมาเพื่อลดภาระการตรวจสอบ null ให้เหลือแค่การเอา ?? ไปไว้ด้านหลังตัวแปร ถ้าค่านั้นเป็น null ก็จะใช้ค่า default แทน


?. (Null conditional)

หากเราต้องการเข้าถึง field หนึ่งใน object แต่ไม่แน่ใจว่า object นั้น null หรือไม่ เราสามารถใช้ ?. มาช่วยได้



??= (null coalescing assignment operator)

ดูเหมือนเรื่องของ null จะเยอะเหลือเกิน เพราะมันคือปัญหาจริงๆ มีหลายครั้งที่เราต้องการ กำหนดค่าถ้ามันเป็น null เราก็จะใช้ if(name == null) งานซ้ำๆแบบนี้ ต้องใช้ null coalescing assignment ที่ลดรูปเหลือแค่ ??=


=> (Arrow notation)

Arrow คือรูปย่อของ function/method ที่มีการทำงานบรรทัดเดียวและ return ค่า เช่น method isAlive() ที่ return true;

เราสามารถเขียนย่อๆโดยใช้ arrow ว่า isAlive() => true; ซึ่งมันก็คือการตัด { } และคำว่า return ออกให้สั้นลง อ่านง่ายขึ้น ทำให้เข้าใจได้เลยว่ามันคือ input => output



.. (Cascade notation)

Cascade notation คือการลดรูปของการ assign ค่าให้ instance จากเดิมที่เราต้องเขียน ชื่อ instance ซ้ำๆ เช่น

Person person = Person();
person.name = "benznest";
person.age = 18;
person.job ="developer";

cascade notation จะลดรูปโดยการลด การเขียนชื่อ instance ออกและใช้ . แทน รวมทั้งไม่ต้องเขียน ; ปิดท้ายแต่ละ field ด้วย เขียนครั้งเดียวตอนจบ เช่น

Person person = Person()
..name = "benznest"
..age = 18
..job ="developer"; 

ตัวอย่างด้านล่างจะเพิ่มความซับซ้อนขึ้นมาอีกนิด



~/ (Floored integer division)

เคยไหมที่เราต้องหารค่าที่มีทศนิยมแล้วต้องแปลง cast เพื่อให้เป็น integer ใน dart เราแค่ใช้ ~/ ก็ cast ให้อัตโนมัติ แล้วได้ integer แล้วละ

ซึ่งเทียบกับการเขียนแบบเดิมที่ใช้ toInt() ก็ดูสะดวกขึ้นเยอะ



Initializing field

การกำหนดค่าเริ่มต้นของ class ใน constructor ที่เราพบเห็นบ่อยๆใน Java มักจะเขียนแบบนี้ คือ อธิบายครบครันเรื่อง variable type และการใช้ this เพื่อเจาะจง field ใน class

ใน dart ก็สามารถเขียนแบบนั้นได้เช่นกัน แต่สามารถลดทอน ให้สั้นลงเหลือแค่ this และไม่ต้องระบุ type เพราะระบุไปแล้วใน class


Optional parameter

ใน dart ไม่มี method Overloading ที่ชื่อเดียวกันมี parameter หลายแบบ แบบใน Java แต่ใน dart จะใช้ method เดียว ที่เพิ่มให้ parameter เป็น optional แทน คือการใส่ [] ให้มันและกำหนดค่า default หากไม่กำหนดจะเป็น null



Optional named parameter

ในหลายๆกรณี ที่ method มี optional parameter ของ method เยอะมากๆ ทำให้เราสับสนลำดับของมัน การทำ optional อีกแบบใน dart คือการตั้งชื่อให้มัน ทำให้เราสามารถสลับลำดับของ parameter ได้ โดยการกำหนดผ่านชื่อของมัน รูปแบบนี้ใน Flutter เป็นที่นิยมมาก เพราะ Widget มี field จำนวนมาก และการ custom ก็ต้องการความหลากหลายนั่นเอง



Get method

ใน dart ไม่มีการใช้ method getter , setter แบบใน Java เพราะการเข้าถึง field ใน class สามารถอ้างถึงโดยตรง ซึ่ง method ที่ไม่มี paramter ใน dart มี keyword get เพื่อลดรูปของ method ให้ไม่ต้องเขียน () และสามารถใช้มันได้เหมือนเรียก field




สรุป

บล็อกนี้ได้สรุปพื้นฐานเรื่อง syntax และการลดรูปในภาษา Dart เอาไว้คร่าวๆครับ ซึ่งจริงๆแล้ว syntax ไม่ได้ยากเลย เพราะหลายๆอย่างมีความคล้ายกับภาษาอื่นๆอีกด้วย โดยตัวผมเองช่วงแรกๆถนัดเขียนแบบ Java แต่พอเขียน Dart บ่อยขึ้น ก็รู้สึกว่าชอบ syntax แบบ Dart มากกว่า



Credits

https://medium.com/@dev.n/simple-and-bug-free-code-with-dart-operators-2e81211cecfe



เรื่องอื่นๆที่น่าสนใจ

หากสนใจในภาษา Dart แนะนำอ่านบทความเรื่อง mixin ครับ