PDA

View Full Version : تابعی با متغیر های اختیاری



mohsen_metn
سه شنبه 28 دی 1389, 16:35 عصر
سلام
برای تعریف تابع و یا پرو سیجری که بتواند متغیر های اختیاری داشته باشد چه کار باید کرد؟
مثل کلمه optional در vb

Saman_12
سه شنبه 28 دی 1389, 20:22 عصر
من این امکان رو توی سی شارپ ندیدم اما شما میتونید توی خود تابع چک کنید که متغییر ها مقدار دارند یا نه اگه نداشتند یک مقدار رو به عنوان مقدار پیش فرض توی خود تابع به متغییر نصبت بدید.(البته به ان نکته توجه داشته باشین که گفتم من ندیدم شاید این امکان یا امکانی دیگه شبیه این در سی شارپ موجود باشه.)

hossin.esm
سه شنبه 28 دی 1389, 21:41 عصر
شدن که میشود
این هم یک نمونه که البته میتونه پارامتر های ورودی هر نوعی باشد و همینطور مقدار بازگشتی


void test()
{
}
void test(int v1)
{
}
void test(int v1, int v2)
{
}

bestirani2
چهارشنبه 29 دی 1389, 00:11 صبح
برای این کار تو c# باید از params استفاده کنید
که میتونه از 0 تا هر چند تا ورودی رو دریافت کند

mehdi.mousavi
چهارشنبه 29 دی 1389, 01:14 صبح
سلام برای تعریف تابع و یا پرو سیجری که بتواند متغیر های اختیاری داشته باشد چه کار باید کرد؟ مثل کلمه optional در vb

سلام.
برای اینکار می تونید بدین شیوه عمل کنید:


private void MyFunction(int myParam = 5)
{
//whatever
}تابع فوق رو حالا میتونید بدین شکل فراخوانی کنید:


MyFunction();
MyFunction(10);خط اول، چون به پارامتر مقدار ندادم، مقدار 5 رو به خودش میگیره، اما خط دوم، myParam برابر 10 خواهد بود. دقت کنید که این قابلیت در C# 4.0 به زبان اضافه شد...

موفق باشید.

پاورقی: من نمیدونم Optional در VB چی هست و چطور کار میکنه، اما ممکنه پاسخ قبلی (یعنی استفاده از params) پاسخ سوال شما باشه. در هر حال، به پارامترهایی که در فوق به اونها اشاره کردم، Optional Parameter میگن.

georgiaro
چهارشنبه 29 دی 1389, 02:08 صبح
پاسخ mehdi.mousavi همون حالت default یا پیش فرضه که اگه ورودی تابع خالی باشه مقدار پیش فرض به جای مقدار ورودی قرار میگیره ولی استفاده از params برای اینه که تعداد متغیر های ورودی مشخص نیست مثلا یه تابع که چند تا عدد میگیره و ماکزیمم رو برمیگردونه توی این حالت باید از params استفاده کنی چون مشخص نیست ورودی یک عدده یا n تا.
امیدوارم کمک کرده باشه.

bestirani2
چهارشنبه 29 دی 1389, 12:08 عصر
وقتی یک ورودی رو Optional میگیریم تو وی بی، اون متغیر میتونه توسط کاربر وارد بشه یا نشه و در صورتی که وارد نشه مقدار پیش فرض خودمون استفاده میشه
حالا وقتی از params استفاده کنید کافیه به تعداد ورودی Optional، متغیر محلی تعریف کنید و سپس در صورتی که مقداری در params بود در اون متغیر های محلی بریزید و اگر نبود حالت پیش فرض خودتون رو قرار بدید
البته تو نسخه 2010 به بعد امکان دیگری هم قرار داده شده که شما میتوانید مانند پی اچ پی یا سی بدین صورت عمل کنید

public void abcd(int b, int a = 4)
{

}که در این حالت a متغیر Optional هست.

ali.rezaei7
چهارشنبه 29 دی 1389, 12:47 عصر
درود. استفاده از params زماني مناسبه كه بخواهيم يه سري ورودي هاي مشخص و با تعداد نا معلوم به تابع ارسال كنيم. ولي اگه هدفمون اين هست كه پارامترامون ثابت باشه و بين اونا چند پارامتر اختياري داشته باشيم، بهتر هست از مقدار دهي پيشفرض استفاده كنيم.فقط نكات زير رو هم در مورد پارامترهاي با مقدار پيشفرض رعايت كن.



اين آرگومانها بايد در انتها تعريف بشه.
اگه مي خواي كه بين پارامترهاي اختياري، فقط به يكي از اونا مقدار بدي، و اون پارامتر اولين پارمتر اختياري نيست، در اين صورت بايد نام پارامتر رو همرا با علامت ':' تايپ كني و مقابل اون مقدا رو بنويسي.

cardano7
چهارشنبه 29 دی 1389, 13:19 عصر
اگر منظور چیزی شبیه تابع printf هست، نمی دونم میشه یا نه. نهایتش اینه که از Array استفاده بشه.

mehdi.mousavi
چهارشنبه 29 دی 1389, 13:47 عصر
اگر منظور چیزی شبیه تابع printf هست، نمی دونم میشه یا نه.

بله، میشه. به این کد دقت کنید:



public void MyPrintF(string fmt, params object[] parameters)
{
foreach (object parameter in parameters)
{
}
}
این تابع رو میتونید بدین اشکال فراخوانی کنید:


MyPrintF("%d", 12, "test", 45.4F, "whateverParam");
MyPrintF("%x", "new");
MyPrintF("firstParam"); همونطوریکه می بینید، هیچ محدودیتی در تعداد و نوع پارامترها وجود نداره (گفتم نوع پارامترها، چون آرایه مربوطه object array هستش). شما میتونید آرایه ای از Data Type مورد نظرتون رو به اون پاس کنید. از پارامتر دوم به بعد، کلیه مقادیری که به تابع پاس میکنم در آرایه parameters قرار میگیره...

موفق باشید.

پاورقی: params در C#، معادل ... در C++ هستش.

bestirani2
چهارشنبه 29 دی 1389, 17:47 عصر
این که خیلی برنامه ها از قبل هست و هنوز در 2005 هست
و اکثراً کسانی هم که یاد گرفتند در محیط 2008 در حال حاضر کار میکنند
که در این صورت Optional Parameter و خیلی از ویژگی جدید دیگر مثل استفاده از اشاره گر ها در این نسخه ها کار نمی کنند
یک حالت سازگاری با نسخه های قبل هم بعض وقت ها نیاز هست
واسه همین من ترجیح میدهم از همون params این کار رو به نوعی شبیه سازی کنم که در نسخه های قبل هم بتونیم اجرا کنیم