เรียนเขียนโปรแกรมง่ายๆกับ Expert Programming tutor ในบท variable (dynamic,object)
เราก็จะมาต่อเรื่องของการประกาศตัวแปร จากบทที่เเล้วที่เราเรียนรู้กันไปบ้างเเล้ว บทนี้ก็จะมาสอนอีกแบบนึงคือ แบบ dynamic กับ object
2 อย่างนี้เเตกต่างกันอย่างไร เดี๋ยวให้นักเรียนสร้างตัวแปร dynamic มาก่อน สมมุติว่าเราเพิ่มตัวแปรขึ้นมา สร้างชื่อตัวแปรขึ้นมาว่า tmp11 = “EXPERT”;
ตอนนี้ tmp ของตัวแปรตัวนี้ก็คือ string เราสามารถเช็คได้ คือการทำการ print () มันมีค่า value เท่าไหร่ ก็คือ เราจะเข้าถึงตัวแปลงคือ tmp11: $tmp11 เเล้วเราจะมาถามต่อว่ามันคืออะไร จะพิมพ์คำว่า is
ตัวอย่าง
void main() { |
ผลลัพธ์
Programming ,1234 ,true ,Dart ,9999 ,false |
ตอนนี้ตัวแปร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 |
ตอนนี้ value เป็น 9999 และมันเป็น int การใช้ dynamic ค่อนข้างที่จะต้องระวังเป็นพิเศษ มันจะเกิดเหตุการณ์นี้ขึ้น ถ้าสมมุติว่าเราพิมพ์คำว่า tmp เเละเราจะเข้าถึงมัน เรียกว่าขนาดของตัวอักษร นั่นคือ length () มาดูตัวอย่าง
void main() { |
ผลลัพธ์
สังเกตุเห็นอะไรบางอย่าง มันเป็น tmp ตัวเลขเนี่ย ตอนนี้เราพิมพ์มันไม่จะไม่ขึ้น error แต่เมื่อเรารัน มันจะเกิดข้อผิดพลาด เพราะเราจะดูความยาวของตัวอักษรไม่ใช่ตัวเลข เดี๋ยวมาดูอีกตัวอย่างนึงกัน
void main() { |
ผลลัพธ์
6 |
เห็นไหม ตัวอย่างที่เราทำจะเป็นข้อความ str ผลลัพธ์คือ 6 ตัวอักษร การใช้ dynamic น่ากลัวตรงนี้ คือเบื้องต้นผู้เรียนอาจจะพิมพ์พวก method ผิด มันจะไม่มีerror มันจะerrorตอนรัน มาดูตัวอย่าง
void main() { |
ซึ่งตัวอย่างข้างต้น ข้อความดังกล่าวไม่มีอยู่จริง
แต่มันยังไม่ขึ้น error เเต่เรามันจะขึ้นตอนรัน อันนี้ก็ฝากระวังด้วย
ต่อไปแบบ Object
ตัวอย่าง
object tmp222 = “TUTOR” ;
เราก็ทำการ print() จะเหมือนกับ dynamic มันจะเข้าใจว่าค่าตัว tmp22 จะเป็นตัว str
void main() { |
ผลลัพธ์
tmp11: EXPERT is String |
ต้องทำการcomment ตัว print ด้านบนก่อนด้วย มันจะได้อ่านค่าล่าสุด (สำหรับคนที่พิมพ์ต่อเนื่องลงมาเลย)
ต่อไปเราจะทำให้เป็นตัวเลข ดูสิว่าจะเป็นยังไง
ตัวอย่าง
void main() { |
ผลลัพธ์
tmp11: EXPERT is String |
ตอนนี้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"; |
ผลลัพธ์
tmp11: EXPERT is String |
เนื่องจากตัวแปรตัวนี้มีตัวเลข แล้วเราก็ตัวแปรเลขมาบวกกัน เเต่เราดันไปยืมมันมา เราทำแบบนี้
ตัวอย่าง
dynamic tmp33 = 500; |
ผลลัพธ์
เห็นไหมตัวแปรdynamic มันไม่ฟ้อง error ใดๆ นี่คือสิ่งที่น่ากลัว สำหรับคนที่ใช้เเบบไม่ระวัง ซึ่งมาพบerror อีกทีตอนรัน นี่คือการใช้ตัวแปรdynamic เรื่องสุดท้ายแล้ว ตัวแปรถ้าเราไม่ทำการระบุค่าให้มัน
ตัวอย่าง
int tmp44; |
ผลลัพธ์
tmp11: EXPERT is String |
ถ้าเราไม่ระบุค่าให้มัน ตัวแปรพวกเนี้ยจะมีค่า null หมดเลย ก็คือค่าว่างนั่นเอง สำหรับบทนี้เราก็ได้เรียนรู้ถึงข้อเเตกต่างกันเเล้ว เราพยายามเช็คกับเรื่องพวกนี้กันด้วย เรียนรู้กันต่อในบทหน้าเลย
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM