نمایش نتایج 1 تا 1 از 1

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

  1. #1

    Cool 2 قابلیت جدید کدنویسی اضافه شده از دلفی 2009 به بعد

    سلام ،

    در دلفی 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 دادیم رو نمایش میده :

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


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

    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 داره .

    امیدوارم این مقاله کوتاه براتون مفید بوده باشه ، موفق باشید .
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله Felony : چهارشنبه 04 خرداد 1390 در 15:00 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •