اگر در برنامه نويسي كامپيوتر تازه كار هستيد و مطمئن نيستيد كه كدام زبان برنامه نويسي را ابتدا ياد بگيريد، ممكن است كمي سردرگم شويد. هر چند برنامه نويسان باتجربه توصيه محكمي دارند! شما ميتوانيد سيرِ حركت برنامه نويسي خود را با دوره هاي آموزش C# ، يكي از قديميترين، قابل اطمينان ترين و رايج ترين زبان هاي برنامه نويسي كامپيوتر آغاز كنيد.
امروزه سي شارپ جزو محبوب ترين زبان هاي برنامه نويسي دنياست. سي شارپ توسط مايكروسافت در چارچوب طرح دات نت توسعه داده شد و بعداً به عنوان يك استاندارد توسط ECMA تأييد شد. زبان برنامه نويسي سي شارپ (C#) يك زبان برنامه نويسي همه منظوره و مبتني بر OOPS است. تيم توسعه C# در سال 2002 توسط “Anders Hejlsberg” رهبري شد.
زبان برنامه نويسي C# يكي از زبان هايي است كه براي زيرساخت زبان مشترك (CLI) طراحي شده است. اولين نسخه سي شارپ 1.0 با دات نت فريمورك 1.0 و ويژوال استوديو 2002 است.
نسخه ها
سي شارپ نسخه هاي زيادي دارد. هر نسخه از C# يك به روز رساني براي زبان برنامه نويسي ايجاد كرده است كه به تنوع استفاده از زبان ادامه ميدهد. اولين نسخه سي شارپ به عنوان يك زبان برنامه نويسي عمومي چند منظوره ساده طراحي شد – و در مقايسه با آنچه امروز در سي شارپ به نظر ميرسد، نسخه اول تقريباً به طور كلي ساده بود.
ميتوانيد اولين نسخه سي شارپ را مانند يك ساندويچ بدون كاهو يا گوجه فرنگي در نظر بگيريد.
ساير به روز رساني هاي سي شارپ چطور؟
نسخه 2
نسخه دوم سي شارپ در سال 2005 منتشر شد و شروع به دور شدن از شي گرا بودن عمومي كرد. اين بهروزرساني شامل توانايي برنامهنويسان براي استفاده از تكراركنندهها بود، كه اساساً به برنامهنويسان اجازه ميدهد در يك زمان به چشم انداز بزرگتري از دادهها نگاه كنند.
نسخه 3
نسخه سوم سي شارپ در سال 2007 منتشر شد و پر از ويژگيهاي جديد بود، با شاخه بندي، روشهاي توسعه و هر دو عبارت query و lambda. با اين نسخه از سي شارپ بود كه واقعاً از جاوا جدا شد و سي شارپ به يك زبان برنامه نويسي پيشرفته تبديل شد.
نسخه 4
نسخه چهارم سي شارپ در سال 2010 منتشر شد و انواع interlop تعبيه شده و كلمات كليدي پويا را معرفي كرد كه به مسائل ميپرداخت و به سي شارپ زيبايي خاصي ميبخشيد كه ساير زبان هاي برنامه نويسي در آن زمان فاقد آن بودند.
نسخه 5
نسخه پنجم سي شارپ در سال 2012 با تمركز بر برنامه نويسي ناهمزمان منتشر شد. به روز رساني asych و await براي C# به عنوان ويژگي هاي زباني در نظر گرفته مي شود كه راحتي اجراي كدهاي عملياتي طولاني را افزايش ميدهد.
نسخه 6
ششمين نسخه سي شارپ در سال 2013 منتشر شد و تمركز ويژه اي بر تبديل سي شارپ به يك زبان برنامه نويسي سازنده داشت. اين نسخه فيلترها و مقداردهي اوليه را به همراه يك زبان دستور عمومي تميزتر معرفي كرد كه ورود كد را حتي از قبل آسانتر كرد.
نسخه 7
نسخه نهايي و فعلي سي شارپ در سال 2019 منتشر شد. در كنار ويژگيهاي انقلابي كه كدها را پاكتر و آسانتر ميكند، اين نسخه از سي شارپ دامنه زبان برنامهنويسي را نيز گسترش داد، زيرا اين نسخه ميتواند با هسته داتنت و سيستمعاملها استفاده شود. براي نيازهاي ابري و ساير نيازهاي ذخيره سازي
هنگامي كه در مورد زمان ايجاد C# صحبت مي كنيم، همچنين بايد در مورد دليل ايجاد C# نيز صحبت كنيم. و جداي از اينكه C# پاسخ مايكروسافت به جاوا است، سي شارپ نيز با هدف ايجاد يك زبان برنامه نويسي چند منظوره و عمومي ساخته شده است. يا به عبارت ديگر يك زبان برنامه نويسي شي گرا است.
شي گرايي در C#
بياييد مروري بياندازيم بر برنامه نويسي شي گرا (OOPs) در سي شارپ ، يعني مفاهيم OOPs در سي شارپ را مورد بحث قرار دهيم. برنامه نويسي شي گرا كه معمولاً به عنوان OOP شناخته ميشود يك تكنيك است نه فناوري. اين بدان معناست كه هيچ نحو يا API ارائه نميدهد، در عوض پيشنهادهايي براي طراحي و توسعه اشيا در زبان هاي برنامه نويسي ارائه ميدهد.
برنامه نويسي شي گرا يك مدل برنامه نويسي است كه بر اساس اصولي كار مي كند كه به جاي عمل يا منطق، حول اشيا مي چرخد. اين به كاربران اجازه مي دهد تا اشياء را بر اساس نياز ايجاد كنند و سپس روش هايي را براي كار بر روي آن اشياء ايجاد كنند.
به عنوان بخشي از اين مقاله، قصد داريم مفهوم OOPs زير را در سي شارپ پوشش دهيم.
بياييد Object Oriented Programming يا برنامه نويسي شيگرا يعني مفاهيم OOPs را با استفاده از C#درك كنيم. برنامه نويسي شي گرا (OOPs) در سي شارپ يك رويكرد طراحي است كه در آن به جاي توابع يا روش ها، به اشياء دنياي واقعي فكر ميكنيم. برخلاف زبان برنامه نويسي رويه اي، در اينجا در اوپس، برنامه ها به جاي عمل و منطق، حول اشيا و داده ها سازماندهي ميشوند.
براي درك بهتر اين موضوع به نمودار زير نگاهي بيندازيد:
قابليت استفاده مجدد:
براي پرداختن به قابليت استفاده مجدد، برنامه نويسي شي گرا چيزي به نام كلاس ها و اشياء را ارائه مي دهد. بنابراين، به جاي كپي پيست كردن چندباره همان كد در مكانهاي مختلف، كاري كه ميتوانيد در اينجا انجام دهيد اين است كه يك كلاس ايجاد كنيد و يك نمونه از كلاس بسازيد كه شي ناميده ميشود، و هر زمان كه بخواهيد از آنها استفاده مجدد كنيد.
توسعه پذيري:
فرض كنيد يك تابع داريد و مي خواهيد آن را با برخي ويژگي هاي جديد كه با برنامه نويسي كاربردي امكان پذير نبود، گسترش دهيد. شما بايد يك تابع كاملا جديد ايجاد كنيد و سپس كل تابع را هر چيزي كه ميخواهيد تغيير دهيد. در OOP ها، اين مشكل با استفاده از مفاهيمي به نام وراثت، تجميع و تركيب برطرف ميشود.
سادگي:
از آنجايي كه ما در برنامه نويسي تابعي توسعه پذيري و قابليت استفاده مجدد نداريم، در نهايت با تعداد زيادي توابع و كدهاي پراكنده زيادي مواجه ميشويم. در C# بعنوان يك زبان برنامه نويسي شي گرا، اين مشكل با استفاده از مفاهيمي به نام Abstraction، Encapsulation و Polymorphism حل ميشود.
قابليت نگهداري:
از آنجايي كه OOP ها به قابليت استفاده مجدد، توسعه پذيري و سادگي ميپردازند، كد قابل نگهداري خوب و كد تميز وجود دارد كه قابليت نگهداري برنامه را افزايش ميدهد.
اصول OOPs يا مفاهيم OOPs در سي شارپ چيست؟
OOPs، 4 اصل را ارائه ميدهد:
كپسوله سازي
وراثت
پلي مورفيسم
انتزاع – مفهوم – برداشت
بياييد تعاريف اصل OOPs را در اين مقاله درك كنيم.
نگاهي بر كاربردهاي سي شارپ
Microsoft Docs: C# روي فريم ورك.Net كار ميكند، يك PL سطح O-O كاملاً ايمن و زيبا را دارا است. براي دستيابي به برنامه اي ايمن و قوي عالي است. اين زبان به توسعهدهنده خود اجازه ميدهد تا برنامهاي را در آن ايجاد كند.
Windows
XML
Client-server
Database
Wide variety of tool availability
C# Edge براي همه
گزارش ها مي گويند كه از بين ده شمارش معكوس برتر PL، C# در جايگاه پنجم (از سال 2018) قرار دارد. بياييد دريابيم كه چرا استفاده از سي شارپ داراي پايگاه كاربري بسيار بزرگي است، چرا در بين متدولوژي هاي توسعه مختلف و مقبوليت آن ترجيح داده ميشود.
- اصالت
سي شارپ يك زبان شي گرا اصيل تر كه به كاربرانش امكان ميدهد يك برنامه مدولار با كدهاي قابل استفاده مجدد ايجاد كنند. اين رفتار عملكردي در C++ وجود ندارد. شبكه اي در سيستم ايجاد نميكند و آنها را با يك قابليت داخلي كارآمد براي پاك كردن تمام زباله هاي موجود حذف ميكند. پشتيبانگيري حافظه (در بلوكها براي مشخص كردن لبه آن بر روي زبانهاي ديگر) يك مزيت حياتي در C# دارد. تأثير آن (بر روي جامعه توسعهدهندگان در سراسر جهان) به دليل طبقهاي غني از كتابخانهها و عملكردهاي موجود است، كه تركيب در ساختن تاريخ موفق است.
- رتبه
اين مزيت اصلي استفاده از سي شارپ اين است كه روي CLR اجرا ميشود، اين امر ادغام و استانداردسازي سي شارپ را آسانتر ميكند. كتابخانه هاي كلاس NET Framework گسترده هستند و از ويژگي هاي خاص بسيار بهتر از جاوا پشتيباني ميكنند. استفاده از سي شارپ داراي ساختارهاي مختلف زباني است كه دوباره به جاوا امتياز ميدهد. ساخت زبان به معناي اشاره گر و عملگر تابع است. آخرين نسخه در كاربردهاي فناوري سي شارپ ويژگيهايي مانند روشهاي توسعه، لامبدا و عبارت پرس و جو را فعال كرده است.
- نه فقط براي مايكروسافت
فقط مايكروسافت؟ نه ديگر… پروژه ECMA و MONO شواهدي هستند كه به نفع برنامه هاي كاربردي سي شارپ هستند. ECMA يك انتشار استاندارد بوده است. MONO يك انتخاب توسعه برنامه چند پلتفرمي براي توسعه دهندگان است.
- نوع ايمني
بياييد شاهد يكي از تفاوت هاي ريشه اي سي شارپ باشيم. دستكاري حافظه، به معناي تخصيص و آزادسازي حافظه براي يك برنامه خاص كه در حال حاضر روي آن كار ميكند. اين براي توسعه دهندگاني كه بايد كدهايي را براي انجام فعاليت هاي كار دستكاري حافظه بنويسند مفيد و در زمان صرفه جويي خواهد شد. سي شارپ اين كار را به صورت خودكار براي شما انجام ميدهد. اين رفتار ميتواند در نشت حافظه و دسترسي به حافظه مفيد باشد. بنابراين، به بحثي كه براي Type-safety گذاشتيم، برگرديم، يك كلمه كليدي ناامن ميتواند براي علامت گذاري يك بلوك كد استفاده شود. اين به راحتي بررسي ايمني نوع Framework را دور ميزند. اين رفتار سي شارپ يك برتري واضح و دقيق نسبت به VB.NET ايجاد ميكند.
- يادگيري
در مقايسه با ساير زبان هاي برنامه نويسي (PL) آموزش C # قطعاً يك ضربه فوري خواهد بود. يادگيري مقايسه با ديگران آسان است. يك چيز مطمئن است كه هر PL زمان كافي براي يادگيري و به همان اندازه زمان كافي براي تسلط بر آن را دارد، اما نكته نگران كننده پيچيدگي زبان براي يادگيري است. استفاده از سي شارپ از نظر نحوي شبيه جاوا است. به سناريوي زير توجه كنيد
در جاوا و سپس در سي شارپ
- جستجوي يكپارچه زبان (LINQ)
اين در سال 2007 به C # معرفي شد. هدف اين بود كه به جامعه توسعهدهنده در حال رشد در جستجوي دادهها از منابع مختلف كمك كند. نيازي به نگراني در مورد نحو (مخصوص پايگاه داده ها) نيست. ارائه دهنده LINQ (يك جزء از LINQ) به تبديل پرس و جو به قالبي كه به راحتي قابل درك و خواندن باشد كمك ميكند. به عنوان مثال: اين مثال برخي از سردرگميها را برطرف ميكند و از كاربردهاي عملي C# پشتيباني ميكند – اگر آقاي A (توسعهدهنده) بخواهد داده خاصي را از پايگاه داده SQL پرس و جو كند، ارائهدهنده LINQ به راحتي پرس و جوي LINQ را به T SQL تبديل ميكند و به پايگاه داده كمك ميكند تا آن را درك كند.
- كليدواژه هايي كه زبان هاي ديگر فاقد آن هستند
كلمه كليدي as در سي شارپ سعي ميكند يك شي را به يك نوع ايمن ارسال كند و اگر نتواند آن را null برمي گرداند.
بازده – بازده و بازگشتي در سي شارپ براي انجام تكرارهاي سفارشي و حالت بدون كلاس اضافي واضح و بدون نياز به ايجاد مجموعه موقت استفاده ميشود.
Var – Var يك نوع ضمني است. به طور كلي توسط كامپايلر تعيين ميشود و از نظر عملكردي معادل است. Var براي انواع ناشناس كه معمولاً در جستارهاي LINQ استفاده ميشوند موافق است.
بررسي شده – در سي شارپ، ممكن است از كلمه كليدي علامت زده براي فعال كردن صريحاً بررسي سرريز براي عبارات نوع انتگرال استفاده كنيم. اگر مقدار حاصل از برخي عبارت خارج از محدوده نوع مقصد باشد، ميتوانيم از checked براي وادار كردن زمان اجرا براي پرتاب يك OverflowException استفاده كنيم. اين مفيد است زيرا در حالي كه عبارات ثابت به طور پيش فرض داراي بررسي سرريز در زمان كامپايل هستند، عبارات غير ثابت اين كار را ندارند.
دركل چيزي كه درمورد كاربرد سي شارپ بدست ميآيد نتيجه محور است، زيرا بحث طولاني در مورد عوامل مختلف در مورد پايگاه كاربر گسترده C# ما را به يك نقطه نتيجه ميرساند. اين يك بحث بي پايان است كه هميشه در جامعه توسعه دهندگان جريان دارد. ما تاكنون شاهد گستره پلتفرم گسترده C# بوده ايم. چگونه از يك برچسب زبان Microsoft PL خارج شده است. اين يك موقعيت ترجيحي در رتبه بندي جهاني است. چرا استفاده از سي شارپ را بر زبان هاي ديگر ترجيح مي دهيم؟ چون داراي مزاياي طول كد و وضوح كد است. اين تصميم ما را ميآورد كه به ما درك درستي از زبان و پلتفرم مناسب براي توسعه محصول اساسي را ميدهد. هيچ زباني خوب يا بد نيست، همه اينها به نياز و هدف دقيق بستگي دارد. موارد بي شماري وجود دارد كه بايد قبل از شروع توسعه در نظر بگيريد، فيس بوك (مثال بسيار رايج) با PHP (نوشته شده در PHP) گير كرده است و هيچ گزينه اي براي انتخاب ندارند. حتي اگر بخواهند به ASP.NET منتقل شوند يا سوئيچ كنند، به سادگي نميتوانند.
ارتباط بين C# و .NET
ما اين موضوع را گسترده ميدانيم اما نتوانستم يك نماي كلي اوليه پيدا كنم. ما ميخواهيم بدانيم دقيقاً چه رابطه اي بين اين دو وجود دارد. ميدانيم كه براي كار با VS 2010 به .NET SP2 نياز داريم، بنابراين رايانه مشتري بايد همان نسخه NET را داشته باشد.
دات نت يك فريمورك است. معني آن اين است كه پلت فرم دات نت شامل كتابخانه هايي از كد و معماري موجود است كه تمامي برنامه هاي كاربردي كه از آن استفاده ميكنند از آن ساخته ميشوند. بنابراين به جاي ريختن يك پايه جديد براي هر خانه، در حال حاضر با يك پايه محكم شروع خواهيد كرد كه در طول زمان كامل شده و بهبود يافته است. علاوه بر يك پايه اوليه، اين چارچوب به عنوان نوعي جعبه ابزار از كدهاي موجود عمل ميكند كه شما را از اختراع مجدد چرخ هر زمان كه به چيزهاي خاصي نياز داريد، نجات ميدهد.
براي مثال، winforms پايهاي است كه از طريق آن ميتوان برنامههاي كاربردي ويندوز با يك رابط كاربري ابتدايي را به سادگي با رفتن به file > new project ساخت. اگر اين كتابخانه كدهاي موجود براي پشتيباني از شما نبود، بايد خودتان با GDI براي ايجاد فرمهاي ويندوز و رابط كاربري ارتباط برقرار كنيد.
سي شارپ به سادگي يك زبان برنامه نويسي است. يكي به طور خاص با در نظر گرفتن دات نت نوشته شده است. در واقع، بيشتر چارچوب دات نت به زبان سي شارپ (اگر نه همه آن) نوشته شده است. نحو آن به سادگي پيشرفت بعدي زبان C است، بنابراين انتقال از C++ به C# نبايد خيلي سخت باشد. اين يك تغيير پارادايم با چيزهاي زيادي است، اما حداقل نحو اغلب آشنا است. هر زبان دات نت معمولاً با ساير زبان هاي دات نت سازگار است. به عنوان مثال، ما ميتوانيم يك كتابخانه كلاس در ويژوال بيسيك بنويسم، و شما ميتوانيد از آن كتابخانه كامپايل شده در برنامه سي شارپ خود استفاده كنيد.
.NET بعنوان يك فريمورك
از آنجا كه دات نت يك فريمورك است، كدي كه در آن ارجاع مي دهيد در برنامه شما كامپايل نمي شود، بلكه ارجاع به كد در فريم ورك تنها چيزي است كه كامپايل مي شود. اين بدان معناست كه كلاينت هايي كه برنامه شما را اجرا مي كنند بايد چارچوب دات نت را نيز داشته باشند، البته يك نسخه حذف شده. آنها به همه ابزارهاي توسعه اي كه شما نياز داريد نياز ندارند، بنابراين دانلود فريمورك دات نت آنها كمي كوچكتر است. كلاينت هايي كه ويندوز ويستا/7 دارند نيازي به نگراني ندارند. آن را با سيستم عامل آنها گنجانده شده است. فقط كاربران خاصي كه XP را اجرا مي كنند حتي بايد نگران بارگيري فريمورك باشند و اكثر برنامه ها به دقت نياز را تشخيص مي دهند و به كاربر نهايي اطلاع مي دهند كه آن را دانلود كند.
تمام نسخه هاي ويژوال استوديو به سادگي ابزارهايي هستند كه به شما در ساخت برنامه ها و استفاده بهتر از چارچوب دات نت كمك مي كنند. ما هرگز برنامه نويسي به هيچ زبان دات نت را بدون حداقل نسخه اكسپرس (رايگان) ويژوال استوديو توصيه نمي كنيم. Intellisense به تنهايي ارزشش را دارد. همانطور كه گفته شد، قطعاً امكان كدگذاري چيزي در دات نت بدون Visual Studio IDE وجود دارد. ميتوانيد همين الان دفترچه يادداشت را باز كنيد و يك برنامه C# بنويسيد، آن را با كامپايلر رايگان كامپايل كنيد و اجرا كنيد. در حالي كه ويژوال استوديو 2010 بسيار شگفت انگيز است و از پلتفرم جديد WPF براي اجرا استفاده ميكند، 2008 به همان خوبي به شما خدمت خواهد كرد. 2010 براي دات نت 4 بهينه شده است اما در مورد هدف قرار دادن نسخه هاي قبلي دات نت نيز به خوبي كار ميكند.
آموزش C#براي مبتديان Unity
سي شارپ ( C# ) به عنوان زبان اصلي براي موتور بازي سازي Unity بوده است. 3D Unity ، يكي از دو گزينه اصلي براي توسعه AR/VR (به غير از Unreal) است. Engine by Epic Games)، اگر ميخواهند برنامههاي كاربردي با پيچيدگي (فيزيك، انيميشن، طراحي الگوها، سايهزنها يا حتي جلوههاي صوتي) را در نظر بگيريد، به زبانآموزان AR/VR نياز دارد كه به آن دست پيدا كنند.
به احتمال زياد، شما براي ساخت برنامه هاي كاربردي براي AR و VR هيجان زده هستيد، اما از جستجو در يك زبان برنامه نويسي ميترسيد. هر كسي كه در حال ساخت بازيهاي يونيتي بوده است، قبلاً با سي شارپ آشنايي دارد. اما براي يك فرد غير فني، فيلمنامه يك منحني يادگيري تند ارائه ميكند. نگران نباشيد – با درك زبان، كار با موتور بازي يونيتي بسيار ساده تر ميشود.
اين راهنما يك ميانبر يا يك دوره تكميلي زبان برنامه نويسي سي شارپ است.
از طريق سي شارپ ميتوانيد اجزاي جديدي براي unity ايجاد كنيد يا اجزاي موجود را گسترش دهيد، نحوه عملكرد بازيتان را شكل دهيد، تعاملات بازيكنان، رفتارهاي دشمن، حركت اشياء و موارد ديگر را تعريف كنيد.
يادگيري سي شارپ براي Unity D3 چقدر طول ميكشد؟
اين پاسخ مي تواند بسيار متفاوت باشد، بسته به اينكه چه تجربه قبلي داريد و چقدر زمان براي مطالعه اختصاص مي دهيد، و مهمتر از همه اينكه «آموزش C#» به چه معناست. اگر قبلاً يك پيشينه فني داريد – براي مثال معناي كد يا تجربه قبلي توسعه نرم افزار را ميشناسيد، به خوبي در راه خواهيد بود. حتي طراحان گرافيكي كه اصول اوليه CSS و HTML (يا شايد حتي جاوا اسكريپت) را ميدانند، هنگام استفاده از C# سريعتر از افراد مبتدي هستند.
يادگيري نحوه برنامه نويسي يك چالش است، هر چند ارزشمند. پس از 6 ماه اختصاص حداقل 1 ساعت در روز، بسياري از مردم متوجه ميشوند كه ميتوانند پروژه هاي كوچك XR را با اطمينان ايجاد كنند. 6 ماه اول همه چيز در مورد ايجاد يك پايه قوي براي ساختن براي آينده است.
با درك مهارت برنامه نويسي C# ، نه تنها وارد توسعه AR/VR ميشويد، بلكه ميتوانيد بازي هاي دو بعدي (يا سه بعدي) خود را براي پلتفرم هاي مختلف بسازيد. شايد از خودتان بپرسيد بيشترين كاربرد براي طراحي بازي است؟ مشكلي نيست – اگر از Unity استفاده مي كنيد، در هر حال به C#نياز داريد.
جمع بندي
سي شارپ يكي از محبوب ترين زبان هاي برنامه نويسي است و ميتوان از آن براي موارد مختلفي از جمله برنامه هاي كاربردي موبايل، توسعه بازي و نرم افزارهاي سازماني استفاده كرد. آموزش #C درهاي زيادي را براي شما به عنوان يك توسعه دهنده باز ميكند. C# همه منظوره و شي گرا است كه توسط مايكروسافت در ابتكار .NET توسعه يافته است. سي شارپ يكي از زبانهاي زيرساخت زبان مشترك است. از نظر نحوي شباهت زيادي به جاوا دارد و براي كاربراني كه دانش C، C++ يا جاوا دارند، آسان است.
در اين مقاله سعي كرديم بررسي اجمالي برماهيت سي شارپ داشته و از نظر شي گراي آن را مورد بررسي قرار دهيم. ارتباط C# با .NET را بصورت مختصر توشيح دهيم. همچنين براي كساني كه علاقه مند به برنامه نويسي بازي هاي رايانه اي هستند، از تاثير C# بر روي Unity براي خوانندگان مطالبي را ارائه داديم.
چه نوع برنامه نویسی انتخاب کنم؟
کاملا مبتدی هستید و واقعا نمی دانید چه زبانی بهتر است؟ این موضوع کاملا شخصی ست اما پیشنهاد ما: