حرفه Prompt Engineering یکی از مهارتهای کلیدی برای بهرهبرداری از قدرت مدلهای زبانی Generative یا ژنراتیو است. این مدلها با استفاده از شبکههای عصبی عمیق و روشهای یادگیری ماشینی قادر هستند به صورت خودکار متنهای متنوع و معنادار تولید کنند. اما چطور میشه با این مدلها ارتباط برقرار کرد و ازشون خروجیهای مورد نظرمون رو گرفت؟ جواب این سوال در Prompt Engineering نهفته است.
به طور کلی Prompt Engineering هنر پرسیدن سوال مناسب برای گرفتن بهترین خروجی از یک مدل زبانی ژنراتیو است. با استفاده از Prompt Engineering میتونیم با استفاده از زبان طبیعی با مدلهای زبانی ارتباط برقرار کنیم و ازشون خروجیهای متنی یا تصویری بگیریم. این خروجیها میتونن در حوزههای مختلفی مثل تولید محتوا، ترجمه، خلاصهسازی، تحلیل احساسات، تشخیص تصاویر، و غیره کاربرد داشته باشند.
در این مقاله قصد داریم به شما نشان بدیم که چطور میتونید Prompt Engineering رو به عنوان یک ابزار قدرتمند برای استفاده از مدلهای زبانی ژنراتیو به کار بگیرید. ما انواع مختلف Prompt رو معرفی میکنیم و نحوهی استفاده از هر کدوم رو با مثال نشون میدیم. همچنین بهترین شیوهها و راهبردهای Prompt Engineering رو با شما در میان میگذاریم و به چالشها و فرصتهایی که در این زمینه وجود داره اشاره میکنیم. امیدواریم این مقاله برای شما مفید و جذاب باشه.
مفهوم Prompt یک سوال یا یک درخواست است که به یک مدل زبانی ژنراتیو داده میشود تا از آن یک خروجی متنی یا تصویری بسازد. انواع مختلفی از Prompt وجود دارند که بسته به نوع و هدف مدل و خروجی مورد نظر میتوان از آنها استفاده کرد. در این بخش به معرفی چهار نوع اصلی از Prompt میپردازیم:
Direct Prompting: این نوع از Prompt سادهترین و مستقیمترین روش برای ارتباط با مدلهای زبانی است. در این روش، فقط یک سوال یا یک جمله به مدل داده میشود و مدل سعی میکند به آن پاسخ دهد یا آن را تکمیل کند. مثلا میتوان از مدل خواست که یک جمله را با یک کلمه تمام کند یا یک تعریف را بیان کند. مثال:
تکمیل جمله: ایران یک کشور در قاره ... است.
تعریف: Prompt Engineering چیست؟
Prompting with Examples: این نوع از Prompt شبیه به آموزش مدل با مثال است. در این روش، چند مثال از ورودی و خروجی مورد نظر به مدل داده میشود و سپس یک ورودی جدید به مدل داده میشود تا خروجی متناسب با آن را تولید کند. این روش میتواند برای انجام کارهایی مثل ترجمه، خلاصهسازی، تبدیل سبک، و غیره مفید باشد. مثال:
ترجمه:
انگلیسی: Hello, how are you؟
فارسی: سلام، حال شما چطور است؟
انگلیسی: I am fine, thank you.
فارسی: من خوبم، ممنون.
انگلیسی: What is your name؟
Chain-of-Thought Prompting: این نوع از Prompt برای تولید متنهای طولانی و پیوسته مثل داستان، مقاله، شعر، و غیره مناسب است. در این روش، به مدل یک موضوع یا یک شروع داده میشود و مدل باید متن را با ادامهدادن افکار و ایدههای مرتبط با آن تولید کند. مثال:
داستان: شروع داستان: یک روز صبح، مهدی با صدای زنگ گوشیش بیدار شد. وقتی گوشی را برداشت، صدایی که شنید، او را شوکه کرد. صدای ...
مقاله: موضوع مقاله: اثرات مثبت Prompt Engineering بر روی یادگیری ماشینی. مقاله باید شامل مقدمه، بدنه، و نتیجهگیری باشد. مقدمه: در سالهای اخیر، مدلهای زبانی ژنراتیو با استفاده از شبکههای عصبی عمیق و روشهای یادگیری ماشینی قدرتمند شدهاند و میتوانند متنهای متنوع و معنادار تولید کنند. اما چطور میتوان از این مدلها به بهترین نحو استفاده کرد و خروجیهای مورد نظر را از آنها گرفت؟ در این مقاله قصد داریم نشان بدهیم که Prompt Engineering یکی از راههای موثر برای ارتباط با مدلهای زبانی است و چگونه میتوان با استفاده از آن یادگیری ماشینی را بهبود بخشید. ...
Role Prompting: این نوع از Prompt برای ایجاد محاوره و گفتگو با مدل مناسب است. در این روش، به مدل یک نقش یا یک شخصیت داده میشود و مدل باید با توجه به آن نقش یا شخصیت به سوالات و پیامهای کاربر پاسخ دهد. مثال:
نقش: یک مشاور تحصیلی
کاربر: سلام، من میخوام برای ادامهی تحصیل به خارج از کشور برم. چه کشورها و دانشگاههایی رو پیشنهاد میکنید؟
مدل: سلام، من یک مشاور تحصیلی هستم و میتونم کمکت کنم. برای انتخاب کشور و دانشگاه باید چند عامل رو در نظر بگیری مثل رشتهی تحصیلی، هزینهها، شرایط ویزا، فرهنگ و زبان، و غیره. بهتره اول از خودت بپرسی که چه چیزهایی برای تو مهم هستند و بر اساس اون یک لیست از کشورها و دانشگاههای مورد علاقهات بسازی. بعد میتونی از منتورها، استادها، دوستان، یا سایتهای معتبر اطلاعات بیشتری در مورد اونها بگیری و مقایسه کنی. اگر نیاز به راهنمایی بیشتر داشتی، من در خدمتم.
Prompt Engineering یک فن هنری است که نیاز به تمرین و تجربه دارد. هرچه بیشتر با مدلهای زبانی کار کنیم و Prompt های مختلف رو امتحان کنیم، مهارتمون در این زمینه بیشتر میشه. اما برای نوشتن Prompt های موثر و کارآمد، برخی از نکات و توصیههایی وجود داره که میتونه به ما کمک کنه. در این بخش به برخی از این نکات اشاره میکنیم:
ساختارمند بودن: یکی از راههایی که میتونه به مدل کمک کنه تا Prompt رو بهتر درک کنه و خروجی مناسبتری تولید کنه، اینه که Prompt رو به صورت ساختارمند و قابل فهم بنویسیم. مثلا میتونیم از علائم نگارشی مثل نقطه، ویرگول، دونقطه، پرانتز، و غیره استفاده کنیم تا جملات و بخشهای مختلف Prompt رو از هم جدا کنیم. همچنین میتونیم از عنوانها، شمارهگذاری، و لیستها استفاده کنیم تا Prompt رو به بخشهای کوچکتر و مرتبتر تقسیم کنیم. این کار باعث میشه مدل بتونه Prompt رو بهتر تحلیل کنه و خروجی رو با توجه به ساختار Prompt تنظیم کنه.
محدود بودن: یکی از چالشهایی که مدلهای زبانی با آن روبرو هستند، اینه که ممکنه خروجیهایی تولید کنند که با Prompt مطابقت ندارند یا از حدود مورد نظر خارج میشوند. برای جلوگیری از این مشکل، میتونیم از محدودیتهایی استفاده کنیم تا مدل رو راهنمایی کنیم که چه نوع و چه مقدار خروجی باید تولید کنه. مثلا میتونیم از عباراتی مثل «با حداکثر ۵۰۰ کلمه» یا «به صورت شعر» یا «با استفاده از فقط حروف الفبای فارسی» استفاده کنیم تا مدل رو محدود کنیم. مثال:
Prompt با محدودیت: تولید یک داستان کوتاه در مورد یک سفر فضایی با حداکثر ۵۰۰ کلمه.
Prompt بدون محدودیت: تولید یک داستان در مورد یک سفر فضایی.
خلاقانه بودن: یکی از راههایی که میتونه به مدل کمک کنه تا Prompt رو بهتر فهمیده و خروجی جذابتری تولید کنه، اینه که Prompt رو به صورت خلاقانه و جالب بنویسیم. مثلا میتونیم از سوالات باز، مقایسهها، تصاویر، مثالها، و غیره استفاده کنیم تا مدل رو به چالش بکشیم و ازش خروجیهایی بگیریم که از حد انتظارمون بیشتر باشه. مثال:
Prompt خلاقانه: تولید یک شعر در مورد این تصویر (بارگذاری تصویر برای مدل زبانی)
Prompt عادی: تولید یک شعر در مورد غروب خورشید.
Prompt Engineering یکی از مهارتهای کلیدی برای بهرهبرداری از قدرت مدلهای زبانی ژنراتیو است. در این مقاله با انواع مختلف Prompt آشنا شدیم و نحوهی استفاده از هر کدوم رو با مثال نشون دادیم. همچنین به برخی از بهترین شیوهها و راهبردهای Prompt Engineering اشاره کردیم و چند نکته برای نوشتن Promptهای ساختارمند، محدود، و خلاقانه رو با شما در میان گذاشتیم. امیدواریم این مقاله برای شما مفید و جذاب بوده باشه و بتونید از Prompt Engineering به عنوان یک ابزار قدرتمند برای استفاده از مدلهای زبانی به کار ببرید.
همچنین Prompt Engineering یک زمینهی پویا و در حال رشد است که همچنان چالشها و فرصتهای زیادی در پیش روی آن است. ما توصیه میکنیم که برای ارتقای مهارتتون در این زمینه، با مدلهای زبانی مختلف آزمایش کنید و Promptهای متنوع و جالب رو امتحان کنید. همچنین میتونید از منابع و مقالات معتبر و بهروز در این زمینه استفاده کنید و از تجربیات و نظرات دیگران بهره ببرید. ما امیدواریم که Prompt Engineering برای شما یک فن هنری و لذتبخش باشه و به شما کمک کنه تا از مدلهای زبانی بهترین نتایج رو بگیرید.
برای درک مفاهیم بیشتر و یادگیری عمیق به آموزش برنامه نویسی دوره آموزشی سی شارپ که دارای سرفصل های اصلی دوره مقدماتی سی شارپ و دوره پیشرفته سی شارپ را که در قالب یک مجموعه جامع ارائه شده اند مراجعه کنید. در کنار این دوره می توانید برای تقویت دانش بانک اطلاعاتی ، به دوره آموزش SQL Server نیز مراجعه کنید.
برنامهنویسی غیرهمزمان یکی از مفاهیم مهم و پرکاربرد در توسعه نرمافزار است. برنامهنویسی غیرهمزمان به معنای این است که برنامه میتواند بدون انتظار برای پایان یافتن یک عملیات، به اجرای عملیات دیگر ادامه دهد. این روش به برنامه امکان میدهد که به صورت همزمان چندین کار را انجام دهد و منابع سیستم را بهینهتر استفاده کند. برنامهنویسی غیرهمزمان به ویژه در مواردی که برنامه باید با منابع خارجی مانند فایل، شبکه، دیتابیس و غیره ارتباط برقرار کند، بسیار مفید است. زیرا در این موارد برنامه ممکن است برای دریافت پاسخ از منبع خارجی مدت زمان زیادی صرف کند و در این حالت اگر برنامه به صورت همزمان اجرا شود، میتواند منابع سیستم را برای انجام کارهای دیگر استفاده کند و به کاربر تجربه بهتری ارائه دهد.
برای پیادهسازی برنامهنویسی غیرهمزمان در زبان C#، دو روش اصلی وجود دارد: استفاده از Thread ها و استفاده از کلمات کلیدی Async و Await. بو صورت ساده، Thread ها واحدهای کوچک از کد هستند که میتوانند به صورت موازی و مستقل از هم اجرا شوند. در مقابل، Async و Await کلمات کلیدی هستند که به برنامهنویس امکان میدهند که به راحتی برنامهنویسی غیرهمزمان را با استفاده از Task ها پیادهسازی کند. Task ها شبیه به Thread ها هستند اما با این تفاوت که مدیریت و هماهنگی آنها توسط کتابخانههای زبان C# انجام میشود.
در این مقاله قصد داریم تفاوت این دو روش را بررسی کنیم و نشان دهیم که در چه مواردی از هر یک از آنها استفاده کنیم. برای این منظور ابتدا تعریف و ویژگیهای Thread ها و Async و Await را شرح میدهیم و سپس نقاط تمایز اصلی بین آنها را مورد بحث قرار میدهیم. در نهایت نتیجهگیری و توصیههایی برای انتخاب روش مناسب برای برنامهنویسی غیرهمزمان ارائه میکنیم.
Thread ها یا ریسمانها واحدهای کوچک از کد هستند که میتوانند به صورت موازی و مستقل از هم اجرا شوند. Thread ها به برنامه امکان میدهند که چندین کار را به صورت همزمان انجام دهد و منابع سیستم را بهتر استفاده کند. برای مثال، اگر برنامهای داریم که باید همزمان با کاربر ارتباط برقرار کند و محتویات یک فایل را بخواند، میتوانیم از دو Thread مجزا برای انجام این دو کار استفاده کنیم. در این صورت برنامه نیازی ندارد که برای خواندن فایل از کاربر منتظر بماند و یا برای پاسخ به کاربر از خواندن فایل صرف نظر کند.
برای استفاده از Thread ها در زبان C#، میتوانیم از کلاسها و روشهای موجود در فضای نام System.Threading استفاده کنیم. این فضای نام شامل کلاس Thread است که نماینده یک Thread در برنامه است. برای ایجاد یک Thread جدید، میتوانیم یک شیء از کلاس Thread با پاس دادن یک شیء از نوع Delegate به سازنده آن ایجاد کنیم. Delegate یک شیء است که به یک متد اشاره میکند و مشخص میکند که Thread باید چه متدی را اجرا کند. برای شروع اجرای Thread، میتوانیم از متد Start شیء Thread استفاده کنیم. برای متوقف کردن اجرای Thread، میتوانیم از متد Abort شیء Thread استفاده کنیم. همچنین جهت انتظار برای پایان یافتن یک Thread، میتوانیم از متد Join شیء Thread استفاده کنیم. برای مثال، کد زیر یک Thread جدید ایجاد میکند که متد PrintNumbers را اجرا میکند:
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
Thread t = new Thread(new ThreadStart(PrintNumbers));
t.Start();
t.Join();
Console.WriteLine("End of application.");
}
static void PrintNumbers()
{
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
}
}
خروجی این برنامه به شکل زیر است:
1
2
3
4
5
6
7
8
9
10
End of application!
استفاده از Thread ها مزایایی مانند افزایش کارایی و بهبود تجربه کاربر را دارد. اما همچنین چالشهایی مانند مدیریت و هماهنگی Thread ها، رفع خطاها و ایجاد امنیت را نیز به همراه دارد. برای حل این چالشها، میتوانیم از ابزارهایی مانند Lock، Monitor، Mutex، Semaphore، AutoResetEvent و ManualResetEvent استفاده کنیم. این ابزارها به ما کمک میکنند که دسترسی به منابع مشترک بین Thread ها را کنترل کنیم و از بروز تداخل و ناهماهنگی جلوگیری کنیم. در بخش بعدی، میتوانید با کلمات کلیدی Async و Await و نحوه استفاده از آنها برای برنامهنویسی غیرهمزمان آشنا شوید.
Async و Await کلمات کلیدی هستند که در زبان C# از نسخه 5 به بعد اضافه شدهاند. این کلمات کلیدی به برنامهنویس امکان میدهند که به راحتی برنامهنویسی غیرهمزمان را با استفاده از Task ها پیادهسازی کند. Task ها شبیه به Thread ها هستند اما با این تفاوت که مدیریت و هماهنگی آنها توسط کتابخانههای زبان C# انجام میشود. Task ها به ما امکان میدهند که یک عملیات غیرهمزمان را به صورت یک شیء مدیریت کنیم و بتوانیم به آن ارجاع دهیم، از وضعیت آن باخبر شویم و از آن نتیجه بگیریم.
برای استفاده از Async و Await در زبان C#، میتوانیم از کلاسها و روشهای موجود در فضای نام System.Threading.Tasks استفاده کنیم. این فضای نام شامل کلاس Task است که نماینده یک Task در برنامه است. برای ایجاد یک Task جدید، میتوانیم از متد Run شیء Task استفاده کنیم. این متد یک شیء از نوع Delegate میگیرد و یک شیء از نوع Task برمیگرداند. برای اجرای یک Task، میتوانیم از کلمه کلیدی Async در تعریف یک متد استفاده کنیم. این کلمه کلیدی به ما امکان میدهد که یک متد را به صورت غیرهمزمان تعریف کنیم و از کلمه کلیدی Await در بدنه آن استفاده کنیم. کلمه کلیدی Await به ما امکان میدهد که برای یک Task منتظر بمانیم و نتیجه آن را دریافت کنیم. برای مثال، کد زیر یک Task جدید ایجاد میکند که متد PrintNumbersAsync را اجرا میکند:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// ایجاد یک Task جدید با استفاده از متد Run
Task t = Task.Run(PrintNumbersAsync);
await t;
Console.WriteLine("End of application!");
}
static async Task PrintNumbersAsync()
{
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
// انتظار برای یک ثانیه
await Task.Delay(1000);
}
}
}
خروجی این برنامه به شکل زیر است:
1
2
3
4
5
6
7
8
9
10
End of application!
استفاده از Async و Await مزایایی مانند سادهسازی برنامهنویسی غیرهمزمان، افزایش خوانایی و نگهداری کد و بهبود عملکرد برنامه را دارد. اما همچنین مواردی وجود دارد که استفاده از Async و Await کافی نیست و نیاز به استفاده از Thread ها داریم. برای مثال، اگر برنامهای داریم که باید یک عملیات سنگین و محاسباتی را انجام دهد که زمان زیادی طول میکشد و منابع سیستم را به شدت مصرف میکند، میتوانیم از یک Thread جدید برای انجام این عملیات استفاده کنیم تا از بلوک شدن Thread اصلی برنامه جلوگیری کنیم. در بخش بعدی، میتوانید با تفاوت اصلی بین Thread ها و Async و Await آشنا شوید.
Thread ها و Async/Await دو روش مختلف برای پیادهسازی برنامهنویسی غیرهمزمان در زبان C# هستند. این دو روش در برخی جنبهها شباهت و در برخی جنبهها تفاوت دارند. در این بخش قصد داریم نقاط تمایز اصلی بین این دو روش را مورد بحث قرار دهیم. برای این منظور از جدول زیر برای مقایسه این دو روش استفاده میکنیم:
Async/Await | Thread | |
نحوه ایجاد | با استفاده از کلاس Thread و پاس دادن یک Delegate به سازنده آن | با استفاده از کلمه کلیدی Async در تعریف یک متد و استفاده از متد Run شیء Task |
نحوه اجرا | با استفاده از متد Start شیء Thread | با استفاده از کلمه کلیدی Await در بدنه یک متد غیرهمزمان |
نحوه متوقف کردن | با استفاده از متد Abort شیء Thread | با استفاده از متد Cancel شیء CancellationTokenSource |
نحوه انتظار | با استفاده از متد Join شیء Thread | با استفاده از متد Join شیء Thread | با استفاده از کلمه کلیدی Await در بدنه یک متد غیرهمزمان |
نحوه دریافت نتیجه | با استفاده از خصوصیت Result شیء Thread | با استفاده از خصوصیت Result شیء Task |
مزایا | امکان اجرای عملیات سنگین و محاسباتی که زمان زیادی طول میکشند و منابع سیستم را به شدت مصرف میکنند | امکان اجرای عملیات سبک و وابسته به منابع خارجی مانند فایل، شبکه، دیتابیس و غیره که زمان زیادی طول میکشند اما منابع سیستم را به شدت مصرف نمیکنند |
معایب | امکان بروز تداخل و ناهماهنگی بین Thread ها و نیاز به استفاده از ابزارهای هماهنگسازی | امکان بلوک شدن Thread اصلی برنامه اگر عملیات سنگین و محاسباتی را به صورت غیرهمزمان اجرا کنیم |
از جدول بالا میتوانیم ببینیم که Thread ها و Async/Await در برخی جنبهها مانند نحوه ایجاد، اجرا، متوقف کردن، انتظار و دریافت نتیجه تفاوت دارند. این تفاوتها باعث میشوند که در چه مواردی از هر یک از این روشها استفاده کنیم. به طور کلی، میتوان گفت که اگر برنامهای داریم که باید یک عملیات سنگین و محاسباتی را انجام دهد که زمان زیادی طول میکشد و منابع سیستم را به شدت مصرف میکند، میتوانیم از یک Thread جدید برای انجام این عملیات استفاده کنیم تا از بلوک شدن Thread اصلی برنامه جلوگیری کنیم. اما اگر برنامهای داریم که باید یک عملیات سبک و وابسته به منابع خارجی مانند فایل، شبکه، دیتابیس و غیره را انجام دهد که زمان زیادی طول میکشد اما منابع سیستم را به شدت مصرف نمیکند، میتوانیم از کلمات کلیدی Async و Await برای انجام این عملیات استفاده کنیم تا از سادهسازی برنامهنویسی غیرهمزمان بهره ببریم.
در نتیجه، میتوان گفت که Thread ها و Async/Await دو روش مختلف برای پیادهسازی برنامهنویسی غیرهمزمان در زبان C# هستند که در برخی جنبهها شباهت و در برخی جنبهها تفاوت دارند. این تفاوتها باعث میشوند که در چه مواردی از هر یک از این روشها استفاده کنیم. در بخش بعدی، میتوانید با نتیجهگیری و توصیههایی برای انتخاب روش مناسب برای برنامهنویسی غیرهمزمان آشنا شوید.
در این مقاله با مفهوم برنامهنویسی غیرهمزمان و اهمیت آن در توسعه نرمافزار آشنا شدیم. همچنین با دو روش اصلی برای پیادهسازی برنامهنویسی غیرهمزمان در زبان C# یعنی استفاده از Thread ها و استفاده از کلمات کلیدی Async و Await آشنا شدیم. برای هر یک از این روشها تعریف، ویژگی، مزایا و معایب را شرح دادیم و سپس نقاط تمایز اصلی بین آنها را مورد بحث قرار دادیم. در نهایت به این نتیجه رسیدیم که این دو روش در برخی موارد با هم قابل جایگزینی هستند و در برخی موارد نیاز به استفاده از هر یک به طور مجزا دارند. برای انتخاب روش مناسب برای برنامهنویسی غیرهمزمان، باید به نوع عملیاتی که میخواهیم انجام دهیم، زمانی که آن عملیات طول میکشد، منابع سیستمی که آن عملیات مصرف میکند و همچنین سادگی و خوانایی کدی که مینویسیم توجه کنیم. به طور کلی، میتوان گفت که اگر برنامهای داریم که باید یک عملیات سنگین و محاسباتی را انجام دهد که زمان زیادی طول میکشد و منابع سیستم را به شدت مصرف میکند، میتوانیم از یک Thread جدید برای انجام این عملیات استفاده کنیم تا از بلوک شدن Thread اصلی برنامه جلوگیری کنیم. اما اگر برنامهای داریم که باید یک عملیات سبک و وابسته به منابع خارجی مانند فایل، شبکه، دیتابیس و غیره را انجام دهد که زمان زیادی طول میکشد اما منابع سیستم را به شدت مصرف نمیکند، میتوانیم از کلمات کلیدی Async و Await برای انجام این عملیات استفاده کنیم تا از سادهسازی برنامهنویسی غیرهمزمان بهره ببریم.
در این مطلب قصد داریم با ویژگی های جدید سی شارپ 12 که به تازگی توسط شرکت مایکروسافت و تیم دات نت ارائه شده آشنا شویم. زبان سی شارپ از زمان ارائه، دائم در حال تکامل بوده و با هر نسخه ای که ارائه می شود قابلیت های جدیدی به زبان سی شارپ اضافه می شود.
سرفصل
در ابندا این قابلیت تنها در رکورد ها قابل استفاده بود و در سی شارپ 12 این قابلیت به class ها و struct ها نیز اضافه شده است. بوسیله این قابلیت می توان پارامترهای سازنده را در مقابل نام کلاس تعریف کرده و از آن در کل بخش های کلاس استفاده کرد. در ادامه نحوه تعریف سازنده های اولیه را مشاهده می کنید:
var p = new Person("Hossein", "Ahmadi");
public class Person(string firstname, string lastname)
{
public string Firstname { get; set; } = firstname;
public string Lastname { get; set; } = lastname;
}
این قابلیت روش جدیدی برای مقدار دهی اولیه مجموعه ها را در اختیار برنامه نویسان قرار می دهد. در زیر نمونه هایی از این قابلیت را مشاهده می کنید:
int[] numbers = [1,2,3,4];
List<string> names = ["Hossein","Mehdi", "Mohammad","Ali"];
برای تعریف آرایه های jagged به صورت زیر می توان از این قابلیت استفاده کرد:
int[][] jagged1 = [[1, 2, 3], [4, 5, 6]];
int[] row0 = [1,2,3,4,5];
int[] row1 = [6,7,8,9,0];
int[][] jagged2 = [row0, row1];
یکی از ویژگی های جالب Collection Expressions استفاده از Spread Operator است، این قابلیت به شما این اجازه را می دهد تا مقادیر یک آرایه را داخل یک آرایه دیگر درج کنید، یعنی هر مقدار به صورت جداگانه در یک خانه قرار میگیرد:
int[] row0 = [1,2,3,4,5];
int[] row1 = [6,7,8,9,0];
int[] merged = [..row0, ..row1];
بوسیله این قابلیت پارامترهای یک متد با کلمه کلیدی ref readonly می توانند تعریف شوند:
void SampleMethod(ref readonly int param)
{
// do something
}
برای یادگیری آموزش برنامه نویسی می توانید از دوره های وب سایت های مختلفی استفاده کنید:که کاملترین آموزش زبان سی شارپ صفر تا صد به همراه پشتیبانی دارند مراجعه کنید.
یک سری نکات برای ارسال مقدار به متدهایی که پارامترهای ref readonly دارن باید رعایت بشه:
در ادامه نمونه کدهایی برای فراخوانی متد تعریف شده در بالا مشاهده می کنید:
int num = 12;
SampleMethod(12); // compiler will generate warning
SampleMethod(ref num); // OK
SampleMethod(num); // compiler will generate warning
SampleMethod(in num); // OK
بوسیله این قابلیت امکان مشخص کردن مقدار پیش برای پارامترهای عبارت های lambda وجود خواهد داشت. به عنوان مثال:
var divideExp = (int num1, int num2 = 2) => num1 / num2;
var r1 = divideExp(12);
var r2 = divideExp(12, 3);
همانطور که مشاهده می کنید برای پارامتر num2 مقدار پیش فرض 2 مشخص شده و در زمان فراخوانی، می توان رای num2 مقداری مشخص نکرد.
بوسیله این قابلیت می توان با alias را برای هر نوع داده ای تعریف کرد. در نسخه های قبلی می بایست حتماً یک نوع داده تعریف شده و بر اساس آن alias را تعریف کرد. اما در سی شارپ 12 این قابلیت به صورت زیر نیز قابل انجام است:
using MyType = (int x, int y);
var mt = new MyType(1,2);
بوسیله این قابلیت امکان تعریف یک آرایه با طول ثابت بوسیله تعریف struct ها وجود دارد. افزودن این قابلیت برای افزایش Performance برنامه بوده و به گفته خود مایکروسافت کاربرد این قابلیت برای تیم توسعه دهنده دات نت و همچنین برنامه نویس هایی است که کتابخانه هایی را برای استفاده سایر برنامه نویس ها توسعه می دهند. برای تعریف inline arrays از attribute ای با نام InlineArray استفاده می شود که فضای نام System.Runtime.CompilerServices قرار دارد. نحوه استفاده از این قابلیت به صورت زیر است:
[System.Runtime.CompilerServices.InlineArray(12)]
struct Names
{
private int _element0;
}
var names = new Names();
names[0] = 12;
Console.WriteLine(names[0]);
زمان استفاده از این قابلیت توجه داشته باشید که استفاده از attribute ذکر شده تنها بر روی struct ها مجاز بوده و همچنین داخل نوع داده تعریف شده، حتماً باید یک فیلد تعریف شود.
با قرار دادن این Attribute بر روی یک class یا struct یا method، زمان استفاده از آن یک اخطار نمایش داده می شود که این نوع داده یا متد تعریف شده آزمایشی می باشد. تنها در صورتی امکان استفاده از آن وجود خواهد داشت که داخل کد اخطار غیر فعال شد. نمونه کد زیر نحوه استفاده از این قابلیت را نمایش می دهد:
#pragma warning disable C_MyClass_M_DoSomething // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
c.DoSomething();
#pragma warning restore C_MyClass_M_DoSomething // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
class MyClass
{
[Experimental("C_MyClass_M_DoSomething")]
public void DoSomething()
{
}
}
یکی از تخصص هایی که این روزها نیاز اولیه متخصصین حوزه فناوری اطلاعات به حساب می آید ، یادگیری برنامه نویسی است. آموزش برنامه نویسی و شروع یادگیری زبان های برنامه نویسی از جمله دغدغه های اصلی تازه واردهای حوزه تخصصی فناوری اطلاعات است. همیشه سوالاتی مثل اینکه با چه زبانی برنامه نویسی را شروع کنیم یا بهترین زبان برای شروع برنامه نویسی چیست یا اینکه ترتیب یادگیری دوره های برنامه نویسی برای ورود به بازار کار کدام است ، از جمله مهمترین سوالات چالشی برای شروع آموزش برنامه نویسی است.
امروز و در این مقاله ما می خواهیم به شما پاسخ سوالات متداولی که برای شروع یک حوزه تخصصی از برنامه نویسی ، نیاز دارید که بدانید را با هم مرور می کنیم . دقت کنید که قبل از شروع این مقاله حتما به این موضوع توجه کنید که ما برنامه نویسی را به به حوزه های مختلفی تقسیم بندی می کنیم که به ترتیب : برنامه نویسی دسکتاپ ، برنامه نویسی وب و برنامه نویسی موبایل از مهمترین گرایش های تخصصی برنامه نویسی هستند که به شدت مورد نیاز بازار کار هستند. پس تا انتهای مقاله با ما باشید.
برای شروع برنامه نویسی ابتدا باید بدانید برای چه چیزی می خواهید برنامه نویس شوید و هدفتان چیست؟ سپس یک زبان برنامه نویسی برای شروع یادگیری را انتخاب می کنید. در دوره های آموزش برنامه نویسی آنلاین شرکت می کنید. آموزشهای ویدیویی متنوع را یاد می گیرید ، کتاب می خواهید و از ابزارهای کدنویسی سریع برای افزایش خلاقیت و سرعت کدنویسی استفاده می کنید و در نهایت با نگاه کردن به نمونه کدهای برنامه نویسی سایر برنامه نویس ها شروع یا انجام پروژه های برنامه نویسی می کنید.
هر وب سایت که به آن مراجعه می کنید با یک زبان برنامه نویسی نوشته شده است. این زبان برنامه نویسی انواع و اقسام مختلفی دارد که مهمترین زبان های برنامه نویسی وب به ترتیب زبان PHP و زبان ASP.NET هستند. سایر زبان های برنامه نویسی وب به محبوبیت زبانهای برنامه نویسی پی اچ پی و ای اس پی دات نت نیستند.
یکی از مزایای برنامه نویسی وب ، امکان کار کردن بصورت فریلنسری و دورکاری است که به همین دلیل یکی از محبوب ترین زبان های برنامه نویسی وب به حساب می آیند. برای شروع یادگیری و آموزش PHP ( پی اچ پی ) می توانید به این لینک مراجعه کنید.
برنامه نویسی دسکتاپ به معنی برنامه نویسی برای سیستم عامل هایی است که بصورت رومیزی استفاده می شوند. برای مثال نوشتن برنامه ای که روی کامپیوتر شخصی شما ( PC ) یا لپتاپ با هر نوع سیستم عاملی اعم از ویندوز یا لینوکس یا مکینتاش اجرا می شود ، یک برنامه دسکتاپی به حساب می آیند که بازار کار بسیار خوبی دارد.
از مهمترین زبان های برنامه نویسی که بصورت تخصصی و به بهترین شکل به شما کمک می کنند می توانیم به زبان برنامه نویسی جاوا و زبان برنامه نویسی سی شارپ اشاره کنیم. برای شروع یادگیری آموزش جاوا می توانید به این لینک مراجعه کنید.
به آموزش برنامه نویسی خوش آمدید. در این مطلب قصد داریم مفاهیمی که شما برای شروع آموزش برنامه نویسی به آن نیاز دارید را در اختیار شما قرار دهیم و شما را با مهمترین مفاهیمی که در طول یادگیری یک زبان برنامه نویسی با آن برخورد می کنید آشنا کنیم. سعی کردم این مطلب را با زبان ساده و به صورت گام به گام به همراه مثال های متعدد آماده کنم تا دوستان با کمترین میزان آشنایی با دنیای برنامه بتونن آموزش برنامه نویسی رو شروع کنن. برای مطالعه این مطلب شما نیاز به پیش نیاز خاصی ندارید.
برنامه نویسی دنیای زیباییه و وقتی زیبا تر میشه که آموزش برنامه نویسی رو شروع کنی! وقتی واردش بشی دیگه نمیتونی ازش دل بکنی. این جمله رو با تمام وجودم میگم و بهش اعتقاد دارم. با اینکه سال هاست کار برنامه نویسی انجام میدم و مدت زیادی رو درگیر آموزش برنامه نویسی بودم، اما هنوز هم برام تازگی داره. خیلی از افراد رو میبینم که تصمیم دارن کار برنامه نویسی رو شروع کنن، اما نمیدونن از کجا باید این کار و انجام بدن و یک جورایی سردرگم هستن و یا اصلاً نمیدونن که از کجا باید منابع آموزش برنامه نویسی رو انتخاب کنن!
قبل از هر چیز باید پایه های اون کار رو محکم ایجاد کنید. آموزش برنامه نویسی هم از این قاعده مستثنی نیست. واژه ها و مفاهیم زیادی وجود داره که یادگیری اون ها جزو اصول اولیه یادگیری یک زبان برنامه نویسی هست و البته یادگیری این موضوعات چیز پیچیده ای نیست. به همین خاطر تصمیم گرفتم یکسری مطالب در مورد مفاهیم برنامه نویسی و مباحث مرتبط با آموزش برنامه نویسی رو در وب سایت توسینسو قرار بدم.
این مطلب نه در مورد زبان برنامه نویسی خاصی هست و نه قصد داره تکنیک های برنامه نویسی رو به شما آموزش بده، تنها قصدم از نوشتن این مطلب اینه که دوستانی که قصد ورود به دنیای برنامه نویسی دارن و به دنبال منبع مناسبی برای آموزش برنامه نویسی هستن رو با یکسری مفاهیم و موضوعات که پیش نیاز شروع برنامه نویسی هست آشنا کنم.
برای خواندن این مطلب، تنها کافیست که با شیوه روش کردن یک کامپیوتر، کار کردن با موس و کیبورد و البته اجرا کردن یک برنامه کامپیوتری مانند Media Player که برای پخش آهنگ و فیلم از آن استفاده می کنید آشنا باشید، همین و نه هیچ چیز بیشتر! برای شروع بهتر است که با سه مفهوم اصلی یعنی برنامه کامپیوتری، برنامه نویس و زبان برنامه نویسی آشنا شویم.
قبل از شروع به آموزش برنامه نویسی باید با یکسری مفاهیم ا ولیه آشنا بشیم! در قدم اول به سراغ تعریف برنامه کامپیوتری رفتیم. اگر بخواهیم یک تعریف ساده از یک برنامه کامپیوتری داشته باشیم می توانیم اینگونه بگوییم که یک برنامه کامپیوتری مجموعه ای از دستورالعل ها است که با اجرای آن توسط کامپیوتر یک یا چند نیاز کاربربرطرف می شود. برای مثال، برنامه ای مانند Media Player، برنامه ایست که از آن برای پخش موسیقی و فیلم استفاده می شود.
هر کامپیوتری، برای اینکه قابل استفاده باشد نیاز به برنامه دارد. سیستم عامل یک برنامه کامپیوتری است که بعد اجرا محیطی را برای کاربر فراهم می کند که سایر برنامه ها را اجرا کند. امروزه حجم زیادی از برنامه های کامپیوتری وجود دارند که هر یک بر اساس یک یا چند نیاز مشخص ایجاد شده اند.
در ادامه مباحث آموزش برنامه نویسی به بررسی انواع زبان های برنامه نویسی میپردازیم. همانطور که در قسمت قبلی گفتیم، برنامه نویس به کمک زبان برنامه نویسی می تواند دستورالعمل های مرتبط با یک برنامه کامپیوتری را بنویسد.
بیشتر بخوانید: معرفی انواع زبان های برنامه نویسی و کاربردهایشان
اما یک برنامه نویس زمانی که قصد ورود به دنیای برنامه نویسی را دارد با گزینه های زیادی روبرو است، زبان های برنامه نویسی مختلف که هر یک در یک زمینه کارآیی دارند و برنامه نویس می بایست بر اساس علایق خود، زبان برنامه نویسی مناسب را انتخاب کند. همانطور که گفتیم، در این سری مطالب قصد نداریم در مورد یک زبان خاص صحبت کنیم، اما به صورت کلی می توان زبان های برنامه نویسی را به انواع زیر تقسیم کرد: