كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> عمومي برنامه‌نويسي -> زبان برنامه‌نويسي Delphi
پاسخ دادن به این موضوع
دلفی همچنان انتخاب اول برنامه نویسان منصف و حرفه ای
پست تاریخ: جمعه 7 بهمن 1390 - 14:11    
winprgadv
شروع فعاليت
شروع فعاليت


پست: 21
عضو شده در: 4 بهمن 1390
محل سکونت: تبريز
iran.gif


امتياز: 197

عنوان: دلفی همچنان انتخاب اول برنامه نویسان منصف و حرفه ای خواندن مشخصات فردی ارسال پیام شخصی

اگر قطعه کد زیر را در #C اجرا کنید چه اتفاقی می افتد؟

کد:
int x=0;
int y=x/0;
new Form1().Show();


بله درست است، کامپایلر #C بلافاصله خطای تقسیم بر صفر را گرفته و اجرای برنامه را متوقف میکند طوری که تا رفع خطا فرم 1 نمایش داده نمیشود! این انتظاریست طبیعی که میرود حتی اشتباهات برنامه نویسان مبتدی را تا حد صفر نگه میدارد، اما عقلایی و بهینه نیست! کامپایلر باید عملیات انتصاب و حتی اختصاص حافظه به x , y را تنها زمانی انجام میداد که به اولین استفاده موثر از آنها برخورد میکرد.!!! کاری که دلفی انجام می دهد،

اگر قطعه کد زیر را دلفی اجرا کنید هیچ خطایی نمی بینید در حالی که تقسیم بر صفر به خوبی مشهود است:

کد:
procedure TForm1.FormCreate(Sender: TObject);
var
  x,y:integer;
begin
        x:=0;
        y:=7 div x;
end;
end.


اما در کد زیر خطا میگیرد!


کد:
procedure TForm1.FormCreate(Sender: TObject);
var
  x,y:integer;
begin
        x:=0;
        y:=7 div x;
        Form1.Text:=IntToStr(y);
end;
end.


می دانید که چه اتفاقی می افتد؟ تا وقتی که به دستور Form1.Text:=IntToStr(y); نرسیده ایم کامپایلر اصلاً x , y و انتصابات مربوط به این دو متغیر را نادیده میگیرد! به محض رسیدن به اولین استفاده موثر از y در دستور Form1.Text:=IntToStr(y); که قرار است به صورت خروجی تحویل کاربر شود مقدار y را جستجو میکند تا دستور y:=7 div x; اجرا گردد آنگاه تازه اختصاص حافظه به x و سپس y انجام شده و بعد انتصابات مربوطه انجام میگیرد و حین انتصاب 7 div x به y کامپایلر متوجه خطا میشود. شاید این تمهید دلفی به مذاق برنامه نویسان مبتدی خوش نیاید ولی همین عوامل از آن کامپایلری نمونه ساخته که محصولات قوی و بهینه ای تولید می کند.

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: Hamid (جمعه 7 بهمن 1390 - 15:57)


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 

صفحه 1 از 1

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2020. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc