TG Telegram Group Link
Channel: Software Philosophy
Back to Bottom
ساخت یک MCP Server‌ ساده با سی‌شارپ

اگه برنامه‌نویس #دات‌نت هستین، تو این پست توضیح داده که چطور با #سی‌شارپ می‌تونین یه MCP Server بالا بیارین و توی Cursor تستش کنین.
اگر نمی‌دونین MCP چیه، یه چورایی همون معادل REST API دنیای وب، در هوش مصنوعیه. یعنی سیستم‌های مختلف امکانات هوش‌مصنوعی خودشون رو از این طریق در اختیار بقیه سیستم‌های هوش‌مصنوعی قرار می‌دن.
مفهوم MCP از اونجایی خیلی مهمه که می‌تونه همون نقشی که ظهور API ها در دنیای وب باعث گسترش یک عالمه اینتگریشن شد، همون نقش رو می‌تونن MCP ها هم بازی کنن و باعث رشد خیلی زیاد محصولات هوش‌مصنوعی باشیم.

تو این پست قدم به قدم اول یه پروژه دات‌نتی ساده درست کرده و بعد کدهای مربوط به MCP رو نوشته و در آخر هم نشون داده که چطور می‌تونین این MCP رو با Cursor تست کنین.

https://dev.to/mehrandvd/create-an-mcp-server-with-net-and-c-251p

https://dev.to/mehrandvd/create-an-mcp-server-with-net-and-c-251p

#مهران_داودی (لینکدین - بلاگ)

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
انواع عددی صحیح (Integral Numeric Types) در سی شارپ

#csharp_for_beginners

در زبان برنامه‌نویسی C#، انواع عددی صحیح (Integral Numeric Types) برای نمایش اعداد صحیح به کار می‌روند. این انواع داده‌ای به‌عنوان نوع‌داده‌های مقداری (Value Types) شناخته می‌شوند و از عملیات‌های حسابی، منطقی بیتی، مقایسه‌ای و تساوی پشتیبانی می‌کنند

▫️در C#، انواع داده‌ای عددی صحیح شامل موارد زیر هستند:

نوع sbyte: از مقدار ۱۲۸- تا ۱۲۷ را در ۸ بیت ذخیره می‌کند و معادل System.SByte در .NET است.
نوع byte: از مقدار ۰ تا ۲۵۵ را در ۸ بیت ذخیره می‌کند و معادل System.Byte است.
نوع short: از مقدار ۳۲۷۶۸- تا ۳۲۷۶۷ را در ۱۶ بیت ذخیره می‌کند و معادل System.Int16 است.
نوع ushort: از مقدار ۰ تا ۶۵۶۳۵ را در ۱۶ بیت ذخیره می‌کند و معادل System.UInt16 است.
نوع int: از مقدار -2,147,483,648 تا 2,147,483,647 را در 32 بیت ذخیره می‌کند و معادل System.Int32 است.
نوع uint: از مقدار ۰ تا ۴,۲۹۴,۹۶۷,۲۹۵ را در ۳۲ بیت ذخیره می‌کند و معادل System.UInt32 است.
نوع long: از مقدار -9,223,372,036,854,775,808 تا 9,223,372,036,854,775,807 را در 64 بیت ذخیره می‌کند و معادل System.Int64 است.
نوع ulong: از مقدار ۰ تا ۱۸,۴۴۶,۷۴۴,۰۷۳,۷۰۹,۵۵۱,۶۱۵ را در ۶۴ بیت ذخیره می‌کند و معادل System.UInt64 است.
نوع nint: اندازه‌ای وابسته به پلتفرم دارد (در سیستم‌های ۳۲ بیتی، ۳۲ بیت و در سیستم‌های ۶۴ بیتی، ۶۴ بیت است) و معادل System.IntPtr می‌باشد.
نوع nuint: مانند nint، اندازه‌ای وابسته به پلتفرم دارد و معادل System.UIntPtr است.
این انواع داده‌ای برای ذخیره اعداد صحیح استفاده می‌شوند و بسته به نیاز حافظه و محدوده مقادیر مورد نظر انتخاب می‌شوند

مقادیر پیش‌فرض: مقدار پیش‌فرض برای تمامی انواع عددی صحیح، صفر (0) است.

حداقل و حداکثر مقادیر: هر نوع داده‌ای دارای ویژگی‌های MinValue و MaxValue است که به ترتیب حداقل و حداکثر مقدار قابل‌پذیرش را نشان می‌دهند.

انواع با اندازه وابسته به پلتفرم: انواع nint و nuint به اندازه پلتفرم وابسته هستند؛ یعنی در فرآیندهای ۳۲ بیتی به‌صورت ۳۲ بیتی و در فرآیندهای ۶۴ بیتی به‌صورت ۶۴ بیتی عمل می‌کنند.

انواع بدون مرز: برای نمایش اعداد صحیح با اندازه نامحدود، می‌توان از ساختار System.Numerics.BigInteger استفاده کرد.

🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
ساخت برنامه‌‌های Mixed Reality و 3D با Unity

ساختن برنامه‌هایی که با دنیای واقعی مرتبط هستند یکی از قسمت‌های هیجان‌انگیز برنامه‌نویسی است.
یکی از معروف‌ترین ابزارها برای ساخت چین برنامه‌‌هایی Unity هست.
کاربرد اصلی Unity ساخت بازی است. بازی‌هایی که هم در کامپیوتر، و هم در محیط‌هایی مثل VR/AR Headsets قابل اجرا هستند.
با اینکه کاربرد اصلی Unity ساخت بازی است، ولی از آن برای ساخت برنامه‌های Enterprise ی که نیاز به محیط‌های 3D و Mixed Reality هم استفاده می‌شود. مثلا نمایش وضعیت دستگاه‌های یک کارخانه، یا وضعیت هواپیماها در یک فرودگاه.

این ویدئو، در مورد ساخت چین برنامه‌هایی صحبت می‌کند و توضیح می‌دهد که چگونه می‌توان با Unity برای این نوع مسائل برنامه‌بنویسی کرد.

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

🔗 ویدئو را می‌توانید اینجا ببینید.

#مهران_داودی (لینکدین - بلاگ)

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
می‌‌دونستین راز ساختن محصولات #ai روی #dotnet در مفاهیم IChatClient و Microsoft.Extentions.AI است؟

فردا تو این لایو لیندکین قراره در مورد اینا صحبت کنم.
می‌بینمتون.
#cs_internship


#مهران_داودی (لینکدین - بلاگ)

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
متدها در سی‌شارپ

#csharp_for_beginners

متدها در زبان برنامه‌نویسی C# بلوک‌هایی از کد هستند که مجموعه‌ای از دستورات را در بر می‌گیرند. اجرای این دستورات با فراخوانی متد و ارائه آرگومان‌های مورد نیاز صورت می‌گیرد. در C#، هر دستور اجرایی در زمینه یک متد انجام می‌شود. به عنوان مثال، متد Main نقطه ورود هر برنامه C# است که توسط محیط اجرای مشترک زبان (CLR) هنگام شروع برنامه فراخوانی می‌شود.

امضای متدها
متدها در یک کلاس، ساختار یا اینترفیس با مشخص کردن سطح دسترسی (مانند public یا private)، اصلاح‌کننده‌های اختیاری (مانند abstract یا sealed)، نوع بازگشتی، نام متد و هر پارامتر مورد نیاز تعریف می‌شوند. این اجزا با هم امضای متد را تشکیل می‌دهند. توجه داشته باشید که نوع بازگشتی بخشی از امضای متد برای اهداف سربارگذاری متد محسوب نمی‌شود، اما در تعیین سازگاری بین یک نماینده (delegate) و متدی که به
آن اشاره می‌کند، مهم است.

فراخوانی متدها
برای فراخوانی یک متد، پس از نام شیء، یک نقطه، نام متد و پرانتزها را اضافه می‌کنیم. آرگومان‌ها در داخل پرانتزها قرار می‌گیرند و با کاما از هم جدا می‌شوند. به عنوان مثال، اگر کلاسی به نام Motorcycle با متدهایی مانند StartEngine، AddGas و Drive داشته باشیم، می‌توانیم آن‌ها را به صورت زیر فراخوانی کنیمTestMotorcycle moto = new TestMotorcycle();

moto.StartEngine();
moto.AddGas(15);
moto.Drive(5, 20);
double speed = moto.GetTopSpeed();
Console.WriteLine("My top speed is {0}", speed );


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

🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
نگاهی‌ کمی فلسفی‌تر به MCP

مفهوم MCP بحث داغ این روزهای دنیای هوش مصنوعی است.
با نگاهی خاص می‌توان گفت که MCP می‌تواند همان تاثیری را در دنیای هوش‌مصنوعی بگذارد که REST بر دنیای وب گذاشت.

در این مقاله جالب که به مقایسه این دو تکنولوژی و کارکردهایشان پرداخته، مفهوم Discovery را هم بررسی کرده که در حال حاضر بخشی از استاندارد REST نیست ولی MCP این فیچر را دارا است.

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

🔗 پیشنهاد می‌کنم حتما این مقاله جذاب رو بخونین.

#مهران_داودی (لینکدین - بلاگ)

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
مقدمه‌ای بر کلاس‌ها در سی شارپ

#csharp_for_beginners

در زبان برنامه‌نویسی C#، کلاس‌ها (Classes) به عنوان یکی از اصلی‌ترین ساختارهای برنامه‌نویسی شیءگرا عمل می‌کنند. کلاس‌ها در C# قالبی برای ایجاد اشیاء (Objects) هستند و شامل داده‌ها (فیلدها و خصوصیات) و رفتارها (متدها) می‌شوند.

در این مقاله، مفهوم کلاس در C#، نحوه تعریف آن، انواع اعضای کلاس، اصول شیءگرایی مرتبط و مفاهیم پیشرفته بررسی خواهند شد.

۱. تعریف کلاس در C#

در C#، کلاس با استفاده از کلمه کلیدی class تعریف می‌شود. یک کلاس می‌تواند شامل متغیرها، خصوصیات، متدها و رویدادها باشد. در ادامه یک نمونه ساده از کلاس آورده شده است:

public class Car
{
public string Brand;
public string Model;
public int Year;

public void DisplayInfo()
{
Console.WriteLine($"Brand: {Brand}, Model: {Model}, Year: {Year}");
}
}


۲. ایجاد شیء از کلاس
برای استفاده از کلاس، باید یک نمونه (Object) از آن ایجاد کنیم:

class Program
{
static void Main()
{
Car myCar = new Car();
myCar.Brand = "Toyota";
myCar.Model = "Corolla";
myCar.Year = 2022;

myCar.DisplayInfo();
}
}


در این کد:
• یک شیء myCar از کلاس Car ساخته شده است.
• مقادیر فیلدهای آن مقداردهی شده‌اند.
• متد DisplayInfo برای نمایش اطلاعات خودرو فراخوانی شده است.

۳. فیلدها، خصوصیات و متدها

فیلدها (Fields)
فیلدها متغیرهایی هستند که داده‌های کلاس را نگهداری می‌کنند. در مثال قبل، Brand، Model و Year فیلد بودند.

خصوصیات (Properties)
خصوصیات راهی استاندارد برای دسترسی ایمن به داده‌های کلاس هستند. به جای استفاده مستقیم از فیلدها، می‌توان از property استفاده کرد:

public class Car
{
private string brand;

public string Brand
{
get { return brand; }
set { brand = value; }
}
}


استفاده از property باعث افزایش امنیت و کنترل بیشتر بر روی داده‌ها می‌شود.

متدها (Methods)
متدها وظایف خاصی را در کلاس انجام می‌دهند. در مثال‌های قبل، DisplayInfo() یک متد بود که اطلاعات را چاپ می‌کرد.

🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
پشتیبانی از عملگر LeftJoin در NET 10.

در نسخه جدید NET 10.، پشتیبانی بومی از عملگر LeftJoin در LINQ به این فریم‌ورک اضافه شده است. این تغییر مهم در زمان نوشتن کوئری‌ها در Entity Framework Core (EF Core) به شما کمک می‌کند تا کد ساده‌تری بنویسید و از پیچیدگی‌های قبلی که نیازمند استفاده از ترکیب چندین متد مانند SelectMany و GroupJoin بود، رهایی یابید.

قبل از NET 10.:

در نسخه‌های قبلی EF Core، برای استفاده از عملیات LeftJoin نیاز به ترکیب چندین متد پیچیده بود. در این روش، ابتدا با استفاده از GroupJoin داده‌ها را به هم پیوند می‌دادیم، سپس از SelectMany و DefaultIfEmpty برای شبیه‌سازی رفتار LeftJoin استفاده می‌کردیم.

مثال کد قبل از NET 10.:

var query = students
.GroupJoin(
departments,
student => student.DepartmentID,
department => department.ID,
(student, departmentList) => new { student, subgroup = departmentList })
.SelectMany(
joinedSet => joinedSet.subgroup.DefaultIfEmpty(),
(student, department) => new
{
student.student.FirstName,
student.student.LastName,
Department = department.Name ?? "[NONE]"
});


پس از اضافه شدن LeftJoin در NET 10.:

با معرفی متد LeftJoin در NET 10.، نوشتن کوئری‌ها بسیار ساده‌تر و خواناتر شده است. دیگر نیازی به استفاده از ترکیب چندین متد نخواهید داشت، بلکه می‌توانید به راحتی از این متد جدید استفاده کنید.

مثال کد پس از NET 10.:

var query = context.Students
.LeftJoin(
context.Departments,
student => student.DepartmentID,
department => department.ID,
(student, department) => new
{
student.FirstName,
student.LastName,
Department = department.Name ?? "[NONE]"
});


مزایای استفاده از LeftJoin در NET 10.:

- سادگی و خوانایی بیشتر: به جای استفاده از ترکیب پیچیده‌ی متدها، می‌توانید با یک متد ساده به راحتی LeftJoin را انجام دهید.
- عملکرد بهتر: به دلیل بهینه‌سازی‌های داخلی در EF Core، عملیات LeftJoin به شکل بهینه‌تری در پایگاه داده اجرا می‌شود.
- کاهش پیچیدگی کد: به جای کدهای طولانی و پیچیده، می‌توانید کدهای ساده‌تری بنویسید که فهم آن‌ها برای سایر برنامه‌نویسان راحت‌تر است.

🔗 برای مطالعه بیشتر می‌توانید به این لینک مراجعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

________
🔶 امشب ساعت ۸:۳۰ تو این لایو یوتیوب قراره در مورد مفاهیم LLM و روش‌‌های برنامه‌نویسی باهاشون در دات‌نت صحبت کنیم، و در نهایت هم نحوه ساختن و استفاده کردن از MCP ها رو بررسی کنیم.

#dotnet #csharp #openai #llm #azure #mcp

#cs_internship



https://www.youtube.com/live/c75VZWa_wbU

کانال تلگرام:
@SoftwarePhilosophy

____
نوع داده char در زبان سی‌شارپ

#csharp_for_beginners

در زبان برنامه‌نویسی #C، نوع داده‌ای char نمایانگر یک واحد کد UTF-16 یونیکد است که معمولاً به عنوان یک کاراکتر UTF-16 شناخته می‌شود. کلمه کلیدی char در #C معادل ساختار System.Char در .NET است.

ویژگی‌های کلیدی نوع char:
محدوده مقادیر: از U+0000 تا U+FFFF
اندازه: 16 بیت
مقدار پیش‌فرض: \0 یا U+0000

عملگرهای پشتیبانی‌شده برای char:
مقایسه‌ای: مانند == و !=
افزایشی و کاهشی: مانند ++ و --
عملگرهای حسابی و بیتی: این عملگرها بر روی کد پوینت‌های مربوطه عمل کرده و نتیجه را به صورت مقدار int ارائه می‌دهند.

تبدیل نوع char:
تبدیل ضمنی به انواع عددی: char به طور ضمنی قابل تبدیل به انواع عددی صحیح مانند ushort، int، uint، long، ulong، nint و nuint است. همچنین، به انواع عددی اعشاری مانند float، double و decimal نیز قابل تبدیل است.
تبدیل صریح از انواع دیگر به char: تبدیل از سایر انواع به char به
صورت صریح انجام می‌شود.

مثال‌هایی از مقداردهی به char:

var chars = new[]
{
'j',
'\u006A', // استفاده از توالی فرار یونیکد
'\x006A', // استفاده از توالی فرار هگزادسیمال
(char)106, // تبدیل عدد صحیح به char
};
Console.WriteLine(string.Join(" ", chars)); // خروجی: j j j j



🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
قابلیت‌های جدید Data Annotations در دات نت ۸

در نسخه جدید NET 8.، ویژگی‌های Data Annotations پیشرفت‌های قابل توجهی داشته‌اند. این ویژگی‌ها، کدنویسی معتبرسازی داده‌ها را بسیار ساده‌تر و تمیزتر کرده است. در ادامه به صورت گام به گام این ویژگی‌های جدید را بررسی می‌کنیم:

۱. ویژگی Length
این Annotation برای مشخص کردن حداقل و حداکثر طول رشته استفاده می‌شود.

[Length(2, 30)]
public string Name { get; set; }

[Length(2, 255)]
public string Description { get; set; }


در مثال بالا:
- مقدار Name باید حداقل ۲ و حداکثر ۳۰ کاراکتر داشته باشد.
- مقدار Description باید حداقل ۲ و حداکثر ۲۵۵ کاراکتر داشته باشد.

---

۲. ویژگی Range با پارامترهای Exclusive
ویژگی Range حالا قابلیت مشخص کردن مقادیر انحصاری را نیز دارد.

[Range(1, 1000, MinimumIsExclusive = true, MaximumIsExclusive = false)]
public decimal Price { get; set; }

در این مثال:
- مقدار Price باید بزرگتر از ۱ (به دلیل MinimumIsExclusive = true) و کوچکتر یا مساوی ۱۰۰۰ (به دلیل MaximumIsExclusive = false) باشد.

---

۳. ویژگی AllowedValues
این Annotation مقادیر مجاز برای یک خصوصیت را مشخص می‌کند.

[AllowedValues("S", "M", "L", "XL", "XXL")]
public string Size { get; set; }

در اینجا، تنها مقادیر S, M, L, XL, XXL برای Size قابل قبول هستند.

---

۴. ویژگی DeniedValues
برای مشخص کردن مقادیری که غیرمجاز هستند استفاده می‌شود.

[DeniedValues("Electronics", "Computers")]
public string Category { get; set; }

در این مثال، مقادیر Electronics و Computers برای Category ممنوع هستند.

---

۵. ویژگی Base64String
برای معتبرسازی اینکه مقدار یک رشته به صورت Base64 باشد استفاده می‌شود.

[Base64String]
public string Image { get; set; }

این اطمینان را ایجاد می‌کند که Image حاوی یک رشته معتبر Base64 است.

🔗 برای مطالعه بیشتر می‌توانید به این لینک مراجعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

__________
آشنایی با آرایه‌ها در زبان سی‌شارپ

#csharp_for_beginners

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

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

csharpCopyEditint[] numbers = new int[5];



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

مقداردهی اولیه به آرایه
می‌توان هنگام تعریف آرایه، مقداردهی اولیه نیز انجام داد:

csharpCopyEditstring[] names = { "Ali", "Sara", "Reza" };

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


انواع آرایه‌ها در سی‌شارپ
زبان سی‌شارپ از چند نوع آرایه پشتیبانی می‌کند:

۱. آرایه‌های یک‌بعدی
رایج‌ترین نوع آرایه است که فقط یک بُعد دارد:

csharpCopyEditdouble[] prices = new double[10];



۲. آرایه‌های چندبعدی
این نوع آرایه‌ها مانند ماتریس‌ها می‌توانند بیش از یک بُعد داشته باشند:

csharpCopyEditint[,] matrix = new int[3, 4]; // یک ماتریس ۳ در ۴


۳. آرایه‌های دندانه‌دار (Jagged Arrays)
آرایه‌هایی از آرایه‌ها هستند؛ یعنی هر عنصر خود می‌تواند یک آرایه مجزا باشد، حتی با طول متفاوت:

csharpCopyEditint[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[3];
jaggedArray[1] = new int[5];


دسترسی به عناصر آرایه
برای دسترسی یا تغییر مقدار یک عنصر از آرایه، از اندیس آن استفاده می‌کنیم:

csharpCopyEditnumbers[0] = 10;
Console.WriteLine(numbers[0]);




🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
ابزار string visualizer در ویژوال استودیو

یکی از دم دست‌ترین امکانات #visualstudio ابزار string visualizer است. به محض اینکه موس روی متغیری قرار بگیره، این ابزار مقدار string اون متغییر رو نشون می‌ده.

خب تا اینجا که چیزی نیست!

ابزار string visualizer یه امکان مفید و بسیار کاربردی داره که شاید تا به حال خیلی بهش دقت نکرده باشید. شما می‌تونید نوع string visualizer خودتون رو از قسمت string manipulation انتخاب کنید. مثلا اگه مقدارش یه JWT بود، می‌تونید مقدار Decode شده JWT رو مشاهده کنید.

🔗 برای مطالعه بیشتر می‌توانید به این لینک مراجعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#حامد_حاجیلو (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

______
نوع داده‌ی bool در زبان برنامه‌نویسی سی‌شارپ

#csharp_for_beginners

در زبان برنامه‌نویسی سی‌شارپ، نوع داده‌ای bool یک نوع داده‌ی پایه‌ای (Built-in Type) است که فقط می‌تواند یکی از دو مقدار true یا false را بپذیرد. این نوع داده نقش مهمی در کنترل جریان برنامه، تصمیم‌گیری‌ها، حلقه‌ها و بسیاری از عملیات منطقی ایفا می‌کند.

تعریف bool

در سی‌شارپ، bool یک کلمه کلیدی است که معادل کامل‌تر نوع System.Boolean از فضای نام System می‌باشد. این یعنی وقتی از bool استفاده می‌کنید، در واقع با یک شی از نوع System.Boolean کار می‌کنید:
bool isActive = true;
bool isComplete = false;


مقادیر مجاز
یک متغیر از نوع bool تنها می‌تواند دو مقدار زیر را داشته باشد:
• true (صحیح)
• false (نادرست)

تلاش برای مقداردهی دیگر به یک متغیر bool باعث خطای کامپایلر خواهد شد.

کاربردهای رایج bool
نوع bool به طور گسترده‌ای در عبارات شرطی مانند if، حلقه‌های while و do-while، و همچنین در اپراتورهای منطقی به کار می‌رود:

bool isLoggedIn = true;

if (isLoggedIn)
{
Console.WriteLine("Welcome back!");
}
else
{
Console.WriteLine("Please log in.");
}


در این مثال، برنامه براساس مقدار متغیر isLoggedIn تصمیم می‌گیرد که چه پیامی نمایش داده شود.

عملیات منطقی روی bool
بر روی متغیرهای bool می‌توانید عملیات منطقی انجام دهید، مثل:
• && (AND منطقی)
• || (OR منطقی)
• ! (NOT منطقی)

bool hasUsername = true;
bool hasPassword = false;

if (hasUsername && hasPassword)
{
Console.WriteLine("Login successful.");
}
else
{
Console.WriteLine("Missing username or password.");
}



🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
چرا می‌گن «C# is Java done right»؟

هر دو زبان جاوا و سی‌شارپ زبان‌های خیلی قدرتمندی هستن و در پروژه‌های بزرگی استفاده می‌شن.
از طرفی باید قبول کرد که از لحاظ syntax، زبان سی‌شارپ پیشرفته‌تر و خوش‌دست‌تر است.
این ویدئو ویژگی‌های مهمی که در سی‌شارپ بهتر پیاده‌سازی شدن و باعث می‌شه زبان مدرن‌تری حساب بشه رو توضیح می‌ده.
از معروف‌ترین تفاوت‌ها، پیاده‌سازی ناقص Generic ها در جاوا و پیاده‌سازی خوبش در سی‌شارپ است.
ویژگی Property و Async/Await هم یکی از ویژگی‌های خیلی مهمه که مدت‌هاست در سی‌شارپ وجود داره.
همینطور LINQ ویژگی خیلی جذابیه که پیاده‌سازی مشابهش تو جاوا هم خیلی دیرتر اضافه شد، و هم اینکه به خوش‌دستی پیاده‌سازی سی‌شارپ نیست.

🔗 تو این ویدئوی کوتاه این تفاوت‌ها رو خیلی واضح‌تر و لذت‌بخش‌تر توضیح داده.

نظر شما در مورد این دو تا زبان چیه؟

#java #csharp #dotnet
#مهران_داودی (لینکدین - بلاگ)

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
بررسی کامل انواع عددی صحیح (Integral Numeric Types) در زبان سی شارپ

#csharp_for_beginners

در زبان برنامه‌نویسی سی شارپ، انواع داده‌ای عددی صحیح (Integral Numeric Types) برای نمایش اعداد صحیح بدون قسمت اعشاری استفاده می‌شوند. این انواع داده‌ای بخش جدایی‌ناپذیری از عملیات ریاضی، شمارش، محاسبه شاخص آرایه‌ها، و کنترل جریان برنامه هستند. در این مقاله با جزئیات کامل انواع داده‌ای صحیح، ویژگی‌ها، تفاوت‌ها و کاربردهای آن‌ها آشنا خواهیم شد.

دسته‌بندی انواع عددی صحیح
انواع عددی صحیح در سی شارپ به دو دسته اصلی تقسیم می‌شوند:
۱. انواع علامت‌دار (Signed): می‌توانند اعداد منفی و مثبت را نمایش دهند.
۲. انواع بدون علامت (Unsigned): فقط اعداد مثبت و صفر را پشتیبانی می‌کنند.

در جدول زیر، لیستی از انواع داده‌ای صحیح در سی شارپ به همراه ویژگی‌های کلیدی آن‌ها آمده است:

sbyte - 8 بیت
byte - 8 بیت
short - 16 بیت
ushort - 16 بیت
int - 32 بیت
uint - 32 بیت
long - 64 بیت
ulong - 64 بیت
nint - 32 یا 64 بیت (وابسته به معماری)
nuint - 32 یا 64 بیت (وابسته به معماری)


ویژگی‌های عمومی انواع عددی صحیح
تمامی انواع بالا ویژگی‌های مشترک زیر را دارند:
نوع مقدار (Value Type): برخلاف کلاس‌ها، این نوع‌ها مستقیماً مقدار را نگه‌داری می‌کنند، نه اشاره به آن.
مقدار پیش‌فرض: برای همه این نوع‌ها مقدار پیش‌فرض برابر صفر (0) است.
ثابت‌های MinValue و MaxValue: هر نوع دارای دو ثابت برای نمایش کمترین و بیشترین مقدار قابل نگهداری است.
پشتیبانی از عملیات ریاضی: از جمله +, -, *, /, %، عملیات بیتی مانند &, |, ^, ~، عملیات مقایسه‌ای مثل <, >, ==, !=، و عملیات شیفت <<, >>.

انواع nint و nuint
این دو نوع در نسخه‌های جدید سی شارپ معرفی شده‌اند و برای سناریوهایی مناسب‌اند که اندازه نوع باید متناسب با معماری سیستم (32 یا 64 بیت) باشد، مانند کار با اشاره‌گرها یا توابع سطح پایین سیستم عامل. این نوع‌ها به‌ترتیب معادل با IntPtr و UIntPtr در .NET هستند.

استفاده از لیترال‌های عددی
در سی شارپ می‌توان از لیترال‌ها برای مقداردهی مستقیم استفاده کرد. به‌عنوان مثال:int a = 100;
uint b = 100u;
long c = 100L;
ulong d = 100UL;


تبدیل نوع (Type Conversion)
هنگام تبدیل میان انواع عددی صحیح، باید به موارد زیر توجه کرد:
تبدیل ضمنی (Implicit): زمانی که داده از نوع کوچکتر به نوع بزرگ‌تر تبدیل می‌شود (مثلاً int به long)، بدون نیاز به دستور خاص.
تبدیل صریح (Explicit): در حالت معکوس (مثلاً long به int)، به تبدیل صریح یا cast نیاز است و ممکن است دقت از بین برود.
int x = 123;
long y = x; // تبدیل ضمنی

long a = 1000L;
int b = (int)a; // تبدیل صریح



🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
آشنایی با کلاس‌ها در زبان برنامه‌نویسی سی شارپ

#csharp_for_beginners

در زبان برنامه‌نویسی سی شارپ، کلاس‌ها (Classes) یکی از اصلی‌ترین اجزای برنامه‌نویسی شی‌ءگرا هستند. کلاس‌ها ساختارهایی هستند که به برنامه‌نویس اجازه می‌دهند اشیاء (Objects) را تعریف کرده و رفتار و داده‌های آن‌ها را سازمان‌دهی کنند. این مفهوم به ما کمک می‌کند تا برنامه‌هایی ماژولار، قابل نگهداری و قابل گسترش بنویسیم.

تعریف کلاس
یک کلاس در سی شارپ مانند یک الگو یا قالب است. این قالب ویژگی‌ها (Properties) و رفتارها (Methods)یی را تعریف می‌کند که یک شیء از آن کلاس می‌تواند داشته باشد. برای مثال، اگر بخواهیم یک کلاس به نام Car تعریف کنیم، می‌توانیم ویژگی‌هایی مانند Color یا Speed و رفتارهایی مانند Drive() یا Stop() برای آن مشخص کنیم.

مثال ساده‌ای از تعریف کلاس:

public class Car
{
public string Color;
public int Speed;

public void Drive()
{
Console.WriteLine("Driving...");
}
}


ایجاد نمونه (Instance)
برای استفاده از یک کلاس، باید از آن نمونه‌سازی کنیم. این نمونه یک شیء واقعی از کلاس است که می‌توان از آن در برنامه استفاده کرد:

Car myCar = new Car();
myCar.Color = "Red";
myCar.Drive();


سازنده‌ها (Constructors)

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

public class Car
{
public string Color;

// سازنده
public Car(string color)
{
Color = color;
}
}


و استفاده از آن:

Car myCar = new Car("Blue");


دسترسی و سطح دسترسی

کلمات کلیدی مانند public، private، و protected تعیین می‌کنند که اعضای کلاس از کجا قابل دسترسی هستند. به طور پیش‌فرض، اعضای کلاس private هستند، یعنی فقط از داخل خود کلاس قابل دسترسی‌اند.

وراثت (Inheritance)
یکی از ویژگی‌های قدرتمند کلاس‌ها، وراثت است. یک کلاس می‌تواند از کلاس دیگری ارث‌بری کند و ویژگی‌ها و رفتارهای آن را به ارث ببرد

public class Vehicle
{
public void Start() => Console.WriteLine("Starting...");
}

public class Car : Vehicle
{
public void Drive() => Console.WriteLine("Driving...");
}



🔗 مطلب کامل را در این لینک می‌توانید مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
کار با داده‌های JSON در SQL Server

فرمت JSON یک فرمت سبک و محبوب برای تبادل و ذخیره داده‌های بدون ساختار است. از SQL Server 2016 به بعد، قابلیت‌های بومی برای پردازش JSON در SQL Server، Azure SQL Database، Azure SQL Managed Instance، Azure Synapse Analytics و SQL Database در Microsoft Fabric وجود دارد. این یعنی ترکیبی از انعطاف NoSQL و قدرت دیتابیس‌های رابطه‌ای!

قابلیت‌های کلیدی:

- استخراج مقادیر:
۱. قابلیت ISJSON: بررسی صحت فرمت JSON
۲. قابلیت JSON_VALUE: استخراج مقادیر اسکالر
۳. قابلیت JSON_QUERY: استخراج اشیاء یا آرایه‌ها
۴. قابلیت JSON_MODIFY: ویرایش مقادیر JSON

- تبدیل JSON به ردیف‌ها:
- با OPENJSON داده‌های JSON را به جدول تبدیل کنید.

- نوع داده json:
- در SQL Server 2025 برای ذخیره‌سازی و پردازش بهینه‌تر معرفی شده است.

- فرمت‌بندی خروجی به JSON:
- با FOR JSON نتایج کوئری را به فرمت JSON تبدیل کنید.

- ساخت اشیاء و آرایه‌ها:
- توابع JSON_OBJECTAGG و JSON_ARRAYAGG برای تولید ساختارهای JSON.

کاربردها:
- ساده‌سازی مدل‌های داده پیچیده
- مدیریت داده‌های IoT، لاگ‌ها و REST API
- ذخیره JSON در ستون‌های NVARCHAR با امکان ایندکس‌گذاری

---

تابع JSON_OBJECTAGG در Transact-SQL
این تابع به شما کمک می‌کند از داده‌های SQL (ستون‌ها، مقادیر یا نتایج تجمیعی) شیء JSON بسازید. زوج‌های کلید/مقدار را دریافت می‌کند و خروجی استاندارد تحویل می‌دهد.

ویژگی‌ها:
- استفاده در SELECT:
- قابل ترکیب با GROUP BY یا GROUPING SETS.

- ساخت آرایه‌های JSON:
- برای آرایه به جای شیء، از JSON_ARRAYAGG استفاده کنید.

- دسترسی:
- در Azure SQL Database، Azure SQL Managed Instance (با Always-up-to-date) و Fabric Data Warehouse در دسترس است.


مثال‌های کدی

مثال ۱: ساخت شیء JSON از داده‌های یک جدول
فرض کنید جدولی به اسم Employees داریم با ستون‌های EmployeeID و Name. می‌خواهیم یک شیء JSON بسازیم که EmployeeID کلید و Name مقدار باشد.

SELECT JSON_OBJECTAGG(EmployeeID, Name) AS EmployeeJson
FROM Employees;


خروجی نمونه:
{
"1": "Ali Rezaei",
"2": "Sara Ahmadi",
"3": "Mohammad Hosseini"
}


مثال ۲: ترکیب با GROUP BY برای داده‌های تجمیعی
فرض کنید جدولی به اسم Orders داریم با ستون‌های CustomerID و OrderAmount. می‌خواهیم برای هر مشتری مجموع سفارشات را به صورت JSON برگردانیم.

SELECT CustomerID,
JSON_OBJECTAGG(OrderID, OrderAmount) AS OrderSummary
FROM Orders
GROUP BY CustomerID;


خروجی نمونه:
[
{"CustomerID": 101, "OrderSummary": {"Order1": 500, "Order2": 750}},
{"CustomerID": 102, "OrderSummary": {"Order3": 300}}
]


‼️برای دیدن نمونه مثال و مطالعه بیشتر به لینک‌های زیر مراجعه کنید:

🔗لینک اول

🔗لینک دوم

🔗لینک سوم

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

_______
Forwarded from فلسفه دیزاین
طراحی، توسعه و انتشار یک وب‌اپ با استفاده از هوش مصنوعی

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

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

پس از طراحی، مرحله‌ی توسعه آغاز می‌شود که در آن هوش مصنوعی می‌تواند کدهای موردنیاز را تولید کند. ابزارهایی مانند ChatGPT (با قابلیت کدنویسی)، GitHub Copilot و Replit به کاربران امکان می‌دهند تا کدهای HTML، CSS، و JavaScript را تنها از طریق دستورات متنی ایجاد کنند. این فرایند باعث کاهش نیاز به دانش عمیق کدنویسی شده و توسعه‌ی وب‌اپلیکیشن‌ها را برای افراد بیشتری قابل‌دسترس می‌کند.

پس از تولید کد، گام بعدی تست و بهینه‌سازی اپلیکیشن است. ابزارهای تست خودکار مبتنی بر هوش مصنوعی مانند Testim و Applitools می‌توانند به سرعت باگ‌ها و مشکلات احتمالی را شناسایی کنند. این ابزارها، با استفاده از یادگیری ماشینی، می‌توانند پیشنهاداتی برای بهبود عملکرد، امنیت و سازگاری وب‌اپ ارائه دهند. این مرحله از اهمیت ویژه‌ای برخوردار است، زیرا کیفیت محصول نهایی را تضمین می‌کند.

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

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

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

🔗 برای مطالعه کامل مقاله می‌توانید به این لینک مراجعه کنید.

(مدت زمان مطالعه: ۴ دقیقه)

گردآورنده: فاطمه حیدری

#طراحی_محصول
#AI

@Dexign فلسفه دیزاین

______
آموزش گام‌به‌گام دیباگ برنامه‌های C# در VS Code

#csharp_for_beginners

۱. معرفی ویدیویی
• این قسمت از مجموعه، مخصوص رفع مشکلات دیباگی که قبلاً ایجاد شده‌اند در VS Code برای پروژه‌های سی‌شارپ است.

۲. مروری بر شرایط خطا
• تمرکز بر Conditional Breakpoints (نقاط توقف شرطی) است؛ زمانی مفید که می‌خواهید در شرایط خاصی اجرای برنامه متوقف شود.
• در ویدیو، نشان داده می‌شود که چگونه این شرط‌ها گاهی به درستی کار نمی‌کنند (مثلاً خطاهایی که باعث نمی‌شوند نقطه توقف فعال شود یا شرایط نادیده گرفته می‌شود).

۳. تنظیم دقیق Breakpointها
• توضیح گام‌به‌گام نحوه افزودن یک Breakpoint شرطی با وارد کردن یک شرط مثل x == 5.
• نمایش اینکه چطور می‌توان شرط را اصلاح یا حذف کرد تا دوباره قابل‌استفاده شود.

۴. اشکالات رایج
• ممکن است VS Code یا اکستنشنی که استفاده می‌کنید، شرط را نادیده بگیرد یا اجرا را ادامه دهد.
• روش‌هایی برای رفع این مشکل بررسی می‌شود، از جمله به‌روزرسانی اکستنشن‌، تغییر پیکربندی launch.json، و راه‌اندازی مجدد جلسه دیباگ.

۵. ابزارهای کمکی و دیباگ پیشرفته
• اشاره به ویژگی‌هایی مثل Watch (مشاهده متغیرها) و Call Stack برای درک بهتر وضعیت اجرا.
• نمایش اینکه چطور Breakpoint را در کدی فعال کنیم که در چند مسیر اجرا ممکن است قابل رسیدن باشد.

۶. نکات پایانی
• توصیه به آزمایش Breakpointهای شرطی در سناریوهای ساده‌تر قبل از اعمال در کد پیچیده.
• تشویق به مطالعه مستندات VS Code و مراجع مایکروسافت برای رفع خطاهای ناشی از ناسازگاری نسخه یا پیکربندی اشتباه

🔗 ویدئوی کامل را اینجا مشاهده کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

کانال تلگرام:
@SoftwarePhilosophy

______
HTML Embed Code:
2025/07/01 08:03:13
Back to Top