PDA

View Full Version : سوال: نحوه تغییر یک تابع یا رویه



naderanhari
سه شنبه 16 فروردین 1390, 18:25 عصر
یک تابع یا رویه در برنامه خود تعریف میکنیم. این تابع بعنوان مثال شامل چندین پارامتر ثابت و متغیر است. سپس از این تابع در فرم های مختلف برنامه و یا حتی در برنامه های مختلف به تعداد 1000 مرتبه استفاده می کنیم.
حال برحسب نیاز می خواهیم یک پارامتر دیگر به پارمترهای این تابع اضافه کنیم. آیا مجبور هستیم در تمام آن 1000 محلی که تابع را مورد استفاده قرار داده ایم یک مقدار به پارامتر جدید بدهیم یا اینکه روشی در شیوه تعریف تابع وجود دارد که ما را از انجام این کار بی نیاز میکند.
با تشکر.:متفکر:

Felony
سه شنبه 16 فروردین 1390, 18:41 عصر
یعنی میخواین یه پارامتر به تابع اضافه کنید و تو برخی فراخوانی ها بهش مقدار بدید و تو برخی دیگه که نیازی بهش نیست بهش مقدار ندید ؟
اگر اینطوره باید به پارامتر مورد نظر مقدار اولیه بدید ، مثلا تابع زیر رو در نظر بگیرید :

function aFunc(Name: String; Family: String; Age: String = '20'): String;
begin
Result:= Name + ' ' + Family + ' is ' + Age + ' years old';
end;

همونطور که میبینید من پارامتر آخر ( Age ) رو مقدار اولیه بهش دادم و با این کار کاربر مختار هست که موقع فراخوانی بهش مقدار بده ، اگر مقدار نده از مقدار پیش فرض استفاده میشه .

فراخوانی تابع بدون ارسال پارامتر Age :

var
aName, aFamily, aAge: String;
begin
aName:= 'John';
aFamily:= 'Smith';
ShowMessage(aFunc(aName, aFamily));
end;

فراخوانی تابع با ارسال پارامتر Age :
var
aName, aFamily, aAge: String;
begin
aName:= 'John';
aFamily:= 'Smith';
ShowMessage(aFunc(aName, aFamily, '37'));
end;

دقت کنید که هرجا پارامتری رو مقدار اولیه بدید باید پارامترهای بعدی اون هم از این رویه پیروی کنن ، یعنی اگر در تابع بالا پارامتر Name رو مقدار اولیه بدید باید پارامتر Family و Age هم مقدار اولیه داشته باشن ، پس اگر مایل هستید فقط یک پارامتر مقدار اولیه داشته باشه مثل کدی که من نوشتم اون پارامتر رو به عنوان پارامتر آخر معرفی کنید .

BORHAN TEC
سه شنبه 16 فروردین 1390, 19:10 عصر
علاوه بر روش بالا می توانید توابع مورد نظر خود را Overload کنید. مطمئناً بارها در همین سایت در مورد سربارگذاری توابع بحث شده است که می توانید آنرا جستجو کنید.