สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial DART

L01 DART INTRO L02 DART HOWTO L03 DART GETTING START L04 DART SYNTAX L05 DART VARIABLE 01 L06 DART VARIABLE 02 L07 DART FUNCTION L08 DART OPTIONAL NAMED POSITONAL L09 DART LIST L10 DART CLASS L11 DART INHERITANCE MIXIN L12 DART EXCEPTION L13 DART GENERATOR AND ITERATOR L14 DART OPERATION

การประกาศตัวแปร variable(dynamic,object) ในภาษา Dart

เรียนเขียนโปรแกรมง่ายๆกับ Expert Programming tutor ในบท variable (dynamic,object)


เราก็จะมาต่อเรื่องของการประกาศตัวแปร จากบทที่เเล้วที่เราเรียนรู้กันไปบ้างเเล้ว บทนี้ก็จะมาสอนอีกแบบนึงคือ แบบ dynamic กับ object 
2 อย่างนี้เเตกต่างกันอย่างไร เดี๋ยวให้นักเรียนสร้างตัวแปร dynamic มาก่อน สมมุติว่าเราเพิ่มตัวแปรขึ้นมา สร้างชื่อตัวแปรขึ้นมาว่า 

tmp11 = “EXPERT”;   


ตอนนี้ tmp ของตัวแปรตัวนี้ก็คือ string   เราสามารถเช็คได้ คือการทำการ print () มันมีค่า value เท่าไหร่  ก็คือ เราจะเข้าถึงตัวแปลงคือ tmp11: $tmp11 เเล้วเราจะมาถามต่อว่ามันคืออะไร จะพิมพ์คำว่า is  
ตัวอย่าง

void main() {
	//dynamic
	dynamic tmp11 = "EXPERT" ;
	print("tmp11: $tmp11 is ${tmp11.runtimeType}");
}

ผลลัพธ์

Programming ,1234 ,true ,Dart ,9999 ,false
tmp11: EXPERT is String

ตอนนี้ตัวแปรtmp11 ของเราvalue เป็น EXPERT และมันเป็น string  เดี๋ยวเราจะเปลี่ยนแปลงค่าใหม่ ให้เป็นค่าตัวเลข ก็จะเป็นดังตัวอย่าง

void main() {
	//dynamic
	dynamic tmp11 = "EXPERT" ;
	print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	tmp11 = 9999;
	print("tmp11: $tmp11 is ${tmp11.runtimeType}");
}

ผลลัพธ์

Programming ,1234 ,true ,Dart ,9999 ,false
tmp11: EXPERT is String
tmp11: 9999 is int

ตอนนี้ value เป็น 9999 และมันเป็น int  การใช้ dynamic ค่อนข้างที่จะต้องระวังเป็นพิเศษ  มันจะเกิดเหตุการณ์นี้ขึ้น  ถ้าสมมุติว่าเราพิมพ์คำว่า tmp เเละเราจะเข้าถึงมัน เรียกว่าขนาดของตัวอักษร นั่นคือ length () มาดูตัวอย่าง

void main() {
	//dynamic
	dynamic tmp11 = "EXPERT" ;
	print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	tmp11 = 9999;
	//print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	print("${tmp11.length}");
}

ผลลัพธ์


สังเกตุเห็นอะไรบางอย่าง มันเป็น tmp ตัวเลขเนี่ย ตอนนี้เราพิมพ์มันไม่จะไม่ขึ้น error แต่เมื่อเรารัน มันจะเกิดข้อผิดพลาด เพราะเราจะดูความยาวของตัวอักษรไม่ใช่ตัวเลข  เดี๋ยวมาดูอีกตัวอย่างนึงกัน

void main() {
	//dynamic
	dynamic tmp11 = "EXPERT" ;
	//print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	//tmp11 = 9999 ;
	//print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	print("${tmp11.length}");
}

ผลลัพธ์

6

เห็นไหม ตัวอย่างที่เราทำจะเป็นข้อความ str ผลลัพธ์คือ 6 ตัวอักษร การใช้ dynamic น่ากลัวตรงนี้ คือเบื้องต้นผู้เรียนอาจจะพิมพ์พวก method ผิด มันจะไม่มีerror  มันจะerrorตอนรัน  มาดูตัวอย่าง

void main() {
	//dynamic
	dynamic tmp11 = "EXPERT" ;
	print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	tmp11 = 9999;
	//print("tmp11: $tmp11 is ${tmp11.runtimeType}"); //
	print("${tmp11.length}");
	print("${tmp11.catcatcat}");
}

ซึ่งตัวอย่างข้างต้น ข้อความดังกล่าวไม่มีอยู่จริง 

แต่มันยังไม่ขึ้น error เเต่เรามันจะขึ้นตอนรัน อันนี้ก็ฝากระวังด้วย
ต่อไปแบบ Object 
ตัวอย่าง
object tmp222 = “TUTOR” ;
เราก็ทำการ print() จะเหมือนกับ dynamic มันจะเข้าใจว่าค่าตัว tmp22 จะเป็นตัว str 

void main() {
	//dynamic
	dynamic tmp11 = "EXPERT" ;
	print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	tmp11 = 9999;
	//print("tmp11: $tmp11 is ${tmp11.runtimeType}"); //
	//print("${tmp11.length}"); //
	//print("${tmp11.catcatcat}"); //
	Object tmp222 = "TUTOR";
	print("tmp222: $tmp222 is ${tmp11.runtimeType}");
}

ผลลัพธ์

tmp11: EXPERT is String
tmp222: TUTOR is int

ต้องทำการcomment ตัว print ด้านบนก่อนด้วย มันจะได้อ่านค่าล่าสุด (สำหรับคนที่พิมพ์ต่อเนื่องลงมาเลย)
ต่อไปเราจะทำให้เป็นตัวเลข ดูสิว่าจะเป็นยังไง 
ตัวอย่าง

void main() {
	//dynamic
	dynamic tmp11 = "EXPERT" ;
	print("tmp11: $tmp11 is ${tmp11.runtimeType}");
	tmp11 = 9999;
	//print("tmp11: $tmp11 is ${tmp11.runtimeType}"); //
	//print("${tmp11.length}"); //
	//print("${tmp11.catcatcat}"); //
	Object tmp222 = "TUTOR";
	print("tmp222: $tmp222 is ${tmp11.runtimeType}");
	tmp222 = 7777;
	print("tmp222: $tmp222 is ${tmp11.runtimeType}");
}

ผลลัพธ์

tmp11: EXPERT is String
tmp222: TUTOR is int
tmp222: 7777 is int

ตอนนี้type เราจากตัวแปรที่เป็นobjectเนี่ยก็จะเป็นตัวเลข คือ 7777    ก็เริ่มสงสัยว่ามันก็เหมือนกับ dynamic  นี่น่า ถูกต้องเเล้ว มันเริ่มเหมือนdynamic แต่ถ้าเรามาทำการprint ดู ของเก่าdynamic ของเรามันเป็น str เราสามารถprint ความยาว เเต่ถ้าเราเป็นรูปแบบopject เรามาดูกัน  

     ตรงนี้มันจะฟ้อง error เนื่องจากตรงนี้มันเป็น object มันจะไม่รู้ว่ามีโซลูชั่นตรงนี้อยู่ มันจะตอนเรียกใช้พวกฟังก์ชัน มันจะเกิดerror ทันที ซึ่งต่างจากdynamic มันจะไม่ฟ้อง error ใดใดเลย อันนี้ก็คือให้เห็นภาพความเเตกต่างระหว่าง 2 ตัว นี้ เบื้องต้นค่าเปลี่ยนแปลงค่าเเล้วแต่มันจะไม่รู้จัก tmp ของ object นั่นเอง 

อีกเรื่องนึงที่เราจะพูดถึงเป็นเรื่องที่น่าสนใจมาก เราจะโฟกัสเรื่อง dynamic นิดนึง
ตัวอย่าง
เราจะเปลี่ยนแปลงค่าคงที่  ตอนนี้ tmp33 ก็จะเป็น 1,000 แล้วทำการปรินท์ค่า (พิมพ์บรรทัดต่อมาได้เลย)

Object tmp222 = "TUTOR";
print("tmp222: $tmp222 is ${tmp11.runtimeType}");
tmp222 = 7777;
print("tmp222: $tmp222 is ${tmp11.runtimeType}");
dynamic tmp33 = 500;
tmp33 = tmp33 + 500;
print("tmp33: $tmp33");

ผลลัพธ์

tmp11: EXPERT is String
tmp222: TUTOR is int
tmp222: 7777 is int
tmp33: 1000

เนื่องจากตัวแปรตัวนี้มีตัวเลข แล้วเราก็ตัวแปรเลขมาบวกกัน เเต่เราดันไปยืมมันมา  เราทำแบบนี้
ตัวอย่าง

dynamic tmp33 = 500;
tmp33 = tmp33 + 500;
print("tmp33: $tmp33");
tmp33 = tmp33 + "500";

ผลลัพธ์

      เห็นไหมตัวแปรdynamic มันไม่ฟ้อง error ใดๆ นี่คือสิ่งที่น่ากลัว สำหรับคนที่ใช้เเบบไม่ระวัง ซึ่งมาพบerror อีกทีตอนรัน นี่คือการใช้ตัวแปรdynamic  เรื่องสุดท้ายแล้ว ตัวแปรถ้าเราไม่ทำการระบุค่าให้มัน 
ตัวอย่าง

int tmp44;
bool tmp55;
String tmp66;
print("$tmp44, $tmp55, $tmp66");

ผลลัพธ์

tmp11: EXPERT is String
tmp222: TUTOR is int
tmp222: 7777 is int
tmp33: 1000
null, null, null

ถ้าเราไม่ระบุค่าให้มัน  ตัวแปรพวกเนี้ยจะมีค่า null หมดเลย ก็คือค่าว่างนั่นเอง สำหรับบทนี้เราก็ได้เรียนรู้ถึงข้อเเตกต่างกันเเล้ว เราพยายามเช็คกับเรื่องพวกนี้กันด้วย เรียนรู้กันต่อในบทหน้าเลย 



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา