Programming

การสร้าง function ใน Dart

ใน dart มีรูปแบบการสร้าง function ที่หลากหลาย ดังนั้นผู้ที่สนใจควรศึกษาไว้เด้อจ่ะ

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

function เริ่มต้นของ dart คือ main()

Dart จะเริ่มทำงานจาก function หลักเสมอ นั่นคือ main() ซึ่ง function ก็เหมือนกับตัวแปร String หรือ Number ที่สามารถแทนค่าให้กับตัวแปรหรือแทนค่าไปเป็น parameters ใน function อื่นได้ ลองดูจากตัวอย่าง (ทดสอบ run code ได้ที่ DartPad)

String helloKhonKaen() {
   return "Hello Khon Kaen !!";
}

void main() {
   var helloKhonKaenFunction = helloKhonKaen;
   print(helloKhonKaenFunction());
}

จากตัวอย่างตัวแปร helloKhonKaenFunction เก็บค่า function helloKhonKaen ไว้ แต่ว่ายังไม่มีการเรียกใช้ เลยไม่ต้องใส่ () จะเห็นได้ว่าเรามีการเรียกใช้ในคำสั่ง print() เราเลยต้องเติม () หลังตัวแปร helloKhonKaenFunction นั่นเอง

อีกวิธีสำหรับการเขียน function ให้สั้นลง คือ ใช้ syntax () => ซึ่งจะเรียกว่า arrow function หรือ Lambda function จากตัวอย่างด้านบนจะเขียนได้ว่า

String helloKhonKaen() => "Hello Khon Kaen !!";

function parameters

จริงๆแล้ว Dart มี function parameters 2 รูปแบบหลักๆ คือ

  1. เวลาเรียกใช้ function ต้องแนบ parameter มาด้วย (required)
  2. เวลาเรียกใช้ function จะแนบ parameter มาด้วย หรือไม่ก็ได้ (optional)

Required parameters

ชื่อก็บอกอยู่แล้วว่าต้องแนบ parameters มาด้วย (ถ้าไม่แนบ โปรแกรมจะ error) เช่น การกระโดดร่ม เป็น function นึง แล้วมี parameter คือ ร่มชูชีพ ถ้าคุณไม่เอาร่มชูชีพไป เมื่อเรียกใช้ function นี้ ก็เจอกันโลกหน้าได้เลย

jump(String parachuteType) {
   return print("let\'s jump with your $parachuteType");
}

void main() {
   var letsDoIt = jump('umbrella');
   print(letsDoIt);
}

หากไม่ได้ใส่ parameters จะเกิด error

Optional parameters

optional parameters เป็น function ที่ไม่จำเป็นต้องใส่ parameter ก็ได้ แต่ก็จะแยกออกตามลักษณะการใช้งานได้มากกว่า 1 รูปแบบ โดยเราจะใช้สถานการณ์ง่ายๆในชีวิตประจำวันมาอธิบายแต่ละรูปแบบของ optional นั่นคือ function การสั่งก๋วยเตี๋ยว

? optional positional parameters

ชื่อก็บอกอยู่แล้วว่า แค่ตำแหน่งของ parameter ตรง/ถูกต้อง การทำงานของ function ก็ใช้งานได้ละ ซึ่งจะใช้ [ ] ครอบ

scenario: สั่งก๋วยเตี๋ยวเส้นเล็ก พิเศษ

orderingNoodle(String noodle, [String volume]) {
   return "Your order is $noodle $volume";
}
void main() {
   print(orderingNoodle("ก๋วยเตี๋ยวเส้นเล็ก")); // Your order is ก๋วยเตี๋ยวเส้นเล็ก null
   print(orderingNoodle("ก๋วยเตี๋ยวเส้นเล็ก", "พิเศษ")); // Your order is ก๋วยเตี๋ยวเส้นเล็ก พิเศษ
}

ถ้าไม่แนบ parameter เข้าไปในรูปแบบ optional parameter ค่าถูก return มา คือ null

จากตัวอย่างการสั่งก๋วยเตี๋ยว ถ้าเราไม่บอกแม่ค้าว่าจะสั่งพิเศษ หรือธรรมดา แม่ค้าก็เข้าใจอยู่ดีว่าเราเลือกแบบธรรมดา

คุณสามารถกำหนดค่า default ของ parameter ได้เช่นกัน

orderingNoodle(String noodle, [String volume = "ธรรมดา"]) {
   return "Your order is $noodle $volume";
}

? optional named parameters

parameters รูปแบบนี้ เวลาเรียกใช้ต้องระบุชื่อ parameter ด้วย และต้องอยู่หลัง required parameter ทั้งหมด. syntax ที่ใช้คือ { }

scenario: สั่งก๋วยเตี๋ยวเส้นเล็ก ไม่ใส่ถั่วงอก กินที่นี่

orderingNoodle(String noodle, {String notEat, String placeEat}) {
   return "Your order is $noodle no $notEat, $placeEat";
}
void main() {
   print(orderingNoodle("ก๋วยเตี๋ยวเส้นเล็ก", notEat:"ถั่วงอก", placeEat:"ทานนี่")); // Your order is ก๋วยเตี๋ยวเส้นเล็ก no ถั่วงอก, ท่านนี่
}

ถ้าหากต้องการบังคับว่าต้องใส่ named parameter เราก็เพียงแค่เพิ่ม @required เข้าไป

orderingNoodle(String noodle, {@required String notEat, String placeEat}) {
   return "Your order is $noodle no $notEat, $placeEat";
}

จบจ่ะ

Tags