Jack of all trades, master of none
تفاوت عبارت Dynamic و Var در زبان #C - بخش اول
در این کوتاه دست نوشت قصد داریم ببینیم این دو عبارت قابل تعریف در زبان سی شارپ آیا اصلن تفاوتی با هم دارند ؟. و اگر دارند موارد استفاده از آنها چیست ؟.
تفاوت این دو برای خیلی از برنامه نویسان کمی مبهم و گیج کننده است. این مقاله را بخوانید با ابهام را برطرف کنیم. در این مقاله تشابه، تفاوتها و موارد کاربرد هر دو را مورد بررسی قرار خواهیم داد.
اول یک Console App در بستر DotnetFrameWork ایجاد کنید.
کار را با ایجاد یک متغیر از نوع Dynamic و var پی خواهیم گرفت.
حال باید تفاوت این را مورد بررسی قرار داد.
اولین تفاوت این است که متغیر Dynamic یک Object است، ولی آنچه توسط Var ایجاد شده منتظر است با در Design Time مقدار بگیرد و به این شکل بداند اصلن چه نوعی خواهد بود.
خوب مشکلی که متغیر Var ایجاد میکند آن است که باید مقدار دهی اولیه شود و این دردسر زا است. به شکل زیر دقت کنید.
چون مقدار اولیه در هنگام تعریف Var داده نشده، حتی وقتی مقدار 110 را درون testvar ذخیره می کنم، باز هم با Exception روبرو میگردم.
ایراد بعدی تعریف متغیر Var این است اگر مقدار اولیه گرفت ، به نوع حساس میشود. به شکل زیر دقت کنید.
به دلیل عدد صحیح بودن مقدار 110، به مقدار اعشاری 2.2 حساسیت نشان داده و سبب بروز خطا گردید.
خوب به اندازه کافی متغیرهای نوع Var منهدم و نابود کردیم. حالا برویم ببینیم در مقادیر نوع Dynamic چه خبر است.
همانطور که اشاره شد، نوع Dynamic شباهت زیادی به نوع Object دارد. موضوع اینجاست که نوع Dynamic شکلی پیشرفته از Object است که سبب جلوگیری از بروز مشکلات Boxing و Unboxing و cast های بسیار خواهد گردید. به تصویر زیر دقت کنید.
همانطور که مشاهده میکنید ، همه چیز خوب است و به درستی کامپایل و اجرا خواهد گردید.
خوب الان بعضیها خوشحال میشوند و میگویند اصلن دیگر همه متغیرها را Dynamic میگیریم و کلن حالی به هولی خواهد بود. خیر. صبر کنید . مشکلاتی در این بین هست.
1- این Casting که دارد درون Memory انجام میشود، هزینه بر است. این هزینه در حین اجرای پروژه و در Performance پروژه شما مشهود خواهد بود.
2- کلن کامپایلر این نوع را بیخیال شده و همه چیز را به عهده برنامه نویس گذاشته. نه Type Cheking وجود دارد و نه به آن صورت سبب بروز Exception خواهد شد. این مساله در هنگام Debug کردن میتواند یک سبب شود یک هفته دور خودتان بچرخید و منشا ایراد را پیدا نکنید.
اجازه بدهید یک نمونه از مسخره بازیهای یک متغیر داینامیک را ببینیم. به تصویر دقت کنید.
اصلن متد Sayhi داشتیم ؟. چرا در Design Time هیچ ایرادی نمیگیره ؟. چون نمگیریه دیگه. همه چیز رو ول کرده و گذاشته تا در Run time کنترل بشه. البته به محض اجرا Error خواهد داد.
پس نشون داد که این نوع متغیر چیزی نیست که کل پروژه را بر اساس آن بنویسید و به آن اعتماد کنید.
خوب چون این مبحث کمی طولانی میشه و منم البته بیکار نیسم، اینجا متوقف می شویم و در بخش دوم که در آینده منتشر خواهد شد، مبحث را پیگیری خواهیم نمود.
همانطور که همیشه میگم ، ایمیل من به آدرس AliKolahdoozan@Gmail.com همیشه هست و میتونید پیامی، فحشی ، چیزی داشتید ارسال کنید. فکر کنم توی توییتر هم هستم : @AliKolahdoozan
مطلبی دیگر از این انتشارات
شیوههایی بهتر در PHP
مطلبی دیگر از این انتشارات
عاشقانهای برای ارتباط با سرور در اندروید!
مطلبی دیگر از این انتشارات
ریفکتورینگ (Refactoring) - بخش اول