ฝึกภาษา Dart ภาษาใหม่ของ Google #1
เหมือนเดิมนะครับ บทความนี้ไม่ได้มาสอนนะครับ ผมจะเขียนแนวๆ 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 นะครับ
ถ้ามีอะไรติชมเขียนมาได้เลยนะครับ ผมจะได้เอาไปปรับปรุงในบทความต่อไป ขอบคุณที่อ่านจนจบครับ