ฝึกภาษา Dart ภาษาใหม่ของ Google

Patiphan Suwanich
3 min readApr 26, 2020

--

บทความนี้ไม่ได้มาสอนนะครับ ผมจะเขียนแนวๆ Dart เขียนอย่างไรได้บ้าง
ซะมากกว่าเพราะผมคิดว่าตัวเองยังไม่เก่งพอที่จะสอนใครได้ครับ ขอมาเล่าสู่กันฟังดีกว่า

คิดว่าคนที่เข้ามาอ่านบทความนี้น่าจะรู้จัก Flutter กันแล้วและก็คงอยากจะลองเขียนดูใช่ไหม เหมือนผมเลย แต่เดียวก่อนเราควรศึกษาภาษาที่ใช้พัฒนากันก่อนสิ

Contents

  • Hello World
  • Variables
  • Functions
  • Lists
  • Exceptions

กดลิ้งก์ Try-dart นี้เป็น IDE Online ครับ

Run ตามธรรมเนียม

ตัวอย่างการประกาศตัวแปรของ Dart

Variable Declaration

// ไม่ระบุ type
var tmp1 = "Hello";
var tmp2 = 2020;
var tmp3 = true;
// ระบุ type
String tmp4 = "สวัสดี";
bool tmp6 = true;
// Default value
int tmp5; // จะมีค่าเป็น null
// Constant
final constant1 = 321;
const constant2 = 123;

Dynamic Variable

dynamic tmp1 = "BenzDroid";
tmp1 = 2020;

Object tmp2 = "BenzDroid";
tmp2 = 2020;
// กำลังสงสัยใช่ไหมครับว่ามันต่างกันยังไง ลองใช้ lengthprint(tmp1.length);
print(tmp2.length);

tmp2 จะแจ้ง Error มาบอกก่อนเราจะกดรันใช่ไหมครับ

แต่ tmp1 ไม่แสดง Error อะไรออกมาเลย

เสริม var ไม่ใช่ Dynamic นะครับ

var tmp1 = “BenzDroid”;
tmp1 = 2020;
/* A value of type 'int' can't be assigned to a variable of type 'String' */

การประกาศฟังก์ชั่นในรูปแบบต่างๆ

Function Declaration

main() {  
exampleFun();
sum(1,2); // 3
minus(2,3); // -1
multiply(4,5); // 20
divide(5,6); // 0.8333333333333334
}
void exampleFun(){
print("example Function");
}
// ประกาศ Type
int sum(int x1, int x2){
print(x1 + x2);
return x1+x2;
}
// ไม่ระบุ Type
minus(x1, x2){
print( x1 - x2);
}
// return ทันที แบบประกาศ Type
multiply(int x1, int x2) => print(x1 * x2);
// return ทันที แบบไม่ระบุType
divide(x1, x2) => print(x1 / x2);

Positional parameters

จะเป็นการประกาศฟังก์ชั่นแบบต้องใส่ตัวแบบให้ตรงตำแหน่ง parameters จะมีลูกเล่นเพิ่มที่สามารถใส่ Default parameters ได้ด้วย […] ครับ

main(){
minus(3);
divide();
}
minus(x1, [x2=2]){
print( x1 - x2);
}
divide([x1=2, x2=2]) => print(x1 / x2);

Named parameters

จะเป็นการประกาศฟังก์ชั่นแบบเน้นใส่ค่าให้ตรงparamName: value และจะมีลูกเล่นเหมือน Positional parameters คือสามารถใส่ Default parameters ได้แต่ไม่ต้องมี […] นะครับ

main(){
sum(x2:1,x1:2); // x1: 2 + x2: 1
sum(x1:1,x2:2); // x1: 1 + x2: 2
multiply(x1:4,x2:3); // 12
multiply(x1:4); // 0
}
int sum({int x1, int x2}){
print("x1: $x1 + x2: $x2");
return x1+x2;
}
multiply({int x1, int x2=0}) => print(x1 * x2);

Named and Positional สามารถนำมาผสมกันได้ด้วยนะครับ

https://stackoverflow.com/questions/13264230/what-is-the-difference-between-named-and-positional-parameters-in-dart

List

Fixed-length, Growable and Const list

การประกาศ list ของ Dart เหมือน JavaScript ประกาศ array

main() {// Fixed-length
List<int> fixList = List<int>(3);
fixList[0] = 11;
fixList[1] = 22;
fixList[2] = 33;
// fixList[3] = 44; // Index out of range

var list = [1, 2, 3];
list.add(4);
var constantList = const [1, 2, 3];
// constantList[1] = 1; // Uncommenting this causes an error.

}

Spread operator

(…) เป็นวิธีการส่งค่าหลายๆค่าลงต่อจาก list

main() {
var list = [1, 2, 3];
var list2 = [-1,0, …list]; // [-1, 0, 1, 2, 3]
var list2 = [-1,0, list]; // [-1, 0, [1, 2, 3]]
}

Null-aware spread operator

(…?) เป็นวิธีการส่งค่าหลายๆค่าลงต่อจาก list โดยดักว่ามี null ไหม

main() {
var list;
var list2 = [0, ...?list]; // [0]
}

Exception

main() {
try {
int error1 = 1;
error1++;
var error2 = [4, 5];
error2[9];
} on NoSuchMethodError { // (1)
print('NoSuchMethodError');
} on RangeError { // (2)
print('RangeError');
} catch (e, s) {
print('error: $e'); // (3)
print('stack: $s');
} finally {
print('Exit try'); // (4)
}
}

On

เป็นการ Filter Error ที่จะเกิดขึ้น เช่นถ้า error1 = null ก็จะเข้าเงื่อนไข (1)

แต่ถ้าตามโค้ดข้างบน error2 จะเข้าเงื่อนไข (2)

Catch

ก็จะเหมือน Java เลยคือดักจับทุก Error แล้วพิมพ์ออกมาในช่อง (3)

Finally

จะเป็นส่วนสุดท้าย สำหรับการทำงานก่อนจบ อย่างโค้ดตัวอย่าง (4) ก็จะพิมพ์ Exit try ครับ

เพียงเท่านี้ผู้อ่านน่าจะพอรู้ว่าภาษา Dart เขียนยังไงไปคร่าวๆแล้วเดียวเรื่อง Class ผมขอยกไปบทความหน้านะครับ กลัวบทจะยาวจนเกินไป ถ้ามีอะไรติชมเขียนมาได้เลยนะครับ ผมจะได้เอาไปปรับปรุงในบทความต่อไป ขอบคุณที่อ่านจนจบครับ

--

--

Patiphan Suwanich
Patiphan Suwanich

Written by Patiphan Suwanich

Work at Major Development | Interest in Blockchain | looking for opportunities in my programmer’s life

No responses yet