มาอีกแล้วครับ วันนี้มีเรามาดูความแตกต่างของ data type ที่ดูแล้ว มันน่าจะเหมือนกัน (รึเปล่า?)
เราพูดถึง var, object แล้วก็ dynamic ครับ
ทั้ง 3 ตัว Hilight ด้วยสีฟ้า ซึ่งหมายถึง Keyword นะครับ
var เจ้าตัวนี้เป็น Keyword ที่ทำให้เราสามารถที่จะให้ค่าอะไรก็ได้ (เอ๊ะ ยังไง??)
ปกติ เวลาที่เราจะประกาศตัวแปร เราก็ต้องกำหนดชนิดของตัวแปรนั้นๆเลยใช่มั้ยครับ เช่น
int myInt;
แต่ด้วยความสามารถของ var ทำให้เราไม่จำเป็นต้องกำหนดชนิดของข้อมูลตอนประกาศครับ บางครั้งเราก็ไม่รู้ว่าข้อมูลที่จะมา assign ให้ ค่าเป็นชนิดไหน ใช่ไหมครับ เจ้าตัว var นี่ ช่วยได้ครับ :)
var myVar;
object เจ้า object นี่เป็น class แม่ของทุกๆ class ครับ เพราะฉะนั้นมันจึงสามารถที่จะรับค่าเป็นอะไรก็ได้ ก็มันเป็น class บนสุดนี่นา
object myObj;
dynamic ใน .NET 4.0 มีชนิดของตัวแปรแบบใหม่โผล่ขึ้นมาครับ นั่นคือ dynamic ตัวนี้นั่นเอง เจ้านี่ัมันก็สามารถที่จะรับค่าเป็นชนิดข้อมูลอะไรก็ได้เหมือนกันครับ
dynamic myDyn;
สรุปแล้วทั้ง 3 ตัวสามารที่จะรับข้อมูลชนิดไหนก็ได้เหมือนกัน อ้าว แล้วความต่างล่ะ???
1. ความต่างอย่างแรกนะครับ เวลาประกาศตัวแปรในแต่ละแบบ จะมีตัวหนึ่งที่แตกต่างจากเพื่อนครับ คือ เจ้า var นั่นเอง
var แม้ว่าจะรับเป็นข้อมูลชนิดอะไรก็ได้ แต่มันจำเป็นที่จะรู้ชนิดข้อมูลเลยตอน Compile time ครับ นั่นคือ เราจำเป็นที่จะต้อง assign ค่าให้ตอนประกาศเลยครับ
2. ตอนที่จะนำไปใช้ครับ ลองดู code นะครับ ผมจะให้ค่า 10 กับตัวแปรทั้งสามแบบ แล้วจะลองนำไป + กับ 7 เรามาดูกันว่าผลเป็นยังไง
จะเห็นว่าชึ้น error นะครับ ขออธิบายหน่อยนะครับ ^^
var ในตอนแรก compiler จะยังไม่รู้ว่าจะเป็นชนิดไหน แต่เมื่อเราให้ค่ามันเมื่อไหร่ Compiler จะมองตัวแปรนั้นกลายเป็นชนิดนั้นทันทีครับ ในตัวอย่างก็จะเป็น int ครับ เพราะฉะนั้นเวลาเอามาบวกกับ 7 ก็จะไม่มีปัญหา
สรุป คือ var จะกลายเป็นชนิดข้อมูลหนึ่งๆตอนให้ค่า และจะเปลี่ยนแปลงไม่ได้ครับ
object เราให้ค่า 10 เข้าไป แต่ชนิดข้อมูลของมันตอน compile ก็ยังเป็น object อยู่ดีครับ ดังนั้นเวลาเราเอาเจ้า object ไปบวก 10 มันจะ error เพราะ compiler ไม่รู้จักการเอา object + int ครับ
ส่วน dynamic จะยังไม่มีปัญหาอะไรเพราะมันจะบอกให้ Compiler ไม่ต้อง check type ตอน Compile time ครับ เจ้านี่มันจะไปคิด type ตอน runtime ทำให้ยังสามารถให้ค่าได้ตามปกติเหมือน var
3. การให้ค่าเป็นข้อมูลชนิดใหม่ที่ต่างไปจากเดิม จะทำได้หรือเปล่า???
จะเห็นว่าตัวแปรที่เป็น var จะ error นะครับ อย่างที่บอกไปนะครับ ว่าตัวแปร var จะเปลี่ยนเป็นชนิดข้อมูลนั้นๆตอนให้ค่าครับ ดังนั้นมันจะเปลี่ยนเป็นข้อมูลอื่นไม่ได้ครับ งั้นเรามาลอง comment บรรทัดนั้นออกแล้วดูตัวอื่นนะครับ
เป็นยังไงบ้างครับ พอจะเห็นความแตกต่างของแต่ละแบบหรือปล่าวครับ จะเห็นว่าเจ้า dynamic นี่จะเซียนกว่าเพื่อนครับ คือ ไม่มีปัญหาอะไรเลย ทั้งตอน Compile และ Runtime แต่ด้วยเพราะอย่างนั้นในตอน Compile เราอาจจะไม่รู้ว่า Code ที่เราเขียนมีข้อผิดพลาดหรือเปล่า จะไปเจอก็ตอน Runtime เลย (*0* น่ากลัวนะเนี่ย)
ลองดูตัวอย่าง Code ข้างล่างนี้นะครับ ถ้าเราให้ค่า myDyn เป็น string แล้วต่อด้วย myDyn++ จะเกิดอะไรขึ้น
ด้วยความแตกต่างเหล่านี้ เวลาเลือกใช้ก็ต้องคิดดีๆนะครับ ^^
อ้างอิง: dotnetspider, pranayamr.blogspot.com
สุดยอดครับ
ReplyDeleteเยี่ยมครับ
ReplyDeleteWhat is the best and reliable casino?
ReplyDeleteMost slots in this casino 바카라 총판 have a 안전사이트 higher 강원 랜드 여자 앵벌이 RTP than the table games in the casino. Players can play for a while and e sport enjoy free games of their 3 answers · 2 votes: There is also a casino that's rigged and does 유흥 싸이트 not allow any free spins.