loading...

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

بازدید : 87
جمعه 3 اسفند 1403 زمان : 19:41

حرفه Prompt Engineering یکی از مهارت‌های کلیدی برای بهره‌برداری از قدرت مدل‌های زبانی Generative یا ژنراتیو است. این مدل‌ها با استفاده از شبکه‌های عصبی عمیق و روش‌های یادگیری ماشینی قادر هستند به صورت خودکار متن‌های متنوع و معنادار تولید کنند. اما چطور می‌شه با این مدل‌ها ارتباط برقرار کرد و ازشون خروجی‌های مورد نظرمون رو گرفت؟ جواب این سوال در Prompt Engineering نهفته است.

Prompt Engineering هنر طراحی ورودی‌های مناسب برای مدل‌های زبانی است تا بهترین پاسخ‌ها را دریافت کنیم. با تنظیم دقیق دستورات (Prompts)، می‌توان دقت و کیفیت خروجی را بهبود بخشید. این مهارت شامل تکنیک‌هایی مانند Few-shot learning و Chain-of-thought prompting است. در آموزش برنامه‌نویسی، یادگیری Prompt Engineering برای تعامل مؤثر با هوش مصنوعی بسیار کاربردی است.

به طور کلی Prompt Engineering هنر پرسیدن سوال مناسب برای گرفتن بهترین خروجی از یک مدل زبانی ژنراتیو است. با استفاده از Prompt Engineering می‌تونیم با استفاده از زبان طبیعی با مدل‌های زبانی ارتباط برقرار کنیم و ازشون خروجی‌های متنی یا تصویری بگیریم. این خروجی‌ها می‌تونن در حوزه‌های مختلفی مثل تولید محتوا، ترجمه، خلاصه‌سازی، تحلیل احساسات، تشخیص تصاویر، و غیره کاربرد داشته باشند.

در این مقاله قصد داریم به شما نشان بدیم که چطور می‌تونید Prompt Engineering رو به عنوان یک ابزار قدرتمند برای استفاده از مدل‌های زبانی ژنراتیو به کار بگیرید. ما انواع مختلف Prompt رو معرفی می‌کنیم و نحوه‌ی استفاده از هر کدوم رو با مثال نشون می‌دیم. همچنین بهترین شیوه‌ها و راهبردهای Prompt Engineering رو با شما در میان می‌گذاریم و به چالش‌ها و فرصت‌هایی که در این زمینه وجود داره اشاره می‌کنیم. امیدواریم این مقاله برای شما مفید و جذاب باشه.

انواع Prompt

مفهوم Prompt یک سوال یا یک درخواست است که به یک مدل زبانی ژنراتیو داده می‌شود تا از آن یک خروجی متنی یا تصویری بسازد. انواع مختلفی از Prompt وجود دارند که بسته به نوع و هدف مدل و خروجی مورد نظر می‌توان از آن‌ها استفاده کرد. در این بخش به معرفی چهار نوع اصلی از Prompt می‌پردازیم:

  1. Direct Prompting: این نوع از Prompt ساده‌ترین و مستقیم‌ترین روش برای ارتباط با مدل‌های زبانی است. در این روش، فقط یک سوال یا یک جمله به مدل داده می‌شود و مدل سعی می‌کند به آن پاسخ دهد یا آن را تکمیل کند. مثلا می‌توان از مدل خواست که یک جمله را با یک کلمه تمام کند یا یک تعریف را بیان کند. مثال:

    تکمیل جمله: ایران یک کشور در قاره ... است.

    تعریف: Prompt Engineering چیست؟

  2. Prompting with Examples: این نوع از Prompt شبیه به آموزش مدل با مثال است. در این روش، چند مثال از ورودی و خروجی مورد نظر به مدل داده می‌شود و سپس یک ورودی جدید به مدل داده می‌شود تا خروجی متناسب با آن را تولید کند. این روش می‌تواند برای انجام کارهایی مثل ترجمه، خلاصه‌سازی، تبدیل سبک، و غیره مفید باشد. مثال:
    ترجمه:
    انگلیسی: Hello, how are you؟
    فارسی: سلام، حال شما چطور است؟
    انگلیسی: I am fine, thank you.
    فارسی: من خوبم، ممنون.
    انگلیسی: What is your name؟

  3. Chain-of-Thought Prompting: این نوع از Prompt برای تولید متن‌های طولانی و پیوسته مثل داستان، مقاله، شعر، و غیره مناسب است. در این روش، به مدل یک موضوع یا یک شروع داده می‌شود و مدل باید متن را با ادامه‌دادن افکار و ایده‌های مرتبط با آن تولید کند. مثال:

    داستان: شروع داستان: یک روز صبح، مهدی با صدای زنگ گوشیش بیدار شد. وقتی گوشی را برداشت، صدایی که شنید، او را شوکه کرد. صدای ...

    مقاله: موضوع مقاله: اثرات مثبت Prompt Engineering بر روی یادگیری ماشینی. مقاله باید شامل مقدمه، بدنه، و نتیجه‌گیری باشد. مقدمه: در سال‌های اخیر، مدل‌های زبانی ژنراتیو با استفاده از شبکه‌های عصبی عمیق و روش‌های یادگیری ماشینی قدرتمند شده‌اند و می‌توانند متن‌های متنوع و معنادار تولید کنند. اما چطور می‌توان از این مدل‌ها به بهترین نحو استفاده کرد و خروجی‌های مورد نظر را از آن‌ها گرفت؟ در این مقاله قصد داریم نشان بدهیم که Prompt Engineering یکی از راه‌های موثر برای ارتباط با مدل‌های زبانی است و چگونه می‌توان با استفاده از آن یادگیری ماشینی را بهبود بخشید. ...

  4. Role Prompting: این نوع از Prompt برای ایجاد محاوره و گفتگو با مدل مناسب است. در این روش، به مدل یک نقش یا یک شخصیت داده می‌شود و مدل باید با توجه به آن نقش یا شخصیت به سوالات و پیام‌های کاربر پاسخ دهد. مثال:

    نقش: یک مشاور تحصیلی

    کاربر: سلام، من می‌خوام برای ادامه‌ی تحصیل به خارج از کشور برم. چه کشورها و دانشگاه‌هایی رو پیشنهاد می‌کنید؟

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

شیوه ها و راهبردهای مناسب Prompt Engineering:

Prompt Engineering یک فن هنری است که نیاز به تمرین و تجربه دارد. هرچه بیشتر با مدل‌های زبانی کار کنیم و Prompt های مختلف رو امتحان کنیم، مهارت‌مون در این زمینه بیشتر می‌شه. اما برای نوشتن Prompt های موثر و کارآمد، برخی از نکات و توصیه‌هایی وجود داره که می‌تونه به ما کمک کنه. در این بخش به برخی از این نکات اشاره می‌کنیم:

  1. ساختارمند بودن: یکی از راه‌هایی که می‌تونه به مدل کمک کنه تا Prompt رو بهتر درک کنه و خروجی مناسب‌تری تولید کنه، اینه که Prompt رو به صورت ساختارمند و قابل فهم بنویسیم. مثلا می‌تونیم از علائم نگارشی مثل نقطه، ویرگول، دونقطه، پرانتز، و غیره استفاده کنیم تا جملات و بخش‌های مختلف Prompt رو از هم جدا کنیم. همچنین می‌تونیم از عنوان‌ها، شماره‌گذاری، و لیست‌ها استفاده کنیم تا Prompt رو به بخش‌های کوچک‌تر و مرتب‌تر تقسیم کنیم. این کار باعث می‌شه مدل بتونه Prompt رو بهتر تحلیل کنه و خروجی رو با توجه به ساختار Prompt تنظیم کنه.

  2. محدود بودن: یکی از چالش‌هایی که مدل‌های زبانی با آن روبرو هستند، اینه که ممکنه خروجی‌هایی تولید کنند که با Prompt مطابقت ندارند یا از حدود مورد نظر خارج می‌شوند. برای جلوگیری از این مشکل، می‌تونیم از محدودیت‌هایی استفاده کنیم تا مدل رو راهنمایی کنیم که چه نوع و چه مقدار خروجی باید تولید کنه. مثلا می‌تونیم از عباراتی مثل «با حداکثر ۵۰۰ کلمه» یا «به صورت شعر» یا «با استفاده از فقط حروف الفبای فارسی» استفاده کنیم تا مدل رو محدود کنیم. مثال:

    Prompt با محدودیت: تولید یک داستان کوتاه در مورد یک سفر فضایی با حداکثر ۵۰۰ کلمه.

    Prompt بدون محدودیت: تولید یک داستان در مورد یک سفر فضایی.

  3. خلاقانه بودن: یکی از راه‌هایی که می‌تونه به مدل کمک کنه تا Prompt رو بهتر فهمیده و خروجی جذاب‌تری تولید کنه، اینه که Prompt رو به صورت خلاقانه و جالب بنویسیم. مثلا می‌تونیم از سوالات باز، مقایسه‌ها، تصاویر، مثال‌ها، و غیره استفاده کنیم تا مدل رو به چالش بکشیم و ازش خروجی‌هایی بگیریم که از حد انتظارمون بیشتر باشه. مثال:

    Prompt خلاقانه: تولید یک شعر در مورد این تصویر (بارگذاری تصویر برای مدل زبانی)

    Prompt عادی: تولید یک شعر در مورد غروب خورشید.

Prompt Engineering یکی از مهارت‌های کلیدی برای بهره‌برداری از قدرت مدل‌های زبانی ژنراتیو است. در این مقاله با انواع مختلف Prompt آشنا شدیم و نحوه‌ی استفاده از هر کدوم رو با مثال نشون دادیم. همچنین به برخی از بهترین شیوه‌ها و راهبردهای Prompt Engineering اشاره کردیم و چند نکته برای نوشتن Prompt‌های ساختارمند، محدود، و خلاقانه رو با شما در میان گذاشتیم. امیدواریم این مقاله برای شما مفید و جذاب بوده باشه و بتونید از Prompt Engineering به عنوان یک ابزار قدرتمند برای استفاده از مدل‌های زبانی به کار ببرید.

همچنین Prompt Engineering یک زمینه‌ی پویا و در حال رشد است که همچنان چالش‌ها و فرصت‌های زیادی در پیش روی آن است. ما توصیه می‌کنیم که برای ارتقای مهارت‌تون در این زمینه، با مدل‌های زبانی مختلف آزمایش کنید و Prompt‌های متنوع و جالب رو امتحان کنید. همچنین می‌تونید از منابع و مقالات معتبر و به‌روز در این زمینه استفاده کنید و از تجربیات و نظرات دیگران بهره ببرید. ما امیدواریم که Prompt Engineering برای شما یک فن هنری و لذت‌بخش باشه و به شما کمک کنه تا از مدل‌های زبانی بهترین نتایج رو بگیرید.

برای درک مفاهیم بیشتر و یادگیری عمیق به دوره آموزشی سی شارپ که دارای سرفصل های اصلی دوره مقدماتی سی شارپ و دوره پیشرفته سی شارپ را که در قالب یک مجموعه جامع ارائه شده اند مراجعه کنید. در کنار این دوره می توانید برای تقویت دانش بانک اطلاعاتی ، به دوره آموزش SQL Server نیز مراجعه کنید.

بازدید : 63
جمعه 3 اسفند 1403 زمان : 19:48

برنامه‌نویسی غیرهمزمان یکی از مفاهیم مهم و پرکاربرد در توسعه نرم‌افزار است. برنامه‌نویسی غیرهمزمان به معنای این است که برنامه می‌تواند بدون انتظار برای پایان یافتن یک عملیات، به اجرای عملیات دیگر ادامه دهد. این روش به برنامه امکان می‌دهد که به صورت همزمان چندین کار را انجام دهد و منابع سیستم را بهینه‌تر استفاده کند. برنامه‌نویسی غیرهمزمان به ویژه در مواردی که برنامه باید با منابع خارجی مانند فایل، شبکه، دیتابیس و غیره ارتباط برقرار کند، بسیار مفید است. زیرا در این موارد برنامه ممکن است برای دریافت پاسخ از منبع خارجی مدت زمان زیادی صرف کند و در این حالت اگر برنامه به صورت همزمان اجرا شود، می‌تواند منابع سیستم را برای انجام کارهای دیگر استفاده کند و به کاربر تجربه بهتری ارائه دهد.

در C#، استفاده از Thread و Async/Await دو روش برای مدیریت اجرای همزمان (Concurrency) هستند. Threadها منابع بیشتری مصرف می‌کنند و نیاز به مدیریت دستی دارند، در حالی که Async/Await بهینه‌تر است و از Thread Pool برای اجرای وظایف استفاده می‌کند. روش Async/Await اجرای کدهای غیرمسدودکننده (Non-Blocking) را امکان‌پذیر می‌سازد، در حالی که Threadها ممکن است باعث مصرف بالای CPU شوند. برای عملیات ورودی/خروجی (I/O Bound)، Async/Await گزینه بهتری است، اما برای پردازش‌های سنگین (CPU Bound)، Threadها عملکرد بهتری دارند.

در آموزش برنامه‌نویسی، شناخت تفاوت این دو روش به بهینه‌سازی عملکرد برنامه‌ها کمک می‌کند.

برای پیاده‌سازی برنامه‌نویسی غیرهمزمان در زبان 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

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

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 برای انجام این عملیات استفاده کنیم تا از ساده‌سازی برنامه‌نویسی غیرهمزمان بهره ببریم.

بازدید : 45
جمعه 3 اسفند 1403 زمان : 19:54

اگر در فتوشاپ گزینه‌ی ذخیره به‌صورت JPEG یا JPG را مشاهده نمی‌کنید، احتمالاً فایل شما در مد رنگی غیرسازگار مانند CMYK یا 16bit/32bit قرار دارد. برای حل مشکل، ابتدا از مسیر Image > Mode، مد رنگ را به RGB و 8bit تغییر دهید. سپس از File > Save As یا Export As استفاده کنید تا فرمت JPEG در دسترس باشد. همچنین، بررسی کنید که در تنظیمات خروجی، گزینه‌ی "Save a Copy" را امتحان کنید. در آموزش گرافیک، یادگیری این روش‌ها به شما کمک می‌کند تا بدون مشکل فایل‌های سازگار با وب و چاپ خروجی بگیرید.

برای رفع مشکل Save As در فتوشاپ کافیست این مراحل را انجام دهید. اگر در گزینه Save As در فتوشاپ امکان ذخیره کردن عکس با فرمت JPEG یا JPG یا سایر فرمت ها وجود ندارد ، به احتمال زیاد شما فتوشاپ خود را به آخرین نسخه به روز رسانی کرده این و قابلیت Legacy Save As آن غیرفعال شده است ، در این حالت تنها چند گزینه برای ذخیره فایل به عنوان تصویر وجود دارد که بسیار محدود است ، برای حل این مشکل به مسیر زیر در فتوشاپ بروید :

  • ابتدا وارد منوی Edit و Preferences شوید ، سپس وارد گزینه File Handling شوید ( مشابه تصویر زیر )

مطابق تصویر بالا تیک گزینه Enable Legacy "Save As" را بزنید و OK کنید ، خروجی های Save AS قدیمی و JPG را مجدد می توانید ببینید. در دوره آموزش فتوشاپ توسینسو می توانید بصورت حرفه ای ترفندها و نکات مهم فتوشاپ را به خوبی آموزش ببینید.

بازدید : 111
جمعه 3 اسفند 1403 زمان : 19:59

اولین دوره آموزش ساخت بازی با یونیتی Unity کدام است و از کجا شروع کنم ؟ | ساخت بازی اندروید | کلاس آموزش بازی سازی رایگان و فارسی خوب Pc و... مبتدی تا پیشرفته کدام است و از کجا باید تهیه و تماشا کنم ؟ یکی از ابتدایی ترین و نخستین سوالاتی که ذهن را برای ساخت بازی درگیر می کند ، تهیه یک آموزش خوب است . کدام آموزش می تواند به من کمک کند تا یک بازی ساز حرفه ای شوم . یونیتی چیست و به چه دردی می خورد و اصلا چرا باید یونیتی را یاد بگیریم ؟ آیا برنامه نویسی هم برای ساخت بازی مهم است و باید برنامه نویسی بلد باشم ؟ به سوالات شما در ادامه مطلب پاسخ داده شده است .

برای شروع یادگیری ساخت بازی، بهترین گزینه آشنایی با موتورهای بازی‌سازی مانند Unity یا Unreal Engine است. ابتدا باید مبانی برنامه‌نویسی (مثل C# برای Unity یا Blueprints در Unreal) را یاد بگیرید. سپس، یادگیری مدلسازی سه‌بعدی، طراحی مراحل و انیمیشن در نرم‌افزارهایی مانند Blender یا Photoshop به بهبود مهارت‌هایتان کمک می‌کند. پیشنهاد می‌شود از دوره‌های مقدماتی بازی‌سازی در پلتفرم‌هایی مانند Coursera، Udemy یا یوتیوب استفاده کنید. در آموزش گرافیک، یادگیری ساخت تکسچر، کار با نورپردازی و طراحی کاراکترها برای بازی‌سازی بسیار مهم است.

انجین بازی سازی یونیتی Unity چیست و چه کار هایی را می توان با آن انجام داد ؟

موتور بازی سازی یونیتی یا همان نرم افزار یونیتی ، یک برنامه است که بر روی کامپیوتر نصب می گردد و با آن می شود که انواع بازی ها را ساخت . هم بازی هایی که برای اندروید و کامپیوتر هستند هم بازی هایی که برای پلی استیشن و ایکس باکس نصب می شوند . یونیتی ، یکی از جدید ترین برنامه های ساخت بازی است که از سر تاسر دنیا ، طرفداران خود را دارد . اگر سوال دیگری درباره یونیتی و بازی سازی دارید ، در زیر همین مطلب پیام بگذارید .

اولین دوره آموزش ساخت بازی با یونیتی کدام است ؟

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

پس کدام دوره یونیتی را تهیه و نگاه کنیم ؟

اگر زبان انگلیسی یا فرانسوی شما خوب است ، بروید و از دانشگاه های آنها آموزش را با مبلغ تقریبا زیاد خریداری کنید و به صورت آموزش از راه دور ، تماشا کنید . اما اگر زبان فرانسوی شما زیاد خوب نیست یا به هر دلیلی سرمایه خرید آموزش های آنها را ندارید تا به دانشگاه های آنها وصل شوید و بازی سازی را یاد بگیرید ، می توانید از این دوره که همراه با مدرک است استفاده کنید . 5 ساعت از این آموزش کاملا رایگان است و ادامه آموزش را می توانید به صورت قسطی پرداخت کنید ! هر زمان که خواستید ! سوالات بیشتر شما دوستان درباره یونیتی و بازی سازی و برنامه نویسی برای ساخت بازی ، در مقاله زیر بررسی شده است . آموزش یونیتی به همراه جواب سوالات اولیه یونیتی در ضمن آموزش ساخت بازی ما ، دوره های سه بعدی تری دی مکس و دو بعدی و انیمیشن های هرکدام را نیز دارا است . آموزش ما ، دارای بخش هایی است که تا کنون در ایران تدریس نشده است . می توانید فعلا قسمت های رایگان دوره را ببینید تا متوجه شوید !

بازدید : 55
شنبه 4 اسفند 1403 زمان : 17:10

چشم انداز تهدید یا همان Threat Landscape یکی از اصطلاحتی میباشد که امروزه در حوزه امنیت سایبری ( CyberSecurity ) به گوش میخورد و معنا و مفهوم منحصر به فرد خود را دارد که در این مقاله قصد داریم مفهوم چشم انداز تهدید یا همان Threat Landscape را در امنیت سایبری ( CyberSecurity ) بررسی کنیم‌ ، به صورت کلی چشم انداز تهدید ( Threat Landscape ) شامل تمامی تهدیداتی میباشد که میتوانند بر روی مجموعه ایی از سیستم‌ها، دارای های یک سازمان و افراد و گروه های مختلف تاثیر گذار باشند که این تاثیر گذاری درقالب حملات سایبری و آسیب های متنوع به سمت این منابع میباشد.

چشم انداز تهدید به بررسی کلیه تهدیدات و حملات احتمالی در فضای دیجیتال می‌پردازد.این مفهوم شامل تحلیل روندهای فعلی و آینده در زمینه حملات سایبری و آسیب‌پذیری‌ها است.سازمان‌ها و متخصصان امنیت اطلاعات با درک این چشم انداز، استراتژی‌های دفاعی خود را بهبود می‌بخشند.همچنین، علاقه‌مندان به آموزش هک می‌توانند از این تحلیل‌ها بهره ببرند و تکنیک‌های جدید را فرا گیرند.به زبان ساده، شناخت دقیق تهدیدات سایبری باعث افزایش امنیت و آمادگی در برابر حملات می‌شود.

چشم انداز تهدید (Threat Landscape) شامل چه چیزی میشود؟

حالا که با مفهوم چشم انداز تهدید آشنا شدیم باید بررسی کنیم که این مفهوم شامل چه تهدیدات و چه آسیب های بر روی منابع ما میشود. باید توجه داشته باشید که منظور از این کلمه یعنی تمامی آسیب پذیری ها، اشکالات امنیتی، افراد مهاجم و هکر ها، بد افزار میباشد که با تکنیک های مشخص زمینه مشخصی از یک سازمان و منابع مارا به خطر میندازند.
عنوان و مفهوم زمینه یا Context در Threat Landscape به معنای بخشی از ویژگی ها و دارایی های یک‌سازمان یا یک شخص خاص میباشد که از جمله این ویژگی ها عبارتند از:

  • سطح و میزان امنیت
  • میزان و ارزش بالا دارایی ها و اطلاعات
  • دارا بودن اطلاعات و دارایی ها مهم و ارزشمند برای افراد مهاجم
  • موقعیت جغرافیایی ( برخی گروه های APT براساس موقعیت های مکانی اهداف خود را که ممکن است افراد و سازمان ها از یک منطقه جغرافیایی خاص و یا یک کشور خاص باشند انتخاب میکند. )

    چه عواملی بر روی چشم انداز تهدید (Threat Landscape) تاثیر گذار هستند؟

    توجه داشته باشید که چشم انداز تهدید به مرور زمان میتواند تغییر کند به آن اضافه شود و یا از آن کم شود که این موضوع بستگی به موقعیت و عوامل مختلفی دارد، به عنوان مثال از سال 2020 که شرایط بیماری کرونا و ایجاد شدن بستر های دورکاری مثله Remote Access توانسته که چشم انداز تهدید را به این سمت بکشاند و افراد مهاجم تمرکزشان را بر روی این سیستم ها و این افراد که از خانه به سمت سازمان متصل میشوند و دسترسی دارند بزارند و راهی به داخل سازمان و‌ پیاده سازی کردن حملات داشته باشند که از این رو از سال 2020 به اینور این حملات بر روی بستر های Remote Access و کاربرانی که از خانه به سازمان وصل میشوند زیاد شده است.

    عوامل دیگری نیز وجود دارند که میتوانند تاثیر گذاری خودشان را بر روی چشم انداز تهدیدات داشته باشند که عبارتنداز:

    • ظهور و کشف آسیب پذیری های جدید فرصت جدید و خوبی را برای هکرها ایجاد میکنند که بتوانند اهداف خود را پیاده سازی کنند.
    • ظهور تجهیزات جدید و تکنولوژی های جدید مثله Cloud Computing
    • به وجود آمدن رخداد های طبیعی مثله کرونا که سبب ایجاد تغییرات مختلف در زیرساخت سازمان ها شده است.

    چرا باید از چشم انداز تهدید (Threat Landscape) استفاده کنیم؟

    درواقع چشم انداز تهدید این امکان را به ما میدهد که تهدیدات و مشکلات و ضرر های احتمالی که بر روی سازمان ها و شرکت ها و یا افراد و منابع مختلف تاثیر گذار هستند را در اسرع وقت شناسایی و به منظور‌ جلوگیری از روی دادن آن اقدامات پیشگیرانه را به انجام برسانیم.

  • بصورت مقدماتی تا پیشرفته تکنیک های هک و نفوذ حرفه ای را به شما آموزش می دهد. دوره SANS 504 یا تکنیک های هک یکی از مهمترین دوره های هک و نفوذ می باشد که با هدف تکمیل کردن مباحث تست نفوذ پیشرفته ، از شما یک کارشناس هک قانونمند حرفه ای می سازد. دوره آموزشی SANS SEC 504 به عنوان برترین دوره آموزشی امنیت | هک و تست نفوذ در دنیا مطرح می باشد که بصورت تخصصی بر روی آموزش مباحث Incident Response و تکنیک های خاص تست نفوذ می پردازد.

بازدید : 65
شنبه 4 اسفند 1403 زمان : 16:34

بهترین برنامه موتور بازی سازی برای ساخت بازی های دو بعدی و سه بعدی اندروید با کامپیوتر . نرم افزار با و بدون برنامه نویسی . چگونه طراحی بازی با یونیتی Unity انجام می شود . نحوه ساخت بازی با کامپیوتر چگونه است ؟ چگونه می توانم بازی های رایانه ای بسازم ؟ آیا برای ساخت بازی های ویدیویی رایانه ای نیاز به بلد بودن برنامه نویسی است ؟ معرفی نرم افزار مخصوص بازی سازی در ایران و جهان . چگونه می توانم بازی سازی شوم ؟ به این سوالات و بسیاری از سوالات دیگر در ادامه پاسخ داده شده است .

بهترین نرم‌افزارهای ساخت بازی شامل Unity، Unreal Engine، Godot و GameMaker Studio هستند که هرکدام ویژگی‌های منحصربه‌فردی دارند. Unreal Engine با گرافیک پیشرفته و ابزارهای قدرتمند، انتخابی عالی برای بازی‌های AAA است. Unity به دلیل رابط کاربری ساده و پشتیبانی گسترده، برای مبتدیان و حرفه‌ای‌ها مناسب است. Godot یک گزینه متن‌باز و سبک برای توسعه‌دهندگان مستقل محسوب می‌شود. یادگیری این نرم‌افزارها همراه با آموزش گرافیک به توسعه‌دهندگان کمک می‌کند تا بازی‌های باکیفیت‌تری خلق کنند.

نرم افزار های ساخت بازی کدام است ؟

اولین سوال این است . کدام برنامه و نرم افزار برای ساخت بازی مناسب می باشند . آیا می خواهید بازی بسازید یا نه ! اگر واقعا قصد ساخت بازی را دارید ، چه ساده یا پیشرفته یا دو بعدی یا سه بعدی ، باید برنامه نویسی کنید ! تمام کسانی که می گویند بدون برنامه نویسی میشود بازی ساخت ، اشتباه می گویند . آیا این حرف را باور ندارید ؟ نرم افزار اسکرچ برای کودکان 6 ساله است که برنامه نویسی دارد ! پس نگویید که برنامه نویسی ندارد . برنامه نویسی برای ساخت بازی ، گونه ای از کدنویسی است که شما براحتی می توانید آنرا یاد بگیرید . البته ما نمی خواهیم با اسکرچ بازی بسازیم ! ساخت بازی با اسکرچ ، برای کودکان 6 تا 10 ساله است . اگر شما بیشتر از 10 سال سن دارید ، حتی اگر 120 سال هم که داشته باشید ، می توانید با انجین یونیتی بازی بسازید .

یونیتی چیست و چه کار هایی را می توان با آن انجام داد ؟

سوال دوم این است که یونیتی چیست و چه تفاوتی با دیگر نرم افزار ها دارد و چه بازی هایی را می توان با ان تولید کرد ؟در جواب می گوییم که تمامی بازی های دنیا از بازی های دو بعدی و سه بعدی برای اندروید و کامپیوتر و پلی استیشن و ایکس باکس می توانید بسازید . هر بازی از هر نوع و هر سبکی که بخواهید ! درآمد یک یونیتی کار را در وسط این مقاله بررسی کرده ایم .

بازار کار بازی سازی با Unity چگونه است؟

درآمد دقیقی را نمی توان بیان کرد . بستگی به تلاش و تجربه شما دارد . البته اینکه برای استودیو بازی بسازید یا برای خودتان یا برای کشور ها خارجی ، در درآمد کار با یونیتی تاثیر دارد . حدودا می توانیم بگوییم در ایران درآمد یونیتی کار از 5 میلیون شروع می شود . البته کسانی را داریم در ایران که ماهی 200 میلیون تومان ، درآمد دلاری و ریالی از یونیتی دارند که در ادامه درباره آن نیز بحث شده . آیا پس از یادگیری بازی سازی با یونیتی در جایی استخدام می شویم؟ یکی از سوالات درباره یونیتی این است که آیا استخدام می شویم یا نه ؟ تقریبا می توان گفت که به چند ویژگی مربوط می شود .

  • یک : شما برای خودتان کار می کنید پس هر وقت که بخواهید ، بازی می سازید و نیاز به استخدام در شرکت یا استودیویی را ندارید .

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

  • سوم : استخدام در یک استودیو بازی سازی در ایران . برای استخدام ، چندین راه وجود دارد . یکی از این کارها ، دورکاری است . یعنی در خانه خود کار می کنید . اما معمولا استودیو ها ، حضوری را ترجیح می دهند . می توانید در اینترنت نیز ، محلی را پیدا کنید و در آنجا مشغول به کار شوید . عکس زیر ، استخدام آنلاین است که در آن ، درآمد یک یونیتی کار هم درج شدخ است و از یکی از سایت های معتبر استخدام مجازی است .

بازی های بروز دنیا با کدام نرم افزار ها ساخته می شوند؟ مانند سبک بقا؟

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

چرا یونیتی جزو آینده دار ترین نرم افزارهای بازی سازی در دنیاست؟

همین الان خانوادگی یا گروهی و شرکتی ، با یونیتی بازی می سازند و پولدار می شوند . اما در ایران هنوز به صورت رسمی ، در دانشگاه های تخصصی ، بازی سازی را به صورت حرفه و یک شغل مستقل دنبال نمی کنند و این یک فرصت عالی است ! تاچند سال آینده به احتمال زیاد در دانشگاه های ایران نیز آموزش بازی سازی با یونیتی و نرم افزار های وابسته به بازی سازی یعنی تری دی مکس و فتوشاپ و زیبراش ، به صورت شغل مستقل دنبال خواهد شد و این یعنی آینده دار بودن نرم افزار در دنیا و مخصوصا در ایران . با یونیتی بازی های دو بعدی و سه بعدی می توان ساخت . از هر نوع و سبک و رنگ و صلیقه ای که فکرش را بکنید .

چگونه با بازی سازی با Unity درآمد دلاری داشته باشیم؟

بهترین حالت برای درآمد های دلاری چند حالت است . 1 : فروش اسپرایت ها و اشکال دو بعدی 2- کد نویسی قسمتی از بازی که به شما واگذار می کنند . یعنی تکمیل قسمتی از بازی که در سایت های مختلف فریلنسر و فریلنس ها می توانید انواع آنرا پیدا کنید . 3- فروش اشکال سه بعدی ریگ بندی شده و . . .

البته شما می توانید چند ساعت با افکت ها کار کنید و با خلاقیت خود ، یک پکیج مثلا 3 یا 4 دلاری قرار دهید که بارها قابلیت خریداری شدن دارد ! شما می توانید کد ، مدل های سه بعدی و دو بعدی ، پکیج ها ، صدا های بازی و . . . را در سایت های خارجی و داخلی بفروشید . خود سایت یونیتی که بازار کار خوبی هم دارد در تصویر زیر برای شما قرار دارد . اگر کسی بخواهد بازی بسازد ، بجای استخدام یک گروه تری دی مکس کار ، یک پک مدل سه بعدی می خرد و بدین صورت هم شما سود می کنید و هم فرد خریدار . در آموزش ما ، تری دی مکس نیز تدریس شده است ! سایت است استور یونیتی

و اما سوال مهم . کدام دوره یونیتی را تهیه و تماشا کنم ؟

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

بازدید : 205
شنبه 4 اسفند 1403 زمان : 14:11

در این مطلب از مباحث آموزش برنامه نویسی برای آموزش نامگذاری متغیر ها و کلاس ها و توابع است و در مورد این که چگونه انتخاب نام ما باعث تمیز تر شدن کد ما می شود صحبت خواهیم کرد.
انتخاب نام مناسب یکی از ابتدایی ترین اصولی است که برای تمیزی کد باید آن را رعایت کنیم. کد نویسی تمیز بسیار اهمیت دارد زیرا که باعث می شود که سایر اعضای تیم و یا سایر انسان ها بتوانند کد شما را بخوانند. جمله ای از زبان یکی از برنامه نویسان بزرگ هست که می گوید:
"هر احمقی می‌تواند کدی بنویسد که کامپیوتر درک کند. برنامه‌نویسان خوب کدی می‌نویسند که انسان‌ها درک کنند."

سرفصل های این مطلب
  1. نام خوب نامی است که قصد و هدف را مشخص کند
  2. از نامگذاری گمراه کننده پرهیز کنید.
  3. از نام هایی که خیلی شبیه به هم هستند استفاده نکنید.
  4. در تعریف متغیر ها از سری عددی استفاده نکنید.
  5. از نامگذاری با معنی و قابل تلفظ استفاده کنید.
  6. انتخاب نام کلاس و تابع
  7. نام گذاری با توجه دامنه استفاده
  8. صریح کد بنویسید

پس بهتر است که این اصول رعایت شود تا کد ما خوانا تر باشد و همانطور که گفتم یکی از ابتدایی ترین بخش های آن انتخاب نام صحیح می باشد.

نام خوب نامی است که قصد و هدف را مشخص کند

نام هایی که ما برای موجودیت های برنامه (متغیر، کلاس، تابع) انتخاب می کنیم باید نشان دهنده قصد و هدف ما از آن موجودیت باشد. یعنی نامی را که انتخاب کرده ایم به ما می گوید که اولا چرا چنین موجودیتی وجود دارد ثانیا چه کار می کند و ثالثا چطوری از آن استفاده می شود. دقت کنید که اگر نامگذاری شما برای رساندن منظور خود نیاز به کامنت گذاشتن دارد بدانید که آن نامگذاری درست نیست و باید نام آن موجودیت را تغییر دهید. مثلا نامگذاری زیر اشتباه است:

int d; // elapsed time in days 

بهتر است که نام متغیر بالا را به شکل زیر تغییر دهیم.

int elapsedTimeInDays;

شاید بگویید که این نامگذاری باعث طولانی شدن نام متغیر ما می شود و تایپ کردن آن زمانبر بوده و باعث پایین آمدن سرعت ما خواهد شد. دقت کنید که با ادیتور ها و IDE های موجود این بهانه کاملا رد می شود زیرا با قدرت و هوشمندی که ابزار های برنامه نویسی دارند لازم نیست که شما نام کل متغیر را تایپ کنید. اما مقدار شفافیتی که این نام با نام قبلی دارد بسیار زیاد است. پس نگران طولانی بودن نباشید و به با معنی بودن بپردازید.

از نامگذاری گمراه کننده پرهیز کنید.

برای انتخاب نام نباید نام هایی استفاده کنید که کسی که کد شما را می خواند به اشتباه بیاندازد و یا سرنخ غلط به او بدهد. مثلا ممکن است که اسم یک متغیر hp قرار داده شده باشد. خب با توجه به معروف بودن hp مشخص نیست که این متغیر دقیقا به چه منظور ساخته شده است و هدف ساختن آن چه بوده است. همچنین اگر مجموعه ای از دانش آموزان دارید که همه آنها را در متغیری به نام studentList ذخیره کرده اید دقت داشته باشید که نوع این متغیر حتما باید از نوع List باشد و آرایه یا ساختمان داده ی دیگری نباشد زیرا که خواننده را به اشتباه خواهد انداخت. اگر نوع متغیر این مجموعه دانش آموزان از نوع لیست نیست پس نام دیگری مانند students برای آن انتخاب کنید تا گویای مطلب باشد و گمراه کننده نباشد.

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

استفاده از نام هایی مانند عبارات زیر ممنوع است.

XYZControllerForEfficientHandlingOfStrings
XYZControllerForEfficientStorageOfStrings

زیرا که بخش بزرگی از این دونام شبیه به هم هستند و همین امر باعث می شود که چشم های خواننده خسته شود و یا برنامه نویسان دیگر آنها را به جای همدیگر استفاده کنند که باعث دردسر خواهد شد. همچنین استفاده از L کوچک و o بزرگ به خاطر این که ممکن است که با اعداد 1و 0 اشتباه گرفته شود ممنوع است. همچنین استفاده از عباراتی مانند klass که همان کلاس است ولی به خاطر کلمه کلیدی بودن با k نوشته شده است تا کامپایلر خطا نگیرد نیز کار درستی نیست.

در تعریف متغیر ها از سری عددی استفاده نکنید.

استفاده از سری عددی به دنبال یک حرف کار بسیار کثیفی است مثل a1,a2,a3,…. با این که این نام ها گمراه کننده نیستند ولی هیچ قصد و منظوری را مشخص نمی کنند و هیچ اطلاعی از متغیر و استفاده از آن را به ما نمی دهند. دقت داشته باشید که نام متغیر باید به 3 سوال گفته شده در بالا پاسخ دهند.

از نامگذاری با معنی و قابل تلفظ استفاده کنید.

کسی که کد شما را می خواند باید کد شما برایش مانند یک نوشته جذاب و قابل فهم باشد مثلا نامی مثل gwda را نمی شود تلفظ کرد و همچنین برای خواننده هیچ معنی خاصی ندارد. همچنین نام getYYYYYY اسمی واقعا بد و بدون معنی می باشد.

همچنین از پیشوند هایی که به پیشوندهای لهستانی معروف هستند و در زبانهای قدیمی رایج بوده اند استفاده نکنید. مثلا استفاده از حرف c قبل از نام کلاس و یا _ قبل از نام فیلد داخلی واقعا کار اشتباهی است و نباید استفاده شود.

انتخاب نام کلاس و تابع

نام کلاس ها را از اسم ها انتخاب می کنیم مانند Account, Employee, Student, Message و نام توابع را به صورت فعل دستوری می نویسیم مثل GetAge و یا InsertName

نام گذاری با توجه دامنه استفاده

اگر متغیری داریم که در یک بخش 3 خطی و کمتر استفاده می شود می توانیم نام آن را کوتاه انتخاب کنیم ولی اگر دامنه استفاده از این متغیر بیشتر از 3 خط است باید نام آن را کامل بنویسیم. پس طول نامگذاری متغیر با اندازه دامنه رابطه مستقیم دارد ولی برای نام کلاس و متد این قضیه به صورت عکس عمل می کند. مثلا هرچه یک متد یا کلاس عام تر باشند بهتر است نام آن کوتاه تر باشد. مثل open یا close که هم برای فایل ها و هم برای دیتابیس و هم برای سوکت ها استفاده می شود. ولی در دامنه های کوچک بهتر است که نام ما کامل باشد تا منظور ما کامل انتقال داده شود.

در نامگذاری کلاس های ارث بری شده می توان یک صفت به نام آن اضافه کرد مثلا کلاس SavingAccount که از کلاس Account ارث بری کرده است.

صریح کد بنویسید

از نام های جوک و شاعرانه و فلسفی و این چیز ها استفاده نکنید و صریح و واضح نام گذاری کنید مثلا نام abort درست است و استفاده از نامی مانند eatMyShorts به جای آن غلط است. درکدتان مزه نریزید و ضرب المثل نزنید و با کدتان لاس نزنید.

برای هر منظور از یک نام مشخص استفاده کنید. مثلا fetch و get, retrieve تقریبا مشابه هم هستند ولی تصمیم بگیرید که در برنامه از یکی استفاده کنید و به آن پایبند باشید و آن را عوض نکنید. عکس قضیه رو هم رعایت کنید. از یک نام برای چند منظور استفاده نکنید و از قاعده هر کلمه فقط برای یک مفهوم استفاده کنید.

کدی که شما می نویسید توسط برنامه نویس ها خوانده خواهد شد. پس مشکلی ندارد که از نام های معمول رشته کامپیوتر استفاده کنید مثل jobQueue . با دیدن این اسم برنامه نویس خواهد فهمید که یک ساختمان داده صف برای job ها در نظر گرفته شده است.

در کد نوشته شده می توان از نام های موجود در problem domain هم استفاده کر مثلا اگر سیستم حسابداری می نویسید می توانید از نام های معمول در حسابداری استفاده کنید.

مطالب گفته شده از کتاب clean code uncle bob آورده شده است.برای درک بهتر مفاهیم این مقاله دوره های زیادی وجود دارد که به مراجعه به آنها درک عمیقی خواهید داشت.

مکانیزم آموزش برنامه نویسی جاوا در این دوره در قالب سناریو محور و کارگاهی با کامل کردن پروژه های دنیای واقعی می باشد.در این آموزش زبان برنامه نویسی جاوا از ابتدایی ترین موارد شروع کرده و تا پیشرفته ترین موارد آموزش می دهد. شما اگر هیچ آشنایی قبلی با زبان برنامه نویسی جاوا هم نداشته باشید با مشاهده این دوره آموزشی می توانید تبدیل به یک برنامه نویس Java شوید. مقدماتی تا پیشرفته بودن دوره اولین نشانه از جامع بودن دوره آموزشی جاوا است.

مکانیزم آموزش برنامه نویسی اندروید | Android ای که در این دوره بکار گرفته شده است در قالب سناریو محور و کارگاهی است و شما با کامل کردن پروژه های برنامه نویسی موبایلی که می توانید عملا در طی دوره بنویسید و از آنها روی گوشی خود استفاده کنید ، برنامه نویسی را آموزش می بینید. شما اگر هیچ پیش زمینه خاصی در یادگیری برنامه نویسی موبایل در اندروید هم نداشته باشید با مشاهده این دوره آموزشی تبدیل به یک برنامه نویس اندروید حرفه ای می شوید . این اولین نشانه از جامع بودن آموزش Android Programming ای است که شما در آن حضور دارید.

بازدید : 75
شنبه 4 اسفند 1403 زمان : 13:59

گسترش روزافزون داده ها ساختاریافته و ناساختاریافته در وب، باعث ایجاد چالشی تحت عنوان داده های کلان شده است. با توجه به نوع داده ها موجود در ساختار داده های کلان از روش های مختلفی مانند یادگیری ماشین و پردازش زبان طبیعی برای تحلیل این نوع داده ها استفاده می شود. بخش عظیمی از داده های کلان را داده های ناساختاریافته در قالب زبان طبیعی انسان (متن) تشکیل می دهند، محتویات موجود در وب سایت ها، مجلات، شبکه های اجتماعی و ... از نوع داده های متنی هستند، که در سال های اخیر رشد چشم گیری داشته اند.

پردازش زبان طبیعی (NLP) مجموعه روش های سنتی هوش مصنوعی هستند که برای درک، فهم و تحلیل بهتر زبان طبیعی انسان ها توسط ماشین استفاده می شود. از جمله این روش ها می توان به استخراج نام ها از متن، استخراج موجودیت ها از متن، ریشه یابی کلمات، حذف کلمات زائد از متن و ... نیز اشاره کرد که در سال های اخیر با ترکیب سایر مؤلفه های هوش مصنوعی مانند یادگیری عمیق قدرت درک، فهم و تحلیل داده های متنی توسط روش های پردازش زبان طبیعی افزایش یافته است.

یکی از مهمترین وظایف پردازش زبان طبیعی، تحلیل احساسات داده های متنی می باشد. کاربران انسانی خیلی تمایل دارند تا با استفاده از دستگاه های هوشمند در شبکه های اجتماعی مانند توییتر، فیس بوک، اینستاگرام، واتس اپ و ... احساسات یا نظرات خود را نسبت به یک مطلب، ارائه دهند و آن را با دیگران به اشتراک بگذارند. توییتر یکی از بهترین ابزارهای موجود برای جمع آوری و سنجش افکار کاربران وب در وقایع مختلف می باشد که نسبت به سایر شبکه های اجتماعی از محبوبیت بیشتری بین کاربران وب برخوردار می باشد.

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

روش های مبتنی بر واژه:

این روش متکی بر یک واژه نامه احساس می باشد، به عنوان مثال در صورت وجود واژه های نفرت انگیز یا شگفت انگیز در یک متن، برچسب Positive یا Negative را به آن متن نسبت می دهد. اما این رویکردها مدام نیاز به بروزرسانی واژه نامه احساسی دارد و برای تحلیل احساسات معنای عینی جملات کاربرد دارد. لذا نمی تواند برحسب معنای ضمنی جملات به آن برچسب تخصیص دهد به عنوان مثال این رویکرد در تخصیص برچسب به جمله من یک ماشین هفته پیش خریدم و امروز بر روی بدنه آن یک لکه ظاهر شد ناتوان است.

روش های مبتنی بر یادگیری ماشین:

در این رویکرد ابتدا مدلی براساس کلمات موجود در دیتاست آموزش دیده و سپس بر روی بخش دیگری از جملات یک دیتاست آزمایش می شود. در صورتی که در مرحله آزمایش دقت قابل قبولی را کسب کند از آن مدل به عنوان یک مدل تصمیم گیرنده یا پیش بینی کننده احساسات سایر جملات یا رکوردهای دیتاست استفاده می شود. روش های و الگوریتم های زیادی در این نوع رویکرد وجود دارد مانند الگوریتم های Random Forest، SVM ، NB و ... . اگر چه این رویکرد نسبت به رویکردها مبتنی بر واژه از دقت بهتری برخورد دار می باشد اما یکی از عیوب این روش انتخاب ویژگی توسط برنامه نویس است.

روش های یادگیری عمیق:

در سال های اخیر برای حل مشکل رویکردهای مبتنی بر یادگیری ماشین از یادگیری عمیق استفاده شده است با استفاده از یادگیری عمیق، دیگر نیاز به انتخاب ویژگی توسط برنامه نویس نیست، اما در مقابل باید حجم داده های آموزشی که برای یادگیری مدل استفاده می شود بسیار زیاد باشد. لذا رویکرد سومی تحت عنوان یادگیری عمیق در سال های اخیر برای تحلیل احساسات داده های متنی شکل گرفته است.میزان دقت رویکرد یادگیری عمیق با توجه به عدم دخالت کاربر در تعیین ویژگی های با اهمیت، نسبت به رویکردهای قبلی کمتر می باشد.

با رشد روز افزون داده ها، باید بپذیریم که حکومت آن ها بر جهان شروع شده است و جهان به دنبال شکار متخصصین این حوزه به منظور مقابله با داده ها می باشد، دانشمندان علم داده | Data Scientist با توانایی های آماری، مصورسازی، دسته بندی، خوشه بندی، پردازش زبان طبیعی، یادگیری عمیق و ... می توانند به عناصر جهان مانند شرکت ها، دولت ها در تحلیل و کسب سوددهی بیشتر از داده ها کمک کنند.

لذا در کاملترین دوره آموزش دیتابیس و آموزش علم داده | Data Science | مقدماتی تا پیشرفته | سناریو محور و گام به گام در خدمت شما بوده و قصد داریم در پایان این دوره از شما دانشجوی عزیز یک متخصص علم داده يا دانشمند علم داده | Data Scientist بسازیم. متخصص علم داده | Data Scientist یکی از پردرآمدترین شغل های حال حاضر دنیا در قرن جاری می باشد.

بازدید : 66
شنبه 4 اسفند 1403 زمان : 13:58

راهکار SSL Offloading چیست و چگونه کار میکند؟ در اصل این راهکار یکی از روش های کاهش بار بر روی وب سرور میباشد که فرآيند و بار رمزگذاری و رمزگشایی داده های وب سرور هارا کاهش از روی وب سرور ها حذف میکند.

SSL Offloading یکی از مفاهیم مهم در آموزش هک و امنیت شبکه است که پردازش رمزنگاری SSL/TLS را از سرورهای اصلی به یک دستگاه واسط مانند Load Balancer منتقل می‌کند. این کار باعث کاهش بار پردازشی سرورها و افزایش سرعت پاسخ‌دهی می‌شود. دستگاه واسط، داده‌های رمزنگاری‌شده را دریافت، رمزگشایی و پردازش کرده، سپس آن‌ها را به سرور اصلی ارسال می‌کند. این روش در دیتاسنترها و سرویس‌های ابری برای بهینه‌سازی عملکرد و امنیت استفاده می‌شود.


پروتکل SSL (البته این پروتکل منسوخ شده است و نسخه جایگزین آن TLS میباشد اما نام راهکار SSL Offloading تغییری نکرده است برای همان از عنوان SSL استفاده میکنیم) پروتکلی است که به جهت رمزگذاری و رمزگشایی داده ها و ضمانت ارسال داده ها به صورت کامل و کاملا امن را بر روی بستر HTTP میباشد.
انجام محاسبات و الگوریتم SSL به جهت اینکه داده هم رمزنگاری و هم رمزگشایی شود بسیار سخت و سنگین میباشد پس از همین بابت برای کاهش بار موجود بر روی وب سرور و جداسازی ترافیک دریافتی وب و بارمحاسباتی رمزگذاری و رمزگشایی ما از راهکار SSL Offloading استفاده میکنیم.

راهکار SSL Offloading چیست؟

با این راهکار و مفهوم SSL تا حدودی آشنا شدیم اما به صورت کلی SSL پروتکلی است که داده هارا برای ما رمزنگاری میکند و در جلوگیری از حملات متنوعی از جمله Reply Attack و MITM کاربرد دارد و کمک زیادی میکند.
پروتکل SSL باتوجه به خوبی که دارد میزان بار محاسباتی زیادی هم در پی دارد بدین شکل که این فرآيند بر روی سرور(ها) و پردازش CPU آنها بسیار تاثیر گذار میباشد

درکنار اینکه این سرور(ها) میزان ترافیک دریافتی و پردازش درخواست های دریافتی وب راهم باید بررسی کند و پاسخ آن را ارسال کند پس از همین جهت باید راهکاری داشته باشیم که وب سرور ما توانایی این را داشته باشد که به پاسخ های دیگری پاسخ دهد و بار اضافی بر روی آن نباشد.بیشتر ببینید: دوره SANS Security 573 | خودکارسازی امنیت اطلاعات با Python

پس ما یک راهکار را به این جهت استفاده میکنیم که بار محاسباتی SSL که شامل رمزنگاری داده ها و رمزگشایی آنها میشود را از روی وب سرور حذف کنیم و بر روی یک سرور دیگر که به اصطلاح به آن SSL Load Balancer یا SSL Offloading Server گفته میشود قرار دهیم.

نحوه کار SSL Offloading چگونه است؟

توجه داشته باشید این فرآيند و هدف از این راهکار این است که ما پردازش SSL را مستقیما بر روی سرور وب خودمان به انجام نرسانیم و وقتی که ما این پردازش را جداسازی میکنیم و روی یک تجهیز دیگه قرار میدیم بدین شکل میشه که وقتی داده ای از سمت کاربر به سمت وب سرور ارسال میشه در ابتدا داده بر روی پروتکل HTTPS ( به صورت رمزنگاری شده ) در سروری که SSL Offloading را انجام میدهد دریافت میشود و بعد از آن بعد از رمزگشایی کردن داده ها، داده به صورت متن ساده ( Clear Text ) به سمت وب سرور ارسال میشود.بیشتر بخوانید: UBA یا همان User Behavior Analytics چیست؟ به زبان ساده

توجه داشته باشید که این فرآيند صرفا بر روی یک تجهیز خارجی و تهجیز بالا دستی از سرور قابل انجام نیست بلکه این موضوع میتواند بر روی خوده سرور وب انجام شود اما پردازش با یک پردازشگر و سخت‌افزاری دیگری به انجام برسد.

مزیت استفاده از SSL Offloading چیست؟

  • قرار گیری میزان بار محاسباتی SSL Handshake بر روی یک دیوایس دیگر با سرعت بالاتر
  • افزایش سرعت و میزان توانایی پردازش سرور وب
  • افزایش سرعت بارگذاری صفحات وب سایت
  • افزایش پایداری و Performance وب سایت
  • پیاده سازی راحت تر HTTPS Inspection ( بازرسی HTTPS فرایندی میباشد که در آن بسته های HTTPS کاملا بررسی و بازرسی میشوند که کد های مخرب به صورت رمز شده در آنها قرار نگرفته باشد چون که رمزنگاری و SSL هم میتونه یک شمشیر دو لبه باشه )

انواع حالت های SSL Offloading کدامند؟

توجه داشته باشید که SSL Offloading دو حالت را شامل میشود که به شرح زیر میباشند:

حالت اول - SSL Termination

این روش همان روشی است که در بالا توضیح دادیم و نحوه کار آن هم بدین شکل است که داده رمزنگاری شده در سرور SSL Offloading دریافت میشود و داده پس از رمزگشایی به سمت وب سرور ارسال و پاسخ آن نیز در سرور SSL Offloading رمزنگاری میشود و به سمت کلاینت و درخواست کننده مورد نظر ارسال میشود.

حالت دوم - SSL Bridging

این حالت با حالت SSL Termination متفاوت میباشد زیرا که داده ها به صورت رمزنگاری شده در سرور SSL Offloading دریافت میشوند و به همان صورت هم به سمت وب سرور ارسال میشوند و فرآيند رمزگشایی آنها به عهده وب سرور میباشد.
دراصل این فرآيند به جهت بررسی های اضافی و داشتن بازرسي بر روی ترافیک های رمزنگاری شده وب میباشد که از لحاظ داشتن محتوا و کد های مخرب بررسی شوند و درصورت داشتن مشکل Drop شوند در غیر این صورت به همان شکل ( کاملا رمز شده ) به سمت وب سرور ارسال شوند به جهت رمزگشایی در وب سرور و پردازش درخواست

موفق باشید

بازدید : 307
شنبه 4 اسفند 1403 زمان : 13:46

در این مبحث ازآموزش برنامه نویسی با ویژگی های جدید سی شارپ 12 که به تازگی توسط شرکت مایکروسافت و تیم دات نت ارائه شده آشنا شویم. زبان سی شارپ از زمان ارائه، دائم در حال تکامل بوده و با هر نسخه ای که ارائه می شود قابلیت های جدیدی به زبان سی شارپ اضافه می شود.

سرفصل

  1. سازنده های اولیه یا Primary Constructors
  2. عبارات مجموعه ها یا Collection Expressions
  3. پارامترهای ref readonly
  4. parameter default value در lambda expression ها
  5. تعریف alias
  6. تعریف inline arrays
  7. ExperimentalAttribute

سازنده های اولیه یا Primary Constructors

در ابندا این قابلیت تنها در رکورد ها قابل استفاده بود و در سی شارپ 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;
}

عبارات مجموعه ها یا Collection Expressions

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

int[] numbers = [1,2,3,4];

List 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

بوسیله این قابلیت پارامترهای یک متد با کلمه کلیدی ref readonly می توانند تعریف شوند:

void SampleMethod(ref readonly int param)
{
// do something
}

برای یادگیری زبان سی شارپ می توانید از دوره های وب سایت های مختلفی استفاده کنید:که کاملترین آموزش زبان سی شارپ صفر تا صد به همراه پشتیبانی دارند مراجعه کنید.

یک سری نکات برای ارسال مقدار به متدهایی که پارامترهای ref readonly دارن باید رعایت بشه:

  1. مقدار ارسالی حتماً باید به صورت متغیر باشه در غیر اینصورت کامپایلر اخطار نمایش میده
  2. برای ارسال پارامتر حتماً از کلمات کلیدی ref یا in باید استفاده بشه، در غیر اینصورت کامپایلر اخطار نمایش میده

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

int num = 12;
SampleMethod(12); // compiler will generate warning
SampleMethod(ref num); // OK
SampleMethod(num); // compiler will generate warning
SampleMethod(in num); // OK

parameter default value در lambda expression ها

بوسیله این قابلیت امکان مشخص کردن مقدار پیش برای پارامترهای عبارت های lambda وجود خواهد داشت. به عنوان مثال:

var divideExp = (int num1, int num2 = 2) => num1 / num2;

var r1 = divideExp(12);
var r2 = divideExp(12, 3);

همانطور که مشاهده می کنید برای پارامتر num2 مقدار پیش فرض 2 مشخص شده و در زمان فراخوانی، می توان رای num2 مقداری مشخص نکرد.

تعریف alias

بوسیله این قابلیت می توان با alias را برای هر نوع داده ای تعریف کرد. در نسخه های قبلی می بایست حتماً یک نوع داده تعریف شده و بر اساس آن alias را تعریف کرد. اما در سی شارپ 12 این قابلیت به صورت زیر نیز قابل انجام است:

using MyType = (int x, int y);

var mt = new MyType(1,2);

تعریف inline arrays

بوسیله این قابلیت امکان تعریف یک آرایه با طول ثابت بوسیله تعریف 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 ها مجاز بوده و همچنین داخل نوع داده تعریف شده، حتماً باید یک فیلد تعریف شود.

ExperimentalAttribute

با قرار دادن این 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()
{

}
}

تعداد صفحات : 0

درباره ما
موضوعات
لینک دوستان
آمار سایت
  • کل مطالب : 186
  • کل نظرات : 0
  • افراد آنلاین : 2
  • تعداد اعضا : 0
  • بازدید امروز : 153
  • بازدید کننده امروز : 1
  • باردید دیروز : 96
  • بازدید کننده دیروز : 0
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 263
  • بازدید ماه : 286
  • بازدید سال : 1472
  • بازدید کلی : 9431
  • <
    پیوندهای روزانه
    اطلاعات کاربری
    نام کاربری :
    رمز عبور :
  • فراموشی رمز عبور؟
  • خبر نامه


    معرفی وبلاگ به یک دوست


    ایمیل شما :

    ایمیل دوست شما :



    کدهای اختصاصی