PDA

View Full Version : مقاله: 2 قابلیت جدید کدنویسی اضافه شده از دلفی 2009 به بعد



Felony
شنبه 08 آبان 1389, 19:27 عصر
:لبخندساده: سلام ،

در دلفی 2009 شاهد اضافه شدن تغییرات اساسی شامل Generic ها ، متدهای بی نام ، یونیکد بوده ایم که در مورد این تغییرات مقالات متعددی به زبان انگلیسی منتشر شده ، علاوه بر موارد بالا 2 مورد جزئی دیگه هم به امکانات کدنویسی در دلفی 2009 به بعد اضافه شده که کمتر در موردش اطلاعاتی هست ، برادر Marco Cantu تو یکی از مقالاتشون این 2 امکان رو ذکر کردن که ترجمه شدش رو در پائین میتونید بخونید :

1- دایرکتیو Deprecated :

از این دایرکتیو زمانی استفاده میشه که تابعی در برنامه تعریف کرده باشیم ولی زمان استفاده بخوایم چیزی رو به استفاده کننده تابع یاداوری کنیم ، مثلا در یک برنامه بزرگ تابعی تعریف کردیم که مشکلاتی داره ولی فعلا نمیخوایم روش کار کنیم ولی اگر یادمون بره که تابع رو اصلاح کنیم پیدا کردن مشکل کار سختی میشه یا ... ؛ البته مورد استفاده اصلی این دایرکتیو برای یاداوری این هست که یک متد یا ... منسوخ شده .

خوب در این زمان میتونیم با دایرکتیو Deprecated یک پیغام مناسب هنگام استفاده از تابع دریافت کنیم .

مثلا ؛ تابع زیر قراره مقدار رشته 'Sample' رو تو یه StringList بررسی کنه ولی کدهای تابع هنوز کامل نوشته نشده و در آخر کار شئ List آزاد نشده ، برای اینکه هنگام استفاده از کد IDE دلفی بهمون این مشکل رو یاداوری کنه به صورت زیر عمل میکنیم :

function ProcessList(List: TStringList): Boolean;
deprecated 'Remember to free memory of List variable';
begin
List:= TStringList.Create;
if List.IndexOf('Sample') > -1 then
Result:= True
else
Result:= False;
end;

حالا هر جا که تابع ProcessList صدا زده بشه دلفی در پنجره پیغام ها ، پیغامی که به دایرکتیو Deprecated دادیم رو نمایش میده :

http://barnamenevis.org/attachment.php?attachmentid=59333&stc=1&d=1287331448

در هنگام استفاده از تابعی که دارای دایرکتیو Deprecated هست هم دلفی به نوعی شما رو از این موضوع مطلع میکنه :


http://barnamenevis.org/attachment.php?attachmentid=59335&stc=1&d=1287331760

همونطور که تو عکس میبینید دلفی تابع مورد نظر رو در لیست با رنگ خاکستری نمایش میده .

2- خروج از تابع با یک مقدار

فرض کنید تابعی دارید که StringList میگیره و باید تو تک تک آیتم های اون چک کنه و اولین آیتمی که توش کلمه Test بود رو برگشت بده ، برای این کار باید به صورت زیر عمل کنیم :

function ProccessList(List: TStringList): Integer;
var
i: Integer;
begin
List:= TStringList.Create;
try
for i:= 0 to List.Count - 1 do
if Pos('Test', List.Strings[i])> 0 then
begin
Result:= i;
Exit;
end;
finally
List.Free;
end;
end;

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

function ProccessList(List: TStringList): Integer;
var
i: Integer;
begin
List:= TStringList.Create;
try
for i:= 0 to List.Count - 1 do
if Pos('Test', List.Strings[i])> 0 then
Exit(i);
finally
List.Free;
end;
end;

این کد دقیقا کار همون کد قبلی رو میکنه ولی با این تفاوت که کدنویسی کمتر میشه ، این نوع خروج شباهت زیادی به return در C داره .

امیدوارم این مقاله کوتاه براتون مفید بوده باشه ، موفق باشید .