نوع final

پرسیده شده
فعالیت 921 روز پیش
دیده شده 543 بار
0

سلام روزتون بخیر

در قسمت تعریف  یه لیست با فاینال تونستیم مقدار یکی از خونه های لیست رو تغییر بدیم بدون خطا ولی این امکان برای const  وجود نداشت گفتید یخ زده میشه هنگام کامپایل،پس فاینال چی میشه؟؟ زمان اجرا مقدار دهی میشه برای یبار ؟؟درسته؟ پس برای خط دومش  که مقدار رو تغییر دادید باید گیر میداد ولی اجرا شد چون خط قبل و زمان اجرا مقدار دهی شد!

فایل پیوست

parisa mohamadi
parisa mohamadi

18 مهر 00

0
حذف شده

سلام دوست عزیز وقت بخیر از کدتون اسکرین ارسال کنید مثل این میمونه بگین تو تهران از 4 طبقه افتادم نمردم تو آمریکا مردم اینا قوانین هستن نمیشه به نظرم

فایل پیوست

Mohmmad Rasoul Abdi

توسط

Mohmmad Rasoul Abdi

18 مهر 00

0
حذف شده

سلام وقت شما به خیر
راستش من چند باری پیام شما روخوندم
چیزی که متوجه شدم این بود چرا دوباره میشه متغیری که مقدار فاینال داره رو مقدار دهی کرد؟
این مورد خیلی بستگی به نوع داده ای داره که تعریف کردیم.
اگه primitive type باشه قطعا نمیشه دوباره مقدار دهی کرد علت این موضوع این هست که primitive type ها در ساختمان داده ای  به نام stack در حافظه ذخیره میشن که وقتی میگیم این متغیر از نوع فاینال هست قطعا نمیشه مقدار رو تغییر داد.
ولی reference type ها چون مقدار در ساختمان داده ای به نام heap دخیره میشن و آدرس خونه حافظه در stack ذخیره میشه مقدار رو میشه تغییر داد ولی آدرس خونه ای از حافظه که برای اولین بار بهش تخصیص داده شده، منظورم مقداری هست که تو stack ذخیره شده رو دیگه نمیشه تغییر داد. هر بار که کانستراکتور رو صدا میزنیم کامپایلر میره و تو heap یک خونه جدید میگیره و آدرس رو تو stack ذخیره میکنه. اگه متغیر از نوع فاینال تعریف شده باشه دقیقا به همین علت که آدرس رو متفاوت میکنه نمیشه دوباره نمونه ساخت.(تو فایل پیوست این موارد رو سعی کردم ملموس تر بگم)

فایل پیوست

Fateme Afshar

توسط

Fateme Afshar

19 مهر 00

حذف شده
حالا مقدار const که تو زبان دارت از نوع immutable هست و به طور کلی هر جاییکه نوع داده ای immutable تعریف میشه مقداری که تو stack و heap هست رو نمیتونیم تغییر بدیم. من سعی کردم در حد توانم چیزی که متوجه شدم رو توضیح بدم امیدوارم پاسخ سوالتون رو تونسته باشم بدم :)
Fateme Afshar

19 مهر 00

جلسه تعریف ثابت ها در دارت و تفاوت آن با final