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

Patiphan Suwanich
2 min readApr 28, 2020

--

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

นี่เป็นบทความต่อจาก

Contents

  • Control flow statements
  • Imports
  • Classes
  • Private and Public

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

Control flow statements

If and else

main() {
var x = 1;
if (x % 2 == 0) {
print("Even number");
} else if(x % 2 == 1){
print("Odd numbers");
} else {
print("unknow");
}
}

For loops

main() {
var callbacks = [];
for (var i = 0; i < 5; i++) {
callbacks.add(i); // [0,1,2,3,4]
}
callbacks.forEach((c) => print(c));
}

Swith Case

main() {
var command = 'OPEN';
switch (command) {
case 'CLOSED':
print("CLOSED");
break;
case 'PENDING':
print("PENDING");
break;
case 'APPROVED':
print("APPROVED");
break;
case 'DENIED':
print("DENIED");
break;
case 'OPEN':
print("OPEN");
break;
default:
print("default");
}
}

Imports

// Importing core libraries
import 'dart:math';
// Importing libraries from external packages
import 'package:test/test.dart';
// Importing files
import 'path/to/my_other_file.dart';

Specifying a library prefix

ถ้าเกิดเรา import มา 2 libraries แล้วใน lib นั้นมีชื่อฟังก์ชั่นเหมือนกัน เราสามารถใช้ as เป็นตัวแยกได้ว่าจะใช้ฟังก์ชั่นจาก lib ไหน

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// Uses Element from lib1.
Element element1 = Element();
// Uses Element from lib2.
lib2.Element element2 = lib2.Element();

Importing only part of a library

เราสามารถเลือกใช้ฟังก์ชั่นเดียวๆหรือไม่นำมาใช้ได้ด้วย show กับ hideจาก lib

// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

Classes

Dart เป็น object-oriented language วิธีต่างๆก็จะคล้ายๆ Java เลยครับ

main() {
var p = Point(2, 2);
p(); // x: 2, y: 2
var p1 = Point.origin();
p1(); // x: 0, y: 0
var p2 = Point.alongXAxis(5);
p2(); // x: 5, y: 5
// Set the value of the instance variable y.
p.y = 3;
p.allValue(Point(4, 4));
}
class Point {
int x, y;
// Constructors
Point(this.x, this.y);
// Named constructor แทนการใช้ Constructor overloading
Point.origin() {
x = 0;
y = 0;
}
// Delegates to the main constructor.
Point.alongXAxis(int x) : this(x, 5);
allValue(Point other) {
print("$x,$y,${other.x},${other.y}"); // 2,3,4,4
}
// Callable classes
call(){
print("x: $x, y: $y");
}
}

โดยปกติเราจะใช้ . ในการเรียกใช้ค่าต่างๆใน class แต่ dart สามารถใช้ ?. ในการหลีกเลี่ยง exception เมื่อค่าที่ใช้เกิด null

// If p is non-null, set its y value to 4.
p?.y = 4;

Constructors

เหมือนสร้างฟังก์ชันอื่นๆแค่ตั้งชื่อเดียวกับ class สามารถ init value

Named constructor

ภาษา Dart ไม่สามารถทำ Constructor overloading ได้นะให้ใช้ Named constructor แทนครับ ส่วนสาเหตุ ผมก็ไม่ทราบเหตุผลเหมือนกัน 😂

Redirecting constructors

Constructor’s สามารถ redirect ไปยัง constructor อื่นได้ใน class เดียวกัน
เช่น Point.alongXAxis(int x) : this(x, 5); จากตัวอย่างข้างบน

Callable classes

ภาษา Dart อนุญาตให้ instance of class สามารถถูกเรียกใช้ได้เหมือน function เพียงแค่ประกาศ call() method.

SET , GET

main() {
var p = Testclass();
p.myNameIs = "Benz";
print(p.callMyName);

// print(p._name); *ไม่สามารถเรียกใช้ตรงๆได้
// p._privateFun(); *ไม่สามารถเรียกใช้ตรงๆได้

}
class Testclass {
String _name;

// SET , GET
_privateFun() => print("1");

set myNameIs(name) => _name = name;
String get callMyName => _name;
}

Private and Public

ภาษา Dart จะไม่เหมือน java ที่มีคีย์เวิร์ด private,protected,public ที่เอาไว้กำหนดว่า field หรือ method นี้สามารถเรียกใช้งานจากภายนอก class ได้หรือเปล่า แต่ถ้าจะกำหนดให้ใช้ underscore _ นำหน้าสิ่งที่อยากจะให้เป็น private ครับและจะถูกเห็นเฉพาะใน lib *ก็คือต้องแยกไฟล์เท่านั้นนะครับ

เดียวบทความหน้าผมมาเขียนถึงเรื่อง Mixins นะครับ

ถ้ามีอะไรติชมเขียนมาได้เลยนะครับ ผมจะได้เอาไปปรับปรุงในบทความต่อไป ขอบคุณที่อ่านจนจบครับ

--

--

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