รายงานเรอื่ ง ภาษา Dart
จัดทาโดย
นางสาวธัญพร ชอบธรรมดี
รหัสประจาตัวนกั ศกี ษา 62202040004
เสนอ
อาจารย์ อรรถพล เขียวทอง
รายงานน้ีเปน็ สว่ นหนงึ่ ของการเรยี น วิชาการพฒั นาโปรแกรมบน อุปกรณ์พกพา
เบอ้ื งตน้
ภาคเรียนท่ี 2 ปกี ารศกึ ษา 2565
วิทยาลัยเทคนคิ เพชรบุรี
ก
คานา
รายงานเล่มนี้จดั ทาข้นึ เพ่ือเป็นส่วนหนง่ึ ของวิชา การพฒั นาโปรแกรมบนอุปกรณ์พกพาเบอ้ื งตน้ เพ่ือให้ได้ศกึ ษาหา
ความรใู้ น เร่อื ง ภาษา Dart และได้ศึกษาอยา่ งเขา้ ใจเพ่ือเป็นประโยชน์กบั การเรยี น
ผจู้ ัดทาหวงั ว่า รายงานเลม่ นจี้ ะเปน็ ประโยชน์กบั ผู้อ่าน หรือนกั เรียน ท่กี าลังหาข้อมลู เรื่องนี้
อยู่หากมีข้อแนะนาหรอื ข้อผดิ พลาดประการใด ผจู้ ัดทาขอน้อมรับไวแ้ ละขออภัยมา ณ ท่ีน้ดี ว้ ย
ผูจ้ ัดทา นางสาวธญั พร ชอบธรรมดี
วนั ที่ 18 ก.พ. 65
ข
ชือ่ เรื่อง : รายงาน เรอื่ ง ภาษา Dart
ผศู้ ึกษาคน้ ควา้ : นางสาวธัญพร ชอบธรรมดี
ระดบั : ประกาศนยี บตั รวิชาชีพ
สาขาวิชา : คอมพวิ เตอรธ์ ุรกิจ
สาขางาน : คอมพวิ เตอร์ธุรกจิ
อาจารย์ที่ปรึกษา : นายอรรถพล เขยี วทอง
ปกี ารศึกษา : 2565
บทคดั ย่อ
รายงาน เรอ่ื ง ภาษา Dart คร้ังน้มี วี ัตถุประสงค์คือ 1.2.1 เพ่ือศึกษาเกี่ยวกบั โปรแกรมภาษาDart 1.2.2
ศกึ ษาการทางานของโปรแกรม 1.2.3 เพ่ือเพมิ่ ช่องทางการศึกษาหาข้อมลู จากเน้ือหาในรายงานสรปุ ได้
ว่าภาษา Dart ซึ่งเราจะเหน็ ว่าภาษาน้นี ั้นใหอ้ ารมณ์เหมือน
ภาษาตระกูล C ท่มี กี ารปรบั อะไรใหเ้ ปน็ ภาษาสมยั ใหมม่ ากข้ึน แต่ก็ยังไมท่ ้ิงความเป็น
StructureLanguage อยู่ หากใครเขียน C หรือหรือแม้แต่ภาษา(ท่เี คย)โมเดิร์นอย่าง Javaมาก่อน จะ
พบวา่ มันมีความคล่องตวั ในการเขียนมากขนึ้
ค
กิตตกิ รรมประกาศ
รายงานน้ีสาเร็จลุลว่ งไดด้ ว้ ยความกรุณาจากอาจารย์ อรรถพล เขยี วทอง ครูผ้สู อนวชิ าการ
พฒั นาโปรแกรมบนอปุ กรณ์พกพาเบื้องตน้ ทไี่ ดใ้ ห้คาเสนอแนะ แนวคดิ ตลอดจนแกไ้ ขข้อบกพรอ่ ง ตา่ ง ๆ มาโดย
ตลอดจน รายงานเลม่ นี้เสร็จสมบรู ณ์ ขอบคุณเพ่ือน ๆ ทชี่ ่วยใหค้ าแนะนาดี ๆ เก่ยี วกบั การเลอื กคา และเกีย่ วกับโครงงาน
ชิ้นนี้ทาใหโ้ ครงงานสาเร็จลลุ ว่ งไปได้
สารบัญ ง
คานา หน้า
บทคัดย่อ
กิตตกิ รรมประกาศ ก
สารบญั ข
บทที่ 1 ค
1.1 ทม่ี าและความสาคัญ ง
1.2 วัตถปุ ระสงค์ 1
1.3 ขอบเขตด้านเนื้อหา
2- 5
1.3.1 ขอบเขตดานประชากรและกลุมตัวอยาง 6
1.3.2 ขอบเขตด้านเวลา 7
1.4 ประโยชนท์ ค่ี าดวา่ จะได้รับ 8-9
บทท่ี 2 10-11
โปรแกรมภาษา Dart
และ Data Type
Math Operation
String Concatenate การต่อสตริง
Null Handling
Flow Control
Function 12-15
First Class Function 16-17
บทท่ี 3
18-19 การ
การสรา้ ง Class ฉบบั Dart 20
สรา้ ง Constructor ใน Dart 21
22
Read-only Variableคืออะไร ? 23
Optional Parameters
บรรณานุกรม
บทที่ 1
บทนา
1.1 ท่ีมาและความสาคญั
ภาษาDart นัน้ เปน็ ภาษาโปรแกรมท่ีเอาไว้สาหรับสร้างแอพพลิเคชันบนแพลตฟอร์มท่ี หลากหลายโดยได้ท้งั
mobile, desktop, server และก็ web สิ่งทีเ่ ปน็ ทน่ี ิยมท่ีสดุ ทีท่ าให้คนสนใจมา เรียนภาษา Dart กนั ก็คอื เพื่อทีจ่ ะ
เอาไปใชร้ ว่ มกับ Flutter ทีเ่ ป็นเคร่อื งมือชว่ ยสรา้ ง UI ของ Google ซ่ึงใช้ได้ทง้ั กบั Android และ iOS หรอื จะเปน็
ใน Desktop กับ Web กย็ ังได้ ภาษา Dart น้ีถูกสร้างโดย Google และปล่อยให้ใช้งานแบบ open source ทาให้
ทุกคน
สามารถนาไปใชง้ านได้ฟรๆี และการที่ Dart ถูกออกแบบมาใหใ้ ช้งานได้ง่ายและมปี ระสิทธภิ าพแบบ ภาษาเชงิ
วัตถอุ ่ืนๆอย่าง Java C# C++ จึงเป็นตัวเลือกภาษาที่นา่ สนใจในการศึกษาเป็นภาษาแรกอกี ดว้ ย
1.2 วตั ถุประสงค์
1.2.1 เพื่อศึกษาเกี่ยวกับโปรแกรมภาษา Dart 1.2.2 ศกึ ษาการทางานของโปรแกรม
1.2.3 เพอ่ื เพ่มิ ชอ่ งทางการศึกษาหาข้อมูล
1.3 ขอบเขตดา้ นเนอื้ หา
ศกึ ษาเกย่ี วกบั การจดั ทารายงานเรอ่ื ง ภาษา Dart เพ่อื เปน็ แนวทางใหผ้ ูเ้ รียนคนอน่ื ๆเข้ามา ศึกษาหาความรู
นอกหองเรียน เพ่ือเกิดความเขาใจเพ่ิมมากขน้ึ
1.3.1 ขอบเขตด้านประชากรและกลมุ ตัวอย่าง
ประชากร ได้แก่กลุมบคุ คลท่ัวไปทตี่ ้องการศึกษาเรื่อง ภาษา Dart
1.3.2 ขอบเขตด้านเวลา
เร่มิ วนั ท่ี 1 พฤศจิกายน พ.ศ.2564 ถึงวันที่ 18 กมุ ภาพนั ธ พ.ศ.2564
1.4 ประโยชน์ที่คาดวา่ จะได้รบั
1.4.1 ไดร้ ้คู วามเป็นมาของโปรแกรมภาษา Dart
1.4.2 รูก้ ารทางานของโปรแกรม
1.4.3 สามารถตอยอดและนาไปใชในการเรียนการสอน
บทท2่ี
โปรแกรมภาษา Dart
โปรแกรมของ Dart น้ันหน้าตาคล้ายๆ กับภาษา C มาก ถ้าใครเคยเขยี นภาษา C หรือภาษา
ตระกลู C มาก่อน (เช่น C++, C#, Java) จะค้นุ กบั syntax พวกนี้ทาให้เรยี นรไู้ ด้ไม่ยาก
Dart เปน็ ภาษากลมุ่ Compiler นัน่ คือจาต้อง Compile กอ่ นเอาโปรแกรมไปรนั ไมเ่ หมอื นภาษา กลุ่ม Script ท่ี
ใช้ interpreter ในการรันตัว source code ตรงๆ
void main(){
print("Hello World!");
}
ตัวโปรแกรมจาเรมิ่ ทางานท่ีฟังก์ชัน main เปน็ หลัก เราไม่สามารถเขียน statement นอกฟังก์ชนั ได้ การ
แสดงผลมาตราฐานจะใช้คาสั่ง print (คาสั่งน้ี auto-newline เสมอ) เร่ืองหนึ่งท่ีควรจาคือภาษา Dart นน้ั การ
เขยี น ; (semi-colon) ไม่ใช่ optional คอื
จาเป็นตอ้ งใส่ ; ทกุ ครงั้ หลงั จบ statement ไม่สามารถละ ; ไดแ้ บบภาษาตระกูล C ยคุ ใหมๆ่ เช่น JavaScript
หรอื Kotlin
Comment
การใส่คอมเมนท์ทาไดเ้ หมือนภาษา C ทุกอย่างคือ
1. // สาหรับ inline comment
2. เปดิ ดว้ ย /* และปดิ ดว้ ย */ สาหรับ multi-line comment (ไม่สามารถ nested ได้นะ)
int x; //ตั้งแตต่ รงน้ีไป เปน็ ส่วนของคอมเมนท์
/* ในนี้
ทง้ั หมด เปน็
คอมเมนท์
*/
Variable และ Data Type
type คาอธิบาย ตัวอยา่ ง
int เลขจานวนเต็ม
double เลขทศนยิ ม 0, 1, -5, 86400
num เลขทศนิยม หรือ เลข 0.0, 0.1, 0.14, -12.34
123, 0.123
ทศนิยม
bool ค่าทางตรรกศาสตร์ true, false
String สายอักขระ 'hello world!', "This is a book" <-- ในภาษา Dart สามารถใชไ้ ด้
ท้ัง " (double quote) และ ' (single quote) แตเ่ ขาแนะนาใหใ้ ช้ '
(ประโยค) หรือ single quote กนั นะ
1, 0.14, true, 'Hi!'
dynamic ตัวแปรชนิด
เปลย่ี นแปลงได้
ตัวแปรของ Dart ท้งั หมดเป็นแบบ reference type ทงั้ หมด ทาใหส้ ามารถมคี า่ เป็น null ได้ท้ังหมด
int x;
double d;
bool isDone;
String name;
//ตวั แปรทั้งหมดมีคา่ เปน็ null เพราะยังไมไ่ ด้กาหนดคา่
แต่ใน Dart ยงั มชี นดิ ของตัวแปรแบบพเิ ศษ ซ่งึ ไม่จาเปน็ ต้องประกาศ type เลย แตต่ ัวภาษาจะ auto
assign ชนดิ ของตวั แปรใหเ้ อง
type คาอธบิ าย
var เป็นการละ type เอาไวใ้ หโ้ ปรแกรมกาหนดให้ (ตาม value)
final เหมอื น var แตไ่ มส่ ามารถเปลี่ยนแปลงคา่ ได้
const ค่าคงท่ี
ขอ้ แตกตา่ งระหวา่ ง dynamic vs var คือdynamicเปน็ การบอกวา่ ตัวแปรน้ีเกบ็ ค่าชนิดไหนก็ได้
เปลี่ยนแปลงไดเ้ รื่อยๆ (หากใครเคย
เขียนภาษา script นา่ จะคนุ้ กัน) แน่นอนว่าการใช้ dynamic มคี วามเสย่ี งทาให้เกิด runtime error! ไดเ้ พราะ
Compiler ไมส่ ามารถช่วยเช็กชนิดของตัวแปรได้เลย var จะเป็นการกาหนดชนดิ ตัวแปรในจงั หวะท่ีประกาศ
ตัวแปร โดยดูชนดิ ตัวแปรจาก value
dynamic d = 1; // ตอนนีค้ า่ d เก็บคา่ int
d = 'new value!'; // Ok! ค่า d เปลยี่ นไปเก็บคา่ String แทน d
= true; // Ok! คา่ d เปล่ียนไปเก็บคา่ bool แทน
var v = 1; // สรา้ งตวั แปร v ซึง่ value ในดา้ นขวาเป็น int ดังนนั้ จะมีผลเทา่ กับการเขยี นวา่
int v = 1; น่นั เอง
v = 'new value'; // Error: A value of type 'String' can't be assigned to a variable of type
'int'
ตอนน้ันเลย หลงั จากนั้นตวั แปรจะถกู กาหนดเปน็ type นน้ั ไปตลอด ไม่สามารถเปล่ียนแปลงได้แล้ว ข้อ
แตกต่างระหว่าง final vs const คือ final เป็นการกาหนดว่าตัวแปรน้ี ไม่สามารถเปลี่ยนแปลงค่าได้
กาหนดคา่ แล้วกาหนดเลย
(immutable) ซึง่ เป็นตวั แปรประเภท runtime ดังนัน้ เราสามารถกาหนดคา่ final จากตวั แปรหรือ ฟังก์ชนั
อืน่ ได้
const เป็นการประกาศคา่ คงท่ี โดยคา่ ท่ีกาหนดใหจ้ ะต้องเปน็ literal เทา่ นัน้ (เช่น 10,
'value') เพราะเป็นตัวแปรทีก่ าหนดค่าต้ังแต่ตอน compile-time
int x = 10;
final int f1 = 1; //กาหนดตัวแปร int ให้เป็นคา่ คงท่ี
final f2 = 'final-val'; //ใชเ้ หมอื น var คอื ไม่กาหนด type ก็ได้
final f3 = x + 20; //กาหนดคา่ จากกโดยคานวณมาจากตัวแปรอนื่ อีกที
const int c1 = 1; //กาหนดตัวแปร int ให้เป็นค่าคงที่ const
c2 = 'const-val'; //ใช้เหมือน var คอื ไมก่ าหนด type กไ็ ด้
const c3 = x + 20; //Error: Not a constant expression. เพราะ x เป็นตัวแปรท่ี value มา ตอน
runtime ไมส่ ามารถกาหนดให้ const ได้
Math Operation
การใช้ +, -, *, / และ % เหมือนกบั ภาษาอน่ื ๆ แต่มีข้อควรระวังที่ตัว /
สาหรับภาษาอืน่ ถ้าเรานา int / int ผลทอี่ อกมาจะได้เปน็ int แน่นอน แตส่ าหรบั Dart นน้ั การหาร จะได้คา่
ออกมาเป็น double เสมอ
int x = 4 / 2; // Error: A value of type 'double' can't be assigned to a variable of
type 'int'.
int y = (int)(4 / 2); // Error: case แบบภาษา C ไม่ไดด้ ้วยนะ
วิธกี ารแก้คือใช้ operation ~/ คอื การหารแล้วปดั จดุ ท้งิ หรอื ใชค้ าสง่ั as หรอื จะใช้คาสั่ง toInt() ก็ ได้
int x = 4 ~/ 2; // Ok! แบบนไ้ี ด้
int x = 4 / 2 as int; // Ok! แบบน้ีได้ int
x = (4 / 2).toInt(); // Ok! แบบนี้ได้
คาเตือน! ระวงั สับสนกบั คาสั่ง int.parse() กับint.tryParse() ทใ่ี ชแ้ ปลง String --> int,เราไม่สามรถ ใช้ 2
คาสั่งน้ใี นการแปลง double --> int ได้
String Concatenate การตอ่ สตรงิ
การตอ่ สตริงใช้เครื่องหมาย + เหมอื นภาษาทว่ั ๆไป แต่ก็มีข้อควรระวัง (อีกแลว้ !) คือไม่
สามารถตอ่ สตริงกบั ตวั แปรทไ่ี ม่ใช่สตริงได้!
int x = 100; // Error: A value of type 'int' can't be assigned to a variable of type
print('x is ' + x);
'String'.
เราจะตอ้ งแปลงตวั แปรท่ีตอ้ งการจะต่อสตริงใหเ้ ป็น String ก่อน หรือทา String Interpolation โดย ใช้ตัว $
เพอื่ ระบุว่าตรงน้ีเป็นตัวแปร (ถา้ มี expression ด้วยให้ครอบด้วย ${})
int x = 100, y = 200;
print('x is ' + x.toString()); // x is 100 print('x is
$x'); // x is 100 print('x is ${x}');
// x is 100
print('x + y is ${x + y}'); // x + y is 300
Null Handling
ตัวแปรใน Dart เปน็ แบบ reference ดังนั้นเลยสามารถเป็นค่า null ได้ทุกตัวเลย ภาษา Dartเลยมี
operation สาหรบั จดั การคา่ null พวกน้ีมาให้เราใช้งานด้วย
?? Null Coalescing เป็นการเชก็ วา่ ตัวแปรตัวน้ี ถา้ มคี า่ เป็น null ให้ใชค้ ่า default ทีก่ าหนดให้
แทน
output = input ?? defaultValue;
// เปน็ short-hand ของ...
if (input != null) {
output = input;
} else {
output = defaultValue;
}
เชน่
int number = ...;
int x = number ?? 1; // กาหนด x = number แตถ่ ้า number เปน็ null ใหก้ าหนด x = 1 แทน
?. Null Conditional หากตัวแปรของเราเป็น object ซงึ่ สามารถเรียกใชง้ าน method ต่างๆ ได้ ... แต่ถา้
object
ตวั น้นั เปน็ null ก็จะเกิดปัญหา Null Pointer Exception ได้
object?.action();
// เป็น short-hand ของ...
if (object != null) {
object.action(); }
เช่น
class People{
void sayHi(){ print("hi!"); }
}
void main(){
People people = ...;
people?.sayHi(); // ถ้า people เป็น object กจ็ ะมีการปรนิ้ ค่า "hi!" ออกมา แตถ่ ้า people
เปน็ null คาสั่งน้ันก็จะไม่ถกู สั่งให้ทางานเลย }
??= Null Coalescing Assignment
หากไม่ชัวร์ว่าตวั แปรตัวน้ันเป็น null รเึ ปล่า สามารถใช้ ??= กาหนดค่า default ลงไปได้
variable ??= defaultValue
// เปน็ short-hand ของ...
variable = variable ?? defaultValue;
// หรือใช้ Ternary Operator
variable = variable != null ? variable : defaultValue;
// หรอื เขียนแบบ if-else
if (input == null) {
output = defaultValue;
}
Flow Control
if-else ไม่หยดุ ทางาน แลว้ รนั คาส่ังบรรทัดต่อไปต่อเลย Loop:
if (condition) {
// TODO
} else {
// TODO
}
switch case
switch (command) {
case 'PENDING':
executePending();
break; case
'APPROVED':
executeApproved();
break; case 'DENIED':
executeDenied();
break; default:
executeUnknown();
}
ขอ้ ควรระวงั ! switch ในภาษา Dart ต้องมี break ตอนจบ case ทกุ ครั้ง ถา้ ไม่ใสล่ งไป โปรแกรมจะ
while, do-while
while (!isDone()) {
doSomething();
}
do {
printLine();
} while (!atEndOfPage());
เมื่อภาษาทั่วๆ ไป มตี วั controlเสริมคือ break และ continue ใหใ้ ชง้ านดว้ ย
Loop: for
for (var i = 0; i < 5; i++) {
print(i);
}
// output: 0 1 2 3 4
หรอื ใช้งานแบบ for-each สาหรบั วนลปู ทุก element ใน list
var numbers = [0, 1, 2, 3, 4]; for
(var number in numbers) {
print(number);
}
// output: 0 1 2 3 4
Function
การสร้างฟงั ก์ชันในภาษา Dart มี syntax เหมือนภาษา C แตส่ ามารถละ type ทิง้ ไปได้ เช่น
int add(int x, int y) {
return x + y;
}
// สามารถเขยี นย่อไดว้ า่
add(x, y) {
return x + y;
}
Arrow Function
และหากเคยเขยี นภาษา JavaScript มา มหี ลายครง้ั ทเ่ี ราสร้างฟงั กช์ นั ที่มี return statement เดยี ว เท่าน้นั
เราก็สามารถเขยี นยอ่ โดยใช้ Arrow Function ได้ ... และแนน่ อน Dart กท็ าได้เหมือนกนั
โดยใช้ =>
int add(int x, int y) {
return x + y;
}
// สามารถเขียนย่อไดว้ า่
add(x, y) => x + y;
Optional Parameter
เราสามารถกาหนดคา่ เร่มิ ตน้ ให้ parameter ไดโ้ ดยใช้ [] ครอบ parameter ที่อยากประกาศให้เปน็
optional
int add(int x, [int y = 1]) {
return x + y;
}
add(10, 20); // result: 30
add(10); // ไมเ่ ซต็ ค่า y, ดงั น้นั y = 1 result: 11
Named Parameter
บางกรณี การสร้างฟังก์ชันที่มี parameter เยอะมาก ตอนท่เี รยี กใชฟ้ ังก์ชันอาจจะงงเรื่องลาดับตัว แปรได้
int setConfig(
String basePath,
String appPath,
int retry, int
maxThread,
String defaultController
){
// TODO
}
setConfig("/", "/app", 10, 4, "Main");
ในกรณีนเี้ ราสามาร้ถต้งั ช่ือ parameter แตล่ ะตวั ได้ โดยใช้ {}
int setConfig({
String basePath,
String appPath,
int retry, int
maxThread,
String defaultController
}) {
// TODO
}
setConfig(
basePath: "/",
appPath: "/app",
retry: 10,
maxThread: 4,
defaultController: "Main"
);
ซ่ึงตวั parameter ท้งั หมด สามารถสลับตาแหนง่ กันได้
ขอ้ ควรระวงั ! ตอนประกาศฟังก์ชนั ต้องมี {} ครอบตัวแปร แต่ตอนเรียกใชง้ านฟังก์ชนั หา้ มใส่ {} ลงไป การใช้
งาน Named Parameter จะถือวา่ เปน็ optional ทง้ั หมด (แปลวา่ ไม่ใส่คา่ ก็ได้) ซ่งึ ก็จะได้ค่า เปน็ null หาก
ตอ้ งการให้เวลาเรยี กใช้งานฟังกช์ ันจาเป็นต้องใส่คา่ น้นั ลงไปเสมอจะตอ้ งใช้
annotation@required เขา้ มาชว่ ย
ซง่ึ @required นนั้ อย่ใู น package ชอ่ื meta ทต่ี ้องตดิ ตั้งเพอ่ื ก่อนจะใช้งาน โดยการเพิ่ม dependency ใน
ไฟล์ pubspec.yaml
dependencies:
meta: ^1.1.8
เวลาใชง้ านก็
import 'package:meta/meta.dart';
int setConfig({
@required String basePath,
@required String appPath,
int retry, int maxThread,
String defaultController
}) {
// TODO
}
แบบนห้ี มายความว่า parameter basePath และ appPath นัน้ จาเปน็ ตอ้ งใส่ทุกครั้งที่เรียกใชง้ าน
ฟงั กช์ ัน
First Class Function
ตามสไตลภ์ าษาสมยั ใหม่ เราสามารถจบั ฟังกช์ ันใสต่ ัวแปรได้
int getNumber() => 123;
void main(){
var func = getNumber; // ไมใ่ ช่ getNumber() นะ,ไม่มี ()
print(func()); // output: 123 }
หรอื เราจะกาหนดว่าตัวแปรฟังก์ชนั จะเป็น type อะไรและมี parameter อะไรบ้างก็ได้
โดยใช้รปู แบบการกาหนด type ดงั น้ี)
return-type Function(params-type)
void func1(){ ... }
int func2(){ ... }
String func3(int x){ ... }
void main(){
void Function() f1 = func1;
int Function() f2 = func2;
String Function(int) f3 = func3;
}
และยงั ใช้ได้กับ method อกี ด้วย เชน่
class People{
String sayHi() => "Hi!";
}
void main(){
People p = People(); String
Function() f = p.sayHi; print(f()); //
output: Hi! }
บทท่ี 3
การสร้าง Class ฉบับ Dart
เวลาพูดถงึ คลาสอยา่ งในภาษา Java อยา่ งน้อยก็ต้องมี method หรอื ก็คือฟงั ก์ชนั ทีอ่ ยู่ในคลาสอย่าง main
อยแู่ นน่ อน Dartเองก็มี main อยเู่ หมือนกนั โดยจะเป็นฟังก์ชันอยชู่ ้ันนอกสดุ สมมตวิ ่าถ้าจะสัง่ print “Hello, World”
ใน Dart โคด้ จะมีหนา้ ตาแบบน้ี
โคด้ Hello World ใน Dart:
main() {
print('Hello, World!');
}
ถา้ จะเทียบกับ Java ท่จี ะ print “Hello, World” แล้ว Dart นน้ั ดูสั้นและก็งา่ ยกว่ากันมาก
โค้ด Hello World ใน Java:
class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
class Bicycle { int cadence; int speed; int gear;
}
void main() {
}
จากโค้ดน้จี ะเห็นวา่ เรามีการประกาศคลาส Bicycle โดยมตี วั แปรที่อยใู่ สคลาสหรือ Attribute ด้วยกัน 3 ตวั
คือ cadend (รอบขาในการปั่น), speed (ความเรว็ ), และ gear (เกียร์) ถ้าสงั เกตจะเหน็ ว่าการประกาศคลาส
นน้ั ไมต่ ้องระบุ public, private หรือ protected เหมอื นในภาษา Java โดยใน Dart นั้นทงั้ หมดจะ public
เป้นคา่ เร่มิ ต้นอยแู่ ลว้
การสร้าง Constructor ใน Dart
เมอื่ คลาสและ attribute ในคลาสกต็ ้องมี constructor แนน่ อนเพ่ือกาหน้าคา่ กบั คลาสนน้ั ๆตอนที่ สร้าง
object ข้นึ มาจากคลาสนน่ั เอง
Bicycle(int cadence, int speed, int gear) {
this.cadence = cadence; this.speed = speed;
this.gear = gear;
}
ซ่ึงในภาษา Dart เราสามารถเขยี น constructor ใหอ้ ยใู่ นบรรทดั เดียวแบบน้กี ็ได้
Bicycle(this.cadence, this.speed, this.gear);
การ Instantiate Object
สร้าง instance หรอื กค็ ือ object ท่สี ร้างจากคลาส Bicycle var bike
= new Bicycle(2, 0, 1);
ใน Dart น้นั เราสามารถเลือกที่จะใชห้ รือไมใ่ ช้ new ตอนสรา้ ง instance กไ็ ด้ ซง่ึ พอเอาไปรวมอยู่ใน ฟงั กช์ นั
main กจ็ ะไดโ้ คด้ หนา้ ตาแบบน้ี
void main() { print(bike);
var bike = Bicycle(2, 0, 1);
}
class Bicycle {
int cadence;
int speed; int
gear;
Bicycle(this.cadence, this.speed, this.gear);
}
void main() {
var bike = new Bicycle(2, 0, 1);
print(bike);
}
Output:
Read-Only Variable คอื อะไร?
Read-only variable ก็คอื การทาใหต้ วั แปรภายใน class เป็น private เขา้ จากภายนอก คลาส
โดยตรงไม่ได้นั่นเอง ในคลาส Bicycle ของเรา มาทาให้ speed กลายเปน็ read-only variable กนั ซงึ่ ทาได้
ง่ายมากๆแคเ่ ปลี่ยนชอ่ื ของมันเท่านั้นเอง
จาก int speed;
ไปเปน็ int _speed = 0;
แคเ่ ตมิ _ (underscore) นาหน้าช่ือ ตัวแปรนนั้ ๆก็จะเป็น private แล้วน่ันเอง ซง่ึ พอตัวแปรเปน็ private แล้ว
เราก็ต้องสรา้ ง getter ไวส้ าหรบั get ตัวแปรจากภายนอกเอาไวด้ ้วย เรยี กใชไ้ ด้งา่ ยๆ
แบบนเ้ี ลย int get speed =>
_speed;
เราจะทาการเพ่ิมฟังก์ชนั info ไวด้ ขู ้อมลู ของจกั รยานเขา้ ไปในคลาสดว้ ย เพ่ือทจ่ี ะไดเ้ ห็นผลลัพธจ์ าก การสรา้ ง
คลาสงา่ ยๆ พอรวมเสรจ็ คลาส Bicycle ของเราก็จะมหี นา้ ตาแบบน้ีแล้ว
class Bicycle {
int cadence; int
gear; int _speed
= 99;
Bicycle(this.cadence, this.gear);
int get speed => _speed;
String info() {
return "This bike has: " + cadence.toString() + " cadence, "
+ gear.toString() + " gear, and " + _speed.toString() + " speed.";
}
}
void main() {
var bike = new Bicycle(2, 1);
print(bike.info());
}
Output:
Optional Parameters
ในภาษา Java นั้นมี overloading constructor หรอื ก็คือการมี constructor หลายตัวทแ่ี ต่ ละตวั รบั คา่ ไม่
เหมือนกนั เพ่ือท่จี ะได้สรา้ ง instance ได้ด้วยวธิ ที ่แี ตกตา่ งกันได้ ใน Dart ก็ทาได้ เช่นเดยี วกนั อย่างคลาส
Bicycle ของเราถ้าหากจะทาให้ตอนสร้าง instance เลอื กทจ่ี ะระบุหรือไม่ ระบุ gear ก็ได้ เราสามารถเขยี น
เปน็ optional parameters ได้แบบโค้ดด้านลา่ งนี้
Bicycle(this.cadence, {this.gear = 1});
สว่ นเวลาสรา้ ง instance กใ็ ช้งานไดแ้ บบนี้
var bike1 = new Bicycle(2, gear: 9); var bike2
= new Bicycle(2); print(bike1.info());
print(bike2.info());
Output:
บรรณานุกรม
Tanapoj Chaivanichanan. (2020). Dart 101: ทาความร้จู กั ภาษา Dart ฉบบั โปรแกรมเมอร์. สบื ค้น 18
กุมภาพันธ์ 2565, จาก https://www.centrilliontech.co.th/blog/2570/dart-101introduction-for-
programmers/
borntodev. เรียนภาษา Dart แบบก้าวกระโดดสาหรับคนเขยี น Java.
สบื ค้น 18 กมุ ภาพนั ธ์ 2565, จาก
https://www.borntodev.com/2020/04/11/%