การสร้าง class
เรียนเขียนโปรแกรมง่ายๆ กับ Expert Programming Tutor ในบท การสร้าง class
ก็เหมือนกับการสร้าง class กับการที่เราสร้างclass ในพวก java อะไรพวกนี้ เเต่มันจะมีฟีเจอร์บางอย่างที่มันเพิ่มเข้ามาในภาษา dart เรามาเรียนรู้กัน เรื่องเเรกเรามาพูดถึงการสร้าง class แบบง่ายๆก่อน
void main() {
class PersonV1 {
String fname;
String lname;
void display() {
print("Fname: $fname, Lname: $lname");
}
|
เราสร้าง class ขึ้นมาเเล้ว ต่อไปเราจะมาสร้าง object พอเราสร้างขึ้นมา มันก็จะไปเรียก default constructor ซึ่งตอนนี้เราไม่มี default constructor เราก็พิมพ์
void main() {
var obj1 = PersonV1();
obj1.display();
class PersonV1 {
String fname;
String lname;
void display() {
print("Fname: $fname, Lname: $lname");
}
|
ผลลัพธ์
ได้ผลลัพธ์คือ none ก็เป็นไปตามค่า เราก็สามารถใส่ค่าให้มันได้ แต่ตัวอย่างนี้ยังไม่มีการเรียกใช้ default constructor กรณีนี้ถ้าเขาไม่ใส่ค่าเข้ามามันก็จะปริ้นค่า none เราก็ควรมี default constructor มาดูตัวอย่าง
void main() {
// class
var obj1 = PersonV1();
obj1.fname = "Expert";
obj1.lname = "Programming";
obj1.display();
var obj2 = PersonV2();
obj2.display();]
class PersonV1 {
String fname;
String lname;
void display() {
print("Fname: $fname, Lname: $lname");
}
|
เราก็จะกำหนดค่า default constructor เเละสร้าง object
ตัวอย่าง
การทำ default constructor ในกรณีที่เราไม่ใส่ค่าเข้ามา
void main() {
// class
var obj1 = PersonV1();
// obj1.fname = "Expert";
// obj1.lname = "Programming";
obj1.display();
var obj2 = PersonV2();
obj2.display();
class PersonV1 {
String fname;
String lname;
void display() {
print("Fname: $fname, Lname: $lname");
}
}
class PersonV2 {
String fname;
String lname;
PersonV2() {
this.fname = "none";
this.lname = "none";
}
|
ก็จะได้ผลลัพธ์ none ออกมา
Fname: null, Lname: null
Fname: none, Lname: none
|
เราก็ต้องมีค่าเริ่มต้นเเละเปลี่ยนแปลงค่าได้ และสร้าง object ตัวที่ 3 คือ Constructor Overriding จะทำการใส่พารามิเตอร์เข้ามา
void main() {
// class
var obj1 = PersonV1();
// obj1.fname = "Expert";
// obj1.lname = "Programming";
obj1.display();
var obj2 = PersonV2();
obj2.display();
//constructor named
var obj3 = PersonV2("CAT", "MEOW");
obj3.display()
|
PersonV2(String fname, String lname) {
this.fname = fname;
this.lname = lname;
}
void display() {
print("Fname: $fname, Lname: $lname");
}
|
มันฟ้อง error เมื่อเราสร้างทั้ง 2 ตัวซ้ำกัน คือ default constructor และ Constructor overlodeing และทำไม 2 ตัวนี่ถึงอยู่คู่กันไม่ได้ล่ะ ก็เพราะว่าในภาษา dart เนี่ย ถ้าเราจะสร้าง Constructor Overriding เราต้องตั้งชื่อให้มันด้วย มันถึงจะรันผ่าน
ตัวอย่าง
PersonV2.tutor_name(String fname, String lname) {
this.fname = fname;
this.lname = lname;
}
var obj3 = PersonV2.tutor_name("CAT", "MEOW");
obj3.display();
|
ต่อมาการเป็นสร้างclass อีกแบบ คือ setter,getter โจทย์ของเรา คือ ตอนที่เรามี fname และ lname มันก็ต้องมีเพศชายกับหญิง เเต่เราไม่อยาก พิมพ์ Mrs. Mr. เราเลยต้องการเรียกใช้ set เพื่อเติมให้เราเอง
ตัวอย่าง
เราก็จะประกาศ set ขึ้นมา
class PersonV3 {
String fname;
String lname;
PersonV3() {
this.fname = "none";
this.lname = "none";
}
PersonV3.tutor_name(String fname, String lname) {
this.fname = fname;
this.lname = lname;
}
void set nameMele(String fname) {
this.fname = "Mr. ${fname}";
}
void set namefeMele(String lname) {
this.fname = "Mrs. ${lname}";
}
String get vipMember {
return "[VIP] $fname $lname";
}
void display() {
print("Fname: $fname, Lname: $lname");
}
}
|
นี่คือการสร้าง set ขึ้นมา
void set nameMele(String fname) {
this.fname = "Mr. ${fname}";
}
void set namefeMele(String lname) {
this.fname = "Mrs. ${lname}";
}
|
เดี๋ยวลองมาเรียกใช้ให้มันโยนเข้ามาให้มันset ข้อความ ออกมา
String get vipMember {
return "[VIP] $fname $lname";
}
void display() {
print("Fname: $fname, Lname: $lname");
}
}
|
ต่อมาเรื่อง getter ในเคสนี้ก็คือ เราต้องการ print ชื่อกับนามสกุล และมีคำว่า vip ตามหลัง เราก็ไม่ต้องมานั่งเขียนเองเราก็ใช้ get เลย
ตัวอย่าง
class PersonV4 {
String fname;
String lname;
PersonV4() {
this.fname = "none";
this.lname = "none";
}
PersonV4.tutor_name(String fname, String lname) {
this.fname = fname;
this.lname = lname;
}
void set nameMele(String fname) {
this.fname = "Mr. ${fname}";
}
void set namefeMele(String lname) {
this.fname = "Mrs. ${lname}";
}
String get vipMember {
return "[VIP] $fname $lname";
}
void display() {
print("fname: $fname, Lname: $lname");
}
|
กลับมาที่บรรทัดนี้ obj4
ตัวอย่าง
ต้องการให้มันprint ค่า none
void main() {
// class
var obj1 = PersonV1();
// obj1.fname = "Expert";
// obj1.lname = "Programming";
obj1.display();
var obj2 = PersonV2();
obj2.display();
//constructor named
var obj3 = PersonV2.tutor_name("CAT", "MEOW");
obj3.display();
//getter , setter
var obj4 = PersonV3.tutor_name("CAT", "MEOW");
obj4.nameMele = "Expert";
obj4.display();
print(obj4.vipMember);
|
ผลลัพธ์
Fname: null, Lname: null
Fname: none, Lname: none
Fname:CAT, Lname: MEOW
Fname: Mr . Expert, Lname: MEOW
[VIP] Mr . Expert MEOW
none
|
และเราอยาก set ค่า ให้เขาเป็นผู้ชาย
ตัวอย่าง
Fname: null, Lname: null
Fname: none, Lname: none
Fname:CAT, Lname: MEOW
Fname: Mr . Expert, Lname: MEOW
[VIP] Mr . Expert MEOW
|
และนี่ก็คือ setter getter นั่นเอง การนำตัวแปรเเละให้มันโยนค่าเข้าไปได้เลย ให้มัน set ค่านั่นเอง สุดท้ายคือการเรียกใช้ฟังก์ชัน callable เราจะสร้าง object ตัวนึงเป็น obj5 และไปนิวกับ V4 ถ้าเราอยากจะเอา obj5 ให้มันทำอะไรสักอย่างนึง เราสามารถทำได้ โดยการใช้ call()
ตัวอย่าง
ประกาศฟังก์ชัน
// callable
var obj5 = PersonV4();
obj5.namefeMele = "CAT";
print(obj5());
}
String call() {
return fname;
}
}
|
ผลลัพธ์
Fname: null, Lname: null
Fname: none, Lname: none
Fname:CAT, Lname: MEOW
Fname: Mr . Expert, Lname: MEOW
[VIP] Mr . Expert MEOW
none
|
นี่คือการเรียกใช้ตัว object แต่ในเคสนี้คือ object แบบ callable เราสามารถที่จะปริ้นอะไรสักอย่างนึงแบบนี้ไวยากรณ์มันก็จะสั้นลง เพื่อให้เห็นภาพชัดเจน เราจะ set ชื่อให้มัน
ตัวอย่าง
// callable
var obj5 = PersonV4();
obj5.namefeMele = "CAT";
print(obj5());
}
|
ผลลัพธ์
Fname: null, Lname: null
Fname: none, Lname: none
Fname:CAT, Lname: MEOW
Fname: Mr . Expert, Lname: MEOW
[VIP] Mr . Expert MEOW
Mrs. CAT
|
เราสามารถ print ได้เลย เเละไวยากรณ์มันจะสั้นลง เราจะ return ให้มันคืนค่ากลับมา บางคนก็อาจจะงง ว่าตรงนี้มันคืออะไร เราก็ต้องไปไล่ดูว่ามีfunction callable อยู่หรือเปล่า
บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่
http://m.me/Expert.Programming.Tutor
ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?
หรือติดต่อ
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา