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

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 3 از 3

نام تاپيک: جای عبارت Lambda?

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض جای عبارت Lambda?

    سلام،
    وقت بخیر
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    جسارتا جای این عبارت n=>n%2==1
    اگر بخواهیم از delegate استفاده کنیم با با تابع معمولی بنویسیم باید چی کار کنیم؟
    آخه ما n رو هم تعریف نکردیم.میخواهم ببینم دقیقا چه اتفاقی داره پشت پرده میافته؟
    اصلا یک همچین چیزی رو بخواهیم خودمون بنویسیم(منظورم where )هست باید چه کنیم؟

  2. #2
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Nov 2011
    پست ها
    335

    پيش فرض

    اگر بخواهیم از delegate استفاده کنیم
    ....

    عبارات lambda هم به صورت دلگیت استفاده میشند منتها نه به صورت روش قدیمی که ابتدا با کلمه delegate یک امضایی از یک متد تعریف می کدیم و بعد متد موردنظر رو بهش می دادیم.
    در کد شما در تابع where برای ایجاد دلگیت برای عبارت lambda از نوع داده Func استفاده می کنیم با این امضاء:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در عبارت بالا پارامتر اولی از نوع int مقدار ورودی است که میشه همون مقدار n در عبارت lambda ، و پارمتر دومی از نوع bool نوع بازگشتی تابع (عبارت lambda) است. بدنه تابع هم عبارت n % 2 == 1 هستش و درصورتی که باقیمانده یک بشه خروجی true و درغیر اینصورت false است.

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

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

    n => n % 2 == 1
    همیشه قبل از <= پارامترها رو تعریف می کنیم.

    در کل گه بخوام معادل این عبارت lambda رو در قالب تابع معمولی نشون بدم :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    اصلا یک همچین چیزی رو بخواهیم خودمون بنویسیم(منظورم where )هست باید چه کنیم؟
    خارج از حوصله این بحثه اما یه سری مباحث وجود داره مثل جنریک ها ، توابع بدون نام و .... که باید اینها رو یاد بکیرید تا بتونید چنین چیزی رو که خیلی هم راحت هست رو پیاده سازی کنید.

    یه سری لینک می زارم حتما مطالعه کنید:
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  3. 2 کاربر از Xeoc بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    تاپیکتان را قبلا دیدم و سوالاتان را ذخیره کردم و سرفرصت جوابی دهم...
    حالا دوستمان Xeoc لطف کرده و جواب دادند که صحیح هم است ولی چون قبلاً تایپ کردم گفتم دیگر حیف است!


    اگر بخواهیم از delegate استفاده کنیم با با تابع معمولی بنویسیم باید چی کار کنیم؟
    میخواهم ببینم دقیقا چه اتفاقی داره پشت پرده میافته؟
    کامپایل عبارت n => n % 2 == 1 شما را به یک تابع تبدیل میکند:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در واقع این دو کد زیر کاملاً برابر هستند
    بخش از کد اولی را کامپایلر جای ما تایپ میکند!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    آخه ما n رو هم تعریف نکردیم
    ضمنی از جنس int تعریف شده
    اگر تعریف نشده بود شما نمیتوانستید باقیمانده اش را محاسبه کنید

    در واقع در حال حاضر تابع where یک delegate از نوع <Func<int,bool می خواهد ...
    یعنی یک تابع که ورودی int و خروجی bool دارد، پس ورودی و خروجی عبارت Lambda مورد نیاز مشخص است؟! اینطور نیست؟! فقط کافیست کدش را بنویسید.

    اصلا یک همچین چیزی رو بخواهیم خودمون بنویسیم(منظورم where )هست باید چه کنیم؟
    هیچ جای تردید و ابهام و پنهان کاری و خط ویژه ای وجود ندارد...
    منظورم آن است که خودتان هم بسادگی میتوانید این توابع یا توابع مشابه را بنویسید و مایکروسافت برای نوشتن این توابع هیچ خط ویژه ای برای خود قائل نشده
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشید.
    Last edited by _H2_; 06-01-2014 at 23:30.

  5. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •