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

نام تاپیک: اضافه کردن مقادیر پیشفرض برای توابعی که فقط 1 مقدار پیشفرض دارند

  1. #1

    اضافه کردن مقادیر پیشفرض برای توابعی که فقط 1 مقدار پیشفرض دارند

    در نوشتن تابع فقط میتونم اعلام کنم ، اگر فلان پارامتر براش نوشته نشد ، فلان مقدار رو جایگزین کن ، که مشکل این تیپ کد نویسی این هست که اگر این پارامتر وسط کد کال کننده باشه نمیشه چیزی براش در نظر نگرفت ، که تابع مقدار پیش فرضش رو قرار بده ، پس مجبوریم مقدار ('' خالی) بهش پاس بدیم.
    که در این صورت مقدار پیشفرض براش در نظر گرفته نمیشه و مقدار خالی ثبت میشه . چطور میتونیم در اعلان تابع طوری تعریف کنم که وقتی مقدار ('' خالی) بود ، همان مقدار پیشفرض براش در نظر گرفته بشه ؟
    مثال زیر رو ببینید :
    function test(Name: string = 'All'; Famil: string = 'All';
    Password: string = 'NoSet'): Boolean;
    var
    ini: TIniFile;
    begin
    try
    ini := TIniFile.Create('c:\ini.ini');
    try
    ini.WriteString('option', 'Name', Name);
    ini.WriteString('option', 'Famil', Famil);
    ini.WriteString('option', 'Password', Password);
    Result := True;
    finally
    ini.Free;
    end;
    except
    Result := False;
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if not test('ali','','12345') then
    ShowMessage('Error Write file');
    end;

    توی این مثال من پارامتر فامیل رو مثلا نمیدونم: اولا نمیتونم متنی ارسال نکنم و نال باشه ، چون قاط میزنه برنامه ، پس مجبورم مقدار خالی بفرستم . در صورتی که خالی هم نمیخام ، میخام مقدار پیشفرض به جای خالی باشه . در این چنین مورد ها سریعترین و کوتاهترین کدی که میشه نوشت چیه؟


  2. #2
    کاربر دائمی آواتار MohsenB
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایرانم
    پست
    601

    نقل قول: اضافه کردن مقادیر پیشفرض برای توابعی که فقط 1 مقدار پیشفرض دارند

    سلام

    دوتا راه الان به ذهنم میرسه :

    1. از overload کردن توابع استفاده نمایید . البته باید یجورایی تابع رو سازماندهی کنید اگر نوع مقادیر یکی باشند :

      function test(Name: string = 'All'; Famil: string = 'All';
    Password: string = 'NoSet'): string; overload;
    function test(Name: string = 'All'; Password: string = 'NoSet'): string; overload;
    function test(Name: string = 'All'): string; overload;

    ...

    function test(Name: string = 'All'; Famil: string = 'All';
    Password: string = 'NoSet'): string;
    begin
    Result:= Name + ' . ' + Famil + ' . ' + Password;
    end;

    function test(Name: string = 'All'; Password: string = 'NoSet'): string;
    begin
    Result:= Name + ' . ' + 'All' + ' . ' + Password;
    end;

    function test(Name: string = 'All'): string;
    begin
    Result:= Name + ' . ' + 'All' + ' . ' + 'NoSet';
    end;


    و یا یه نوع جدید بسازید :

    type
    TMyName =string;
    TMyFamil =string;
    TMyPass =string;

    function test(Name: TMyName = 'All'; Famil: TMyFamil = 'All';
    Password: TMyPass = 'NoSet'): string; overload;
    function test(Name: TMyName = 'All'; Famil: TMyFamil = 'All'): string; overload;
    function test(Name: TMyName = 'All'): string; overload;

    ...

    function test(Name: TMyName = 'All'; Famil: TMyFamil = 'All';
    Password: TMyPass = 'NoSet'): string;
    begin
    Result:= Name + ' . ' + Famil + ' . ' + Password;
    end;

    function test(Name: TMyName = 'All'; Famil: TMyFamil = 'All'): string;
    begin
    Result:= Name + ' . ' + Famil + ' . ' + 'NoSet';
    end;

    function test(Name: TMyName = 'All'): string;
    begin
    Result:= Name + ' . ' + 'All' + ' . ' + 'NoSet';
    end;


    2. ویا میتونید پیشفرض ها رو بصورت عمومی تعریف کنید و هرجای خالی رو با اون پر کنید :

    const
    DEF_NAME = 'All';
    DEF_FAMIL = 'All';
    DEF_PASS = 'NoSet';


    function test(Name: string = DEF_NAME; Famil: string = DEF_FAMIL;
    Password: string = DEF_PASS): string;

    ...

    function test(Name: string = DEF_NAME; Famil: string = DEF_FAMIL;
    Password: string = DEF_PASS): string;
    begin
    Result:= Name + ' . ' + Famil + ' . ' + Password;
    end;
    // مثال :
    procedure TForm1.btn1Click(Sender: TObject);
    begin
    btn1.Caption:= test('Mohsen', DEF_FAMIL, '122');
    end;


    موفق باشید

  3. #3
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: اضافه کردن مقادیر پیشفرض برای توابعی که فقط 1 مقدار پیشفرض دارند

    سلام.
    اشاره گر هم خوبه به نظرم:

    function test(
    Name: PWideChar;// = 'All';
    Famil: PWideChar;// = 'All';
    Password: PWideChar// = 'NoSet'
    ): Boolean;
    var
    ini: TIniFile;
    begin
    try
    ini := TIniFile.Create('d:\ini.ini');
    try
    if (Name = nil) then Name := 'All';
    if (Famil = nil) then Famil := 'All';
    if (Password = nil) then Password := 'NoSet';
    ini.WriteString('option', 'Name', Name);
    ini.WriteString('option', 'Famil', Famil);
    ini.WriteString('option', 'Password', Password);
    Result := True;
    finally
    ini.Free;
    end;
    except
    Result := False;
    end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    if not test('ali',nil,'12345') then
    ShowMessage('Error Write file');
    end;

  4. #4
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: اضافه کردن مقادیر پیشفرض برای توابعی که فقط 1 مقدار پیشفرض دارند

    اصلا اینم میشه:

    function test(
    Name: string;// = 'All';
    Famil: string;// = 'All';
    Password: string// = 'NoSet'
    ): Boolean;
    var
    ini: TIniFile;
    begin
    try
    ini := TIniFile.Create('d:\ini.ini');
    try
    if (Name = '') then Name := 'All';
    if (Famil = '') then Famil := 'All';
    if (Password = '') then Password := 'NoSet';
    ini.WriteString('option', 'Name', Name);
    ini.WriteString('option', 'Famil', Famil);
    ini.WriteString('option', 'Password', Password);
    Result := True;
    finally
    ini.Free;
    end;
    except
    Result := False;
    end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    if not test('ali','','12345') then
    ShowMessage('Error Write file');
    end;


  5. #5

    نقل قول: اضافه کردن مقادیر پیشفرض برای توابعی که فقط 1 مقدار پیشفرض دارند

    ممنون از دوستان عزیز بابت کد : اما :
    دوست عزیز ، Ananas : این یه مثال بود که 3 پارامتر داشت و در برنامه ای که میخام بنویسم ، حدود 15 تا پارامتر هست ،که البته خودم هم همین کد رو نوشته بودم ، اما اگه بخواهیم به این روش بریم جلو 15 تا IF باید بنویسم که زیاد جالب نیست.(بیشتر مد نظرم تغییر در نوشتن اعلان فانکشن به صورت دریافت دو مقدار به صورت پیشفرض بود)
    و دوست خوبم MohsenB :بیشتر مد نظرم تغییر در نوشتن اعلان فانکشن به صورت دریافت دو مقدار به صورت پیشفرض بود. نه نوشتن Type خاص.
    بیشتر کد نویسی جمع و جور مد نظرم بود.
    به هر حال ممنون از وقتی که گزاشتید.


  6. #6

    نقل قول: اضافه کردن مقادیر پیشفرض برای توابعی که فقط 1 مقدار پیشفرض دارند

    مگه هنوز مشکلت حل نشده؟
    اگر هنوز نیاز داری، بریم تو فاز (بندری ) نوشتن تابع با پارامتر های باز و مقادیر پیش فرض..
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

تاپیک های مشابه

  1. حرفه ای: اضافه کردن یه آپشن برای یه ست آپ برنامه
    نوشته شده توسط Saeed_askari در بخش تولید و توسعه برنامه های Setup و Install
    پاسخ: 0
    آخرین پست: یک شنبه 17 آبان 1388, 12:54 عصر
  2. پاسخ: 2
    آخرین پست: چهارشنبه 13 آبان 1388, 10:26 صبح
  3. اضافه کردن مقادیر به جدول
    نوشته شده توسط babataher در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: پنج شنبه 25 خرداد 1385, 15:29 عصر
  4. اضافه کردن مقادیر به جدول
    نوشته شده توسط babataher در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: سه شنبه 23 خرداد 1385, 11:23 صبح
  5. اضافه کردن مقادیر textfield به querystring با جاوااسکریپت
    نوشته شده توسط shahroq در بخش طراحی وب (Web Design)
    پاسخ: 3
    آخرین پست: یک شنبه 05 تیر 1384, 00:51 صبح

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

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