نوع دادهی bool در زبان برنامهنویسی سیشارپ
#csharp_for_beginners
در زبان برنامهنویسی سیشارپ، نوع دادهای bool یک نوع دادهی پایهای (Built-in Type) است که فقط میتواند یکی از دو مقدار true یا false را بپذیرد. این نوع داده نقش مهمی در کنترل جریان برنامه، تصمیمگیریها، حلقهها و بسیاری از عملیات منطقی ایفا میکند.
تعریف bool
در سیشارپ، bool یک کلمه کلیدی است که معادل کاملتر نوع System.Boolean از فضای نام System میباشد. این یعنی وقتی از bool استفاده میکنید، در واقع با یک شی از نوع System.Boolean کار میکنید:
مقادیر مجاز
یک متغیر از نوع bool تنها میتواند دو مقدار زیر را داشته باشد:
• true (صحیح)
• false (نادرست)
تلاش برای مقداردهی دیگر به یک متغیر bool باعث خطای کامپایلر خواهد شد.
کاربردهای رایج bool
نوع bool به طور گستردهای در عبارات شرطی مانند if، حلقههای while و do-while، و همچنین در اپراتورهای منطقی به کار میرود:
در این مثال، برنامه براساس مقدار متغیر isLoggedIn تصمیم میگیرد که چه پیامی نمایش داده شود.
عملیات منطقی روی bool
بر روی متغیرهای bool میتوانید عملیات منطقی انجام دهید، مثل:
• && (AND منطقی)
• || (OR منطقی)
• ! (NOT منطقی)
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#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
______
Docs
bool type - C# reference
Learn about the built-in boolean type in C#
👍13❤1🥰1
چرا میگن «C# is Java done right»؟
هر دو زبان جاوا و سیشارپ زبانهای خیلی قدرتمندی هستن و در پروژههای بزرگی استفاده میشن.
از طرفی باید قبول کرد که از لحاظ syntax، زبان سیشارپ پیشرفتهتر و خوشدستتر است.
این ویدئو ویژگیهای مهمی که در سیشارپ بهتر پیادهسازی شدن و باعث میشه زبان مدرنتری حساب بشه رو توضیح میده.
از معروفترین تفاوتها، پیادهسازی ناقص Generic ها در جاوا و پیادهسازی خوبش در سیشارپ است.
ویژگی Property و Async/Await هم یکی از ویژگیهای خیلی مهمه که مدتهاست در سیشارپ وجود داره.
همینطور LINQ ویژگی خیلی جذابیه که پیادهسازی مشابهش تو جاوا هم خیلی دیرتر اضافه شد، و هم اینکه به خوشدستی پیادهسازی سیشارپ نیست.
🔗 تو این ویدئوی کوتاه این تفاوتها رو خیلی واضحتر و لذتبخشتر توضیح داده.
نظر شما در مورد این دو تا زبان چیه؟
#java #csharp #dotnet
#مهران_داودی (لینکدین - بلاگ)
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
هر دو زبان جاوا و سیشارپ زبانهای خیلی قدرتمندی هستن و در پروژههای بزرگی استفاده میشن.
از طرفی باید قبول کرد که از لحاظ syntax، زبان سیشارپ پیشرفتهتر و خوشدستتر است.
این ویدئو ویژگیهای مهمی که در سیشارپ بهتر پیادهسازی شدن و باعث میشه زبان مدرنتری حساب بشه رو توضیح میده.
از معروفترین تفاوتها، پیادهسازی ناقص Generic ها در جاوا و پیادهسازی خوبش در سیشارپ است.
ویژگی Property و Async/Await هم یکی از ویژگیهای خیلی مهمه که مدتهاست در سیشارپ وجود داره.
همینطور LINQ ویژگی خیلی جذابیه که پیادهسازی مشابهش تو جاوا هم خیلی دیرتر اضافه شد، و هم اینکه به خوشدستی پیادهسازی سیشارپ نیست.
🔗 تو این ویدئوی کوتاه این تفاوتها رو خیلی واضحتر و لذتبخشتر توضیح داده.
نظر شما در مورد این دو تا زبان چیه؟
#java #csharp #dotnet
#مهران_داودی (لینکدین - بلاگ)
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
YouTube
C# is Java done right
Java devs don't want to hear this, but C# is Java done right... supposedly. That's what people are saying. But why? Why do people think C# is Java done right? That's what we go over in this video. Enjoy!
Also note, I'm a Java 8 dev. I try my best to keep…
Also note, I'm a Java 8 dev. I try my best to keep…
3👍18🔥10❤6
بررسی کامل انواع عددی صحیح (Integral Numeric Types) در زبان سی شارپ
#csharp_for_beginners
در زبان برنامهنویسی سی شارپ، انواع دادهای عددی صحیح (Integral Numeric Types) برای نمایش اعداد صحیح بدون قسمت اعشاری استفاده میشوند. این انواع دادهای بخش جداییناپذیری از عملیات ریاضی، شمارش، محاسبه شاخص آرایهها، و کنترل جریان برنامه هستند. در این مقاله با جزئیات کامل انواع دادهای صحیح، ویژگیها، تفاوتها و کاربردهای آنها آشنا خواهیم شد.
دستهبندی انواع عددی صحیح
انواع عددی صحیح در سی شارپ به دو دسته اصلی تقسیم میشوند:
۱. انواع علامتدار (Signed): میتوانند اعداد منفی و مثبت را نمایش دهند.
۲. انواع بدون علامت (Unsigned): فقط اعداد مثبت و صفر را پشتیبانی میکنند.
در جدول زیر، لیستی از انواع دادهای صحیح در سی شارپ به همراه ویژگیهای کلیدی آنها آمده است:
ویژگیهای عمومی انواع عددی صحیح
تمامی انواع بالا ویژگیهای مشترک زیر را دارند:
• نوع مقدار (Value Type): برخلاف کلاسها، این نوعها مستقیماً مقدار را نگهداری میکنند، نه اشاره به آن.
• مقدار پیشفرض: برای همه این نوعها مقدار پیشفرض برابر صفر (0) است.
• ثابتهای MinValue و MaxValue: هر نوع دارای دو ثابت برای نمایش کمترین و بیشترین مقدار قابل نگهداری است.
• پشتیبانی از عملیات ریاضی: از جمله +, -, *, /, %، عملیات بیتی مانند &, |, ^, ~، عملیات مقایسهای مثل <, >, ==, !=، و عملیات شیفت <<, >>.
انواع nint و nuint
این دو نوع در نسخههای جدید سی شارپ معرفی شدهاند و برای سناریوهایی مناسباند که اندازه نوع باید متناسب با معماری سیستم (32 یا 64 بیت) باشد، مانند کار با اشارهگرها یا توابع سطح پایین سیستم عامل. این نوعها بهترتیب معادل با IntPtr و UIntPtr در .NET هستند.
استفاده از لیترالهای عددی
تبدیل نوع (Type Conversion)
هنگام تبدیل میان انواع عددی صحیح، باید به موارد زیر توجه کرد:
• تبدیل ضمنی (Implicit): زمانی که داده از نوع کوچکتر به نوع بزرگتر تبدیل میشود (مثلاً int به long)، بدون نیاز به دستور خاص.
• تبدیل صریح (Explicit): در حالت معکوس (مثلاً long به int)، به تبدیل صریح یا cast نیاز است و ممکن است دقت از بین برود.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#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
______
Docs
Integral numeric types
Learn the range, storage size, and uses for each of the integral numeric types.
👍7❤1
آشنایی با کلاسها در زبان برنامهنویسی سی شارپ
#csharp_for_beginners
در زبان برنامهنویسی سی شارپ، کلاسها (Classes) یکی از اصلیترین اجزای برنامهنویسی شیءگرا هستند. کلاسها ساختارهایی هستند که به برنامهنویس اجازه میدهند اشیاء (Objects) را تعریف کرده و رفتار و دادههای آنها را سازماندهی کنند. این مفهوم به ما کمک میکند تا برنامههایی ماژولار، قابل نگهداری و قابل گسترش بنویسیم.
تعریف کلاس
یک کلاس در سی شارپ مانند یک الگو یا قالب است. این قالب ویژگیها (Properties) و رفتارها (Methods)یی را تعریف میکند که یک شیء از آن کلاس میتواند داشته باشد. برای مثال، اگر بخواهیم یک کلاس به نام Car تعریف کنیم، میتوانیم ویژگیهایی مانند Color یا Speed و رفتارهایی مانند Drive() یا Stop() برای آن مشخص کنیم.
مثال سادهای از تعریف کلاس:
ایجاد نمونه (Instance)
برای استفاده از یک کلاس، باید از آن نمونهسازی کنیم. این نمونه یک شیء واقعی از کلاس است که میتوان از آن در برنامه استفاده کرد:
سازندهها (Constructors)
سازندهها متدی خاص در کلاس هستند که هنگام ایجاد یک شیء جدید فراخوانی میشوند. آنها معمولاً برای مقداردهی اولیه به ویژگیهای شیء استفاده میشوند:
و استفاده از آن:
دسترسی و سطح دسترسی
کلمات کلیدی مانند public، private، و protected تعیین میکنند که اعضای کلاس از کجا قابل دسترسی هستند. به طور پیشفرض، اعضای کلاس private هستند، یعنی فقط از داخل خود کلاس قابل دسترسیاند.
وراثت (Inheritance)
یکی از ویژگیهای قدرتمند کلاسها، وراثت است. یک کلاس میتواند از کلاس دیگری ارثبری کند و ویژگیها و رفتارهای آن را به ارث ببرد
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@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
______
Docs
Les classes dans le système de types C#. - C#
Découvrez les types de classes, comment utiliser les classes et comment créer de nouvelles déclarations de types de classes pour votre application.
👍9❤3🔥2
کار با دادههای 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 و قدرت دیتابیسهای رابطهای!
قابلیتهای کلیدی:
- استخراج مقادیر:
۱. قابلیت
۲. قابلیت
۳. قابلیت
۴. قابلیت
- تبدیل JSON به ردیفها:
- با
- نوع داده json:
- در SQL Server 2025 برای ذخیرهسازی و پردازش بهینهتر معرفی شده است.
- فرمتبندی خروجی به JSON:
- با
- ساخت اشیاء و آرایهها:
- توابع
کاربردها:
- سادهسازی مدلهای داده پیچیده
- مدیریت دادههای IoT، لاگها و REST API
- ذخیره JSON در ستونهای
---
تابع JSON_OBJECTAGG در Transact-SQL
این تابع به شما کمک میکند از دادههای SQL (ستونها، مقادیر یا نتایج تجمیعی) شیء JSON بسازید. زوجهای کلید/مقدار را دریافت میکند و خروجی استاندارد تحویل میدهد.
ویژگیها:
- استفاده در SELECT:
- قابل ترکیب با
- ساخت آرایههای JSON:
- برای آرایه به جای شیء، از
- دسترسی:
- در Azure SQL Database، Azure SQL Managed Instance (با Always-up-to-date) و Fabric Data Warehouse در دسترس است.
مثالهای کدی
مثال ۱: ساخت شیء JSON از دادههای یک جدول
فرض کنید جدولی به اسم
خروجی نمونه:
مثال ۲: ترکیب با GROUP BY برای دادههای تجمیعی
فرض کنید جدولی به اسم
خروجی نمونه:
‼️برای دیدن نمونه مثال و مطالعه بیشتر به لینکهای زیر مراجعه کنید:
🔗لینک اول
🔗لینک دوم
🔗لینک سوم
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#هوتن_همتی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
فرمت 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
_______
Microsoft News
Announcing the General Availability (GA) of JSON data type & JSON aggregates…
We are excited to announce the General Availability of the native JSON data type and JSON aggregates.
👍12👏4❤2
Forwarded from فلسفه دیزاین
طراحی، توسعه و انتشار یک وباپ با استفاده از هوش مصنوعی
هوش مصنوعی در حال تغییر نحوهی طراحی و توسعهی وباپلیکیشنهاست و اکنون میتوان کل فرآیند را از ایده تا انتشار تنها با کمک ابزارهای مبتنی بر هوش مصنوعی انجام داد. این تحول به طراحان و توسعهدهندگان اجازه میدهد تا بدون نیاز به مهارتهای عمیق برنامهنویسی، اپلیکیشنهایی حرفهای ایجاد کنند. در این مقاله، سه مرحلهی کلیدی برای طراحی، توسعه و انتشار یک وباپ تنها با استفاده از هوش مصنوعی بررسی شده است.
اولین مرحله، ایجاد یک ایده و طراحی رابط کاربری با استفاده از ابزارهای هوش مصنوعی مانند Figma و Uizard است. این ابزارها میتوانند از طریق توصیف متنی یا تصاویر ورودی، طرحهای اولیه را ایجاد کنند و به کاربران کمک کنند تا بدون نیاز به مهارت طراحی پیچیده، یک رابط کاربری مناسب بسازند. برخی از این ابزارها همچنین امکان پیشنهاد تغییرات و بهینهسازی طراحی را بر اساس بهترین شیوههای UX ارائه میدهند.
پس از طراحی، مرحلهی توسعه آغاز میشود که در آن هوش مصنوعی میتواند کدهای موردنیاز را تولید کند. ابزارهایی مانند ChatGPT (با قابلیت کدنویسی)، GitHub Copilot و Replit به کاربران امکان میدهند تا کدهای HTML، CSS، و JavaScript را تنها از طریق دستورات متنی ایجاد کنند. این فرایند باعث کاهش نیاز به دانش عمیق کدنویسی شده و توسعهی وباپلیکیشنها را برای افراد بیشتری قابلدسترس میکند.
پس از تولید کد، گام بعدی تست و بهینهسازی اپلیکیشن است. ابزارهای تست خودکار مبتنی بر هوش مصنوعی مانند Testim و Applitools میتوانند به سرعت باگها و مشکلات احتمالی را شناسایی کنند. این ابزارها، با استفاده از یادگیری ماشینی، میتوانند پیشنهاداتی برای بهبود عملکرد، امنیت و سازگاری وباپ ارائه دهند. این مرحله از اهمیت ویژهای برخوردار است، زیرا کیفیت محصول نهایی را تضمین میکند.
در نهایت، فرآیند انتشار و میزبانی وباپ نیز میتواند بهطور کامل توسط ابزارهای هوش مصنوعی انجام شود. پلتفرمهایی مانند Vercel و Netlify امکان استقرار خودکار را فراهم کرده و میتوانند بهینهسازیهایی مانند بارگذاری سریعتر صفحات و بهبود عملکرد سئو را پیشنهاد دهند. علاوه بر این، برخی ابزارهای هوش مصنوعی میتوانند توصیههایی برای ارتقای تجربهی کاربری و بهبود تعاملات کاربران ارائه کنند.
این تحول نشان میدهد که هوش مصنوعی نه تنها فرآیند طراحی و توسعه را سریعتر و آسانتر کرده، بلکه دسترسی به توسعهی وب را برای افراد بیشتری ممکن ساخته است. در گذشته، ساخت یک وباپلیکیشن نیاز به تیمهای تخصصی داشت، اما امروزه افراد میتوانند با ترکیب ابزارهای هوش مصنوعی، بهتنهایی یک محصول کامل را از ابتدا تا انتها توسعه دهند.
در حالی که این فناوری فرصتهای بزرگی ایجاد کرده است، همچنان چالشهایی مانند وابستگی بیش از حد به هوش مصنوعی، محدودیتهای سفارشیسازی و نیاز به کنترل کیفی انسانی وجود دارد. با این حال، آیندهی طراحی و توسعهی وباپلیکیشنها به وضوح به سمت خودکارسازی بیشتر حرکت میکند و طراحان و توسعهدهندگانی که از این ابزارها به درستی استفاده کنند، میتوانند بهرهوری خود را به طرز چشمگیری افزایش دهند.
🔗 برای مطالعه کامل مقاله میتوانید به این لینک مراجعه کنید.
(مدت زمان مطالعه: ۴ دقیقه)
گردآورنده: فاطمه حیدری
#طراحی_محصول
#AI
@Dexign فلسفه دیزاین
______
هوش مصنوعی در حال تغییر نحوهی طراحی و توسعهی وباپلیکیشنهاست و اکنون میتوان کل فرآیند را از ایده تا انتشار تنها با کمک ابزارهای مبتنی بر هوش مصنوعی انجام داد. این تحول به طراحان و توسعهدهندگان اجازه میدهد تا بدون نیاز به مهارتهای عمیق برنامهنویسی، اپلیکیشنهایی حرفهای ایجاد کنند. در این مقاله، سه مرحلهی کلیدی برای طراحی، توسعه و انتشار یک وباپ تنها با استفاده از هوش مصنوعی بررسی شده است.
اولین مرحله، ایجاد یک ایده و طراحی رابط کاربری با استفاده از ابزارهای هوش مصنوعی مانند Figma و Uizard است. این ابزارها میتوانند از طریق توصیف متنی یا تصاویر ورودی، طرحهای اولیه را ایجاد کنند و به کاربران کمک کنند تا بدون نیاز به مهارت طراحی پیچیده، یک رابط کاربری مناسب بسازند. برخی از این ابزارها همچنین امکان پیشنهاد تغییرات و بهینهسازی طراحی را بر اساس بهترین شیوههای UX ارائه میدهند.
پس از طراحی، مرحلهی توسعه آغاز میشود که در آن هوش مصنوعی میتواند کدهای موردنیاز را تولید کند. ابزارهایی مانند ChatGPT (با قابلیت کدنویسی)، GitHub Copilot و Replit به کاربران امکان میدهند تا کدهای HTML، CSS، و JavaScript را تنها از طریق دستورات متنی ایجاد کنند. این فرایند باعث کاهش نیاز به دانش عمیق کدنویسی شده و توسعهی وباپلیکیشنها را برای افراد بیشتری قابلدسترس میکند.
پس از تولید کد، گام بعدی تست و بهینهسازی اپلیکیشن است. ابزارهای تست خودکار مبتنی بر هوش مصنوعی مانند Testim و Applitools میتوانند به سرعت باگها و مشکلات احتمالی را شناسایی کنند. این ابزارها، با استفاده از یادگیری ماشینی، میتوانند پیشنهاداتی برای بهبود عملکرد، امنیت و سازگاری وباپ ارائه دهند. این مرحله از اهمیت ویژهای برخوردار است، زیرا کیفیت محصول نهایی را تضمین میکند.
در نهایت، فرآیند انتشار و میزبانی وباپ نیز میتواند بهطور کامل توسط ابزارهای هوش مصنوعی انجام شود. پلتفرمهایی مانند Vercel و Netlify امکان استقرار خودکار را فراهم کرده و میتوانند بهینهسازیهایی مانند بارگذاری سریعتر صفحات و بهبود عملکرد سئو را پیشنهاد دهند. علاوه بر این، برخی ابزارهای هوش مصنوعی میتوانند توصیههایی برای ارتقای تجربهی کاربری و بهبود تعاملات کاربران ارائه کنند.
این تحول نشان میدهد که هوش مصنوعی نه تنها فرآیند طراحی و توسعه را سریعتر و آسانتر کرده، بلکه دسترسی به توسعهی وب را برای افراد بیشتری ممکن ساخته است. در گذشته، ساخت یک وباپلیکیشن نیاز به تیمهای تخصصی داشت، اما امروزه افراد میتوانند با ترکیب ابزارهای هوش مصنوعی، بهتنهایی یک محصول کامل را از ابتدا تا انتها توسعه دهند.
در حالی که این فناوری فرصتهای بزرگی ایجاد کرده است، همچنان چالشهایی مانند وابستگی بیش از حد به هوش مصنوعی، محدودیتهای سفارشیسازی و نیاز به کنترل کیفی انسانی وجود دارد. با این حال، آیندهی طراحی و توسعهی وباپلیکیشنها به وضوح به سمت خودکارسازی بیشتر حرکت میکند و طراحان و توسعهدهندگانی که از این ابزارها به درستی استفاده کنند، میتوانند بهرهوری خود را به طرز چشمگیری افزایش دهند.
🔗 برای مطالعه کامل مقاله میتوانید به این لینک مراجعه کنید.
(مدت زمان مطالعه: ۴ دقیقه)
گردآورنده: فاطمه حیدری
#طراحی_محصول
#AI
@Dexign فلسفه دیزاین
______
Medium
Designing, developing, and deploying a web app entirely using AI
Take an idea and get it to production in three simple steps.
👍6❤2
آموزش گامبهگام دیباگ برنامههای 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
______
#csharp_for_beginners
۱. معرفی ویدیویی
• این قسمت از مجموعه، مخصوص رفع مشکلات دیباگی که قبلاً ایجاد شدهاند در VS Code برای پروژههای سیشارپ است.
۲. مروری بر شرایط خطا
• تمرکز بر Conditional Breakpoints (نقاط توقف شرطی) است؛ زمانی مفید که میخواهید در شرایط خاصی اجرای برنامه متوقف شود.
• در ویدیو، نشان داده میشود که چگونه این شرطها گاهی به درستی کار نمیکنند (مثلاً خطاهایی که باعث نمیشوند نقطه توقف فعال شود یا شرایط نادیده گرفته میشود).
۳. تنظیم دقیق Breakpointها
• توضیح گامبهگام نحوه افزودن یک Breakpoint شرطی با وارد کردن یک شرط مثل x == 5.
• نمایش اینکه چطور میتوان شرط را اصلاح یا حذف کرد تا دوباره قابلاستفاده شود.
۴. اشکالات رایج
• ممکن است VS Code یا اکستنشنی که استفاده میکنید، شرط را نادیده بگیرد یا اجرا را ادامه دهد.
• روشهایی برای رفع این مشکل بررسی میشود، از جمله بهروزرسانی اکستنشن، تغییر پیکربندی launch.json، و راهاندازی مجدد جلسه دیباگ.
۵. ابزارهای کمکی و دیباگ پیشرفته
• اشاره به ویژگیهایی مثل Watch (مشاهده متغیرها) و Call Stack برای درک بهتر وضعیت اجرا.
• نمایش اینکه چطور Breakpoint را در کدی فعال کنیم که در چند مسیر اجرا ممکن است قابل رسیدن باشد.
۶. نکات پایانی
• توصیه به آزمایش Breakpointهای شرطی در سناریوهای سادهتر قبل از اعمال در کد پیچیده.
• تشویق به مطالعه مستندات VS Code و مراجع مایکروسافت برای رفع خطاهای ناشی از ناسازگاری نسخه یا پیکربندی اشتباه
🔗 ویدئوی کامل را اینجا مشاهده کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
YouTube
Debugging C# Apps in VS Code [Pt 5] | C# and .NET Development in VS Code for Beginners
View full playlist: https://aka.ms/dotnet/beginnervideos/youtube/vscode
Get Started with .NET in VS Code: https://aka.ms/dotnet/get-started/vscode
This video will show how you can easily start debugging your code in VS Code using the C# Dev Kit extension.…
Get Started with .NET in VS Code: https://aka.ms/dotnet/get-started/vscode
This video will show how you can easily start debugging your code in VS Code using the C# Dev Kit extension.…
👍5❤1
معرفی کلاس <List<T در سیشارپ
#csharp_for_beginners
در زبان برنامهنویسی سیشارپ، مجموعهها (Collections) نقش بسیار مهمی در مدیریت دادهها ایفا میکنند. یکی از رایجترین و پرکاربردترین مجموعههای عمومی، کلاس <List<T است که در فضای نام System.Collections.Generic قرار دارد. این کلاس، یک لیست عمومی (Generic List) است که امکان ذخیرهسازی، دسترسی و مدیریت مجموعهای از عناصر از نوع مشخصشده را فراهم میکند.
تعریف کلی
کلاس <List<T لیسی دینامیک است که به صورت خودکار اندازهاش را بر اساس دادههای ورودی تغییر میدهد و برخلاف آرایهها، نیازی به تعیین اندازهی اولیه آن نیست.
ویژگیهای اصلی
•عمومی بودن نوع داده: میتوان لیستی از هر نوع دادهای ایجاد کرد (مثل <List<int یا <List<string ).
• پشتیبانی از عملیات متنوع: افزودن، حذف، جستوجو، مرتبسازی و … بهسادگی قابل انجام هستند.
• اندازهی متغیر: نیازی به تعیین اندازه در زمان تعریف نیست.
• دسترسی سریع با ایندکس: مانند آرایهها میتوان به اعضای لیست با استفاده از اندیس دسترسی داشت.
نمونه کد ساده
سازندهها (Constructors)
متدهای مهم کلاس List<T>
۱. Add
اضافه کردن یک عنصر به انتهای لیست.
۲. AddRange
اضافه کردن مجموعهای از عناصر به لیست.
۳. Remove
حذف اولین عنصر مشخصشده از لیست.
۴. RemoveAt
حذف عنصری که در یک ایندکس خاص قرار دارد.
۵. Clear
پاک کردن تمام عناصر لیست و خالی کردن آن.
۶. Contains
بررسی وجود یک عنصر در لیست.
۷. IndexOf
یافتن ایندکس اولین وقوع یک عنصر مشخص.
۸. Sort
مرتبسازی عناصر لیست به ترتیب صعودی یا با مقایسهگر سفارشی.
۹. Reverse
معکوس کردن ترتیب عناصر لیست.
۱۰. ToArray
تبدیل لیست به آرایه.
۱۱. Count
گرفتن تعداد عناصر موجود در لیست (ویژگی - property).
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
در زبان برنامهنویسی سیشارپ، مجموعهها (Collections) نقش بسیار مهمی در مدیریت دادهها ایفا میکنند. یکی از رایجترین و پرکاربردترین مجموعههای عمومی، کلاس <List<T است که در فضای نام System.Collections.Generic قرار دارد. این کلاس، یک لیست عمومی (Generic List) است که امکان ذخیرهسازی، دسترسی و مدیریت مجموعهای از عناصر از نوع مشخصشده را فراهم میکند.
تعریف کلی
public class List<T> : System.Collections.Generic.IList<T>,
System.Collections.Generic.ICollection<T>,
System.Collections.Generic.IEnumerable<T>,
System.Collections.IList,
System.Collections.ICollection,
System.Collections.IEnumerable
کلاس <List<T لیسی دینامیک است که به صورت خودکار اندازهاش را بر اساس دادههای ورودی تغییر میدهد و برخلاف آرایهها، نیازی به تعیین اندازهی اولیه آن نیست.
ویژگیهای اصلی
•عمومی بودن نوع داده: میتوان لیستی از هر نوع دادهای ایجاد کرد (مثل <List<int یا <List<string ).
• پشتیبانی از عملیات متنوع: افزودن، حذف، جستوجو، مرتبسازی و … بهسادگی قابل انجام هستند.
• اندازهی متغیر: نیازی به تعیین اندازه در زمان تعریف نیست.
• دسترسی سریع با ایندکس: مانند آرایهها میتوان به اعضای لیست با استفاده از اندیس دسترسی داشت.
نمونه کد ساده
List<string> names = new List<string>();
names.Add("Ali");
names.Add("Sara");
names.Add("Reza");
foreach (string name in names)
{
Console.WriteLine(name);
}
سازندهها (Constructors)
کلاس List<T> دارای چند سازنده برای ایجاد لیست است:
• List<T>()
ایجاد یک لیست خالی.
• List<T>(IEnumerable<T>)
ایجاد لیست با استفاده از مجموعهای دیگر.
• List<T>(int capacity)
تعریف ظرفیت اولیه لیست
—————————————————————
متدهای مهم کلاس List<T>
۱. Add
اضافه کردن یک عنصر به انتهای لیست.
۲. AddRange
اضافه کردن مجموعهای از عناصر به لیست.
۳. Remove
حذف اولین عنصر مشخصشده از لیست.
۴. RemoveAt
حذف عنصری که در یک ایندکس خاص قرار دارد.
۵. Clear
پاک کردن تمام عناصر لیست و خالی کردن آن.
۶. Contains
بررسی وجود یک عنصر در لیست.
۷. IndexOf
یافتن ایندکس اولین وقوع یک عنصر مشخص.
۸. Sort
مرتبسازی عناصر لیست به ترتیب صعودی یا با مقایسهگر سفارشی.
۹. Reverse
معکوس کردن ترتیب عناصر لیست.
۱۰. ToArray
تبدیل لیست به آرایه.
۱۱. Count
گرفتن تعداد عناصر موجود در لیست (ویژگی - property).
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
List<T> Class (System.Collections.Generic)
Represents a strongly typed list of objects that can be accessed by index. Provides methods to search, sort, and manipulate lists.
👍6❤5🔥3
پشته (Stack)
#csharp_for_beginners
در برنامهنویسی، ساختار دادهای پشته (Stack) یکی از رایجترین و کاربردیترین ساختارها برای مدیریت دادهها به شمار میرود. پشته بر اساس اصل LIFO (آخرین ورودی، اولین خروجی) عمل میکند. در چارچوب داتنت، کلاس Stack در فضای نام System.Collections برای این منظور طراحی شده است
معرفی کلاس Stack
کلاس Stack (نسخهٔ غیرجنریک) در فضای نام System.Collections قرار دارد و میتواند انواع مختلف دادهها (حتی null) را در خود نگه دارد. این کلاس با استفاده از نوع object، امکان ذخیرهٔ هر نوع دادهای را فراهم میکند
متدها و ویژگیهای اصلی
در این بخش مهمترین متدها و خواص کلاس Stack را بررسی میکنیم:
۱. Push(object obj)
افزودن یک عنصر به بالای پشته:
۲. Pop()
حذف و بازگرداندن عنصر بالای پشته:
۳. Peek()
فقط مشاهدهٔ عنصر بالای پشته بدون حذف آن:
۴. Count
تعداد عناصر موجود در پشته:
۵. Clear()
پاکسازی کامل پشته:
۶. Contains(object obj)
بررسی وجود یک عنصر خاص:
نمونهکد کامل:
خروجی:
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
در برنامهنویسی، ساختار دادهای پشته (Stack) یکی از رایجترین و کاربردیترین ساختارها برای مدیریت دادهها به شمار میرود. پشته بر اساس اصل LIFO (آخرین ورودی، اولین خروجی) عمل میکند. در چارچوب داتنت، کلاس Stack در فضای نام System.Collections برای این منظور طراحی شده است
معرفی کلاس Stack
کلاس Stack (نسخهٔ غیرجنریک) در فضای نام System.Collections قرار دارد و میتواند انواع مختلف دادهها (حتی null) را در خود نگه دارد. این کلاس با استفاده از نوع object، امکان ذخیرهٔ هر نوع دادهای را فراهم میکند
متدها و ویژگیهای اصلی
در این بخش مهمترین متدها و خواص کلاس Stack را بررسی میکنیم:
۱. Push(object obj)
افزودن یک عنصر به بالای پشته:
Stack stack = new Stack();
stack.Push("سلام");
stack.Push(123);
stack.Push(null);
۲. Pop()
حذف و بازگرداندن عنصر بالای پشته:
object top = stack.Pop(); // آخرین مقدار افزودهشده را برمیگرداند
۳. Peek()
فقط مشاهدهٔ عنصر بالای پشته بدون حذف آن:
object top = stack.Peek();
۴. Count
تعداد عناصر موجود در پشته:
int count = stack.Count;
۵. Clear()
پاکسازی کامل پشته:
stack.Clear();
۶. Contains(object obj)
بررسی وجود یک عنصر خاص:
bool hasHello = stack.Contains("سلام");
نمونهکد کامل:
Stack myStack = new Stack();
myStack.Push("Hello");
myStack.Push("World");
myStack.Push(null);
Console.WriteLine($"تعداد: {myStack.Count}");
while (myStack.Count > 0)
Console.WriteLine(myStack.Pop());
خروجی:
تعداد: 3
null
World
Hello
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Stack Class (System.Collections)
Represents a simple last-in-first-out (LIFO) non-generic collection of objects.
👍9❤7👏2
Forwarded from TondTech (مسعود بیگی)
✅ دوستان خوب و عزیزم سلام، من و تیم خوبم در #رسمیو، مدتی رو سرمون خلوت خواهد بود و دوست داریم به شکل مشاوره یا همکاری در انجام پروژه های شما (به صورت صفر تا صد یا مشارکت در پیاده سازی بخشی از سرویس هاتون) همراه باشیم .
✅ ما توی تیممون به جز توسعه دهندگان .net و React ، پروداکت منیجر و دیزاینر هم داریم اگر لازم داشته باشید برای این پروژه ها.
✅ کد تمیز و قابل گسترش مینویسیم، با هم سر استانداردهای مستندسازی به تفاهم خواهیم رسید.
✅ بعد از پایان پروژه هم، پروژه رو به تیم تون تحویل میدیم و اگر نیاز به آموزشی باشه، در حد توان راهنمایی و آموزش نیروهاتون رو هم بر عهده خواهیم گرفت.
خیلی به من لطف خواهید کرد اگر این پست را در همه ی گروه های فنی و بیزنسی تان منتشر کنید.
متاسفانه فعلا فقط از طریق اکانت تلگرام @StartupNerd وشماره 09308282925 در خدمت شما و پاسخگو خواهم بود.
🫂 مجددا از شما خواهش میکنم این پست رو (در همه ی گروه های خودتون که فکر میکنید ممکنه کسی به توانایی ما نیاز داشته باشه) بازنشر کنید
✅ ما توی تیممون به جز توسعه دهندگان .net و React ، پروداکت منیجر و دیزاینر هم داریم اگر لازم داشته باشید برای این پروژه ها.
✅ کد تمیز و قابل گسترش مینویسیم، با هم سر استانداردهای مستندسازی به تفاهم خواهیم رسید.
✅ بعد از پایان پروژه هم، پروژه رو به تیم تون تحویل میدیم و اگر نیاز به آموزشی باشه، در حد توان راهنمایی و آموزش نیروهاتون رو هم بر عهده خواهیم گرفت.
خیلی به من لطف خواهید کرد اگر این پست را در همه ی گروه های فنی و بیزنسی تان منتشر کنید.
متاسفانه فعلا فقط از طریق اکانت تلگرام @StartupNerd وشماره 09308282925 در خدمت شما و پاسخگو خواهم بود.
🫂 مجددا از شما خواهش میکنم این پست رو (در همه ی گروه های خودتون که فکر میکنید ممکنه کسی به توانایی ما نیاز داشته باشه) بازنشر کنید
❤11👍5🔥1
صف (Queue)
#csharp_for_beginners
در برنامهنویسی، صف (Queue) یکی از مهمترین ساختارهای دادهای است که بر پایه اصل اول وارد، اول خارج (FIFO) عمل میکند. کلاس <Queue<T در فضای نام System.Collections.Generic در داتنت (#C) پیادهسازی این ساختار را به شکلی ساده و قدرتمند فراهم کرده است.
کلاس <Queue<T از فضای نام System.Collections.Generic استفاده میکند و برای کار با مجموعهای از عناصر از نوع مشخص (Generic) طراحی شده است. این کلاس در اسمبلی System.Collections.dll قرار دارد
ویژگیهای اصلی
FIFO (اول وارد، اول خارج): عناصر به انتهای صف اضافه میشوند و از ابتدای آن حذف میشوند.
جنریک: میتوانید نوع داده مورد نظر خود را هنگام ایجاد صف مشخص کنید.
کارایی بالا : استفاده بهینه از حافظه و سرعت مناسب برای صفهایی با حجم بالا.
متدها و اعضای مهم
• Enqueue
این متد برای افزودن یک عنصر به انتهای صف استفاده میشود.
• Dequeue
برای حذف و بازگرداندن اولین عنصر صف از این متد استفاده میشود. اگر صف خالی باشد، اجرای این متد منجر به بروز خطا میشود.
• Peek
این متد بدون حذف عنصر، فقط اولین عنصر صف را بازمیگرداند. در صورتی که صف خالی باشد، خطا ایجاد میشود.
• Count
این ویژگی تعداد عناصر موجود در صف را بازمیگرداند و فقط قابل خواندن است.
• Clear
تمام عناصر موجود در صف را حذف میکند و صف را به وضعیت خالی برمیگرداند.
• Contains
بررسی میکند که آیا یک عنصر خاص در صف وجود دارد یا خیر. مقدار برگشتی این متد یک مقدار منطقی (true یا false) است.
• ToArray
تمامی عناصر موجود در صف را به یک آرایه کپی میکند و آن را بازمیگرداند.
• TrimExcess
این متد برای بهینهسازی حافظه استفاده میشود و ظرفیت صف را به اندازه واقعی دادهها کاهش میدهد.
• GetEnumerator
این متد امکان پیمایش صف با استفاده از حلقهها و الگوهای تکرار را فراهم میکند
کاربردهای رایج
کلاس <Queue<T در سناریوهای متعددی کاربرد دارد؛ از جمله:
مدیریت نوبت در سیستمهای کاربرمحور
الگوریتمهای گراف مانند جستجوی سطحی (BFS)
صفهای پردازش پیام در سیستمهای توزیعشده
مدیریت وظایف پسزمینه در برنامههای چندنخی
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
در برنامهنویسی، صف (Queue) یکی از مهمترین ساختارهای دادهای است که بر پایه اصل اول وارد، اول خارج (FIFO) عمل میکند. کلاس <Queue<T در فضای نام System.Collections.Generic در داتنت (#C) پیادهسازی این ساختار را به شکلی ساده و قدرتمند فراهم کرده است.
کلاس <Queue<T از فضای نام System.Collections.Generic استفاده میکند و برای کار با مجموعهای از عناصر از نوع مشخص (Generic) طراحی شده است. این کلاس در اسمبلی System.Collections.dll قرار دارد
ویژگیهای اصلی
FIFO (اول وارد، اول خارج): عناصر به انتهای صف اضافه میشوند و از ابتدای آن حذف میشوند.
جنریک: میتوانید نوع داده مورد نظر خود را هنگام ایجاد صف مشخص کنید.
کارایی بالا : استفاده بهینه از حافظه و سرعت مناسب برای صفهایی با حجم بالا.
متدها و اعضای مهم
• Enqueue
این متد برای افزودن یک عنصر به انتهای صف استفاده میشود.
• Dequeue
برای حذف و بازگرداندن اولین عنصر صف از این متد استفاده میشود. اگر صف خالی باشد، اجرای این متد منجر به بروز خطا میشود.
• Peek
این متد بدون حذف عنصر، فقط اولین عنصر صف را بازمیگرداند. در صورتی که صف خالی باشد، خطا ایجاد میشود.
• Count
این ویژگی تعداد عناصر موجود در صف را بازمیگرداند و فقط قابل خواندن است.
• Clear
تمام عناصر موجود در صف را حذف میکند و صف را به وضعیت خالی برمیگرداند.
• Contains
بررسی میکند که آیا یک عنصر خاص در صف وجود دارد یا خیر. مقدار برگشتی این متد یک مقدار منطقی (true یا false) است.
• ToArray
تمامی عناصر موجود در صف را به یک آرایه کپی میکند و آن را بازمیگرداند.
• TrimExcess
این متد برای بهینهسازی حافظه استفاده میشود و ظرفیت صف را به اندازه واقعی دادهها کاهش میدهد.
• GetEnumerator
این متد امکان پیمایش صف با استفاده از حلقهها و الگوهای تکرار را فراهم میکند
کاربردهای رایج
کلاس <Queue<T در سناریوهای متعددی کاربرد دارد؛ از جمله:
مدیریت نوبت در سیستمهای کاربرمحور
الگوریتمهای گراف مانند جستجوی سطحی (BFS)
صفهای پردازش پیام در سیستمهای توزیعشده
مدیریت وظایف پسزمینه در برنامههای چندنخی
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Queue<T> Class (System.Collections.Generic)
Represents a first-in, first-out collection of objects.
👍9❤6
آشنایی با Namespace
#csharp_for_beginners
۱. مفهوم Namespace
در سیشارپ، Namespace برای سازماندهی کد استفاده میشود و دو نقش مهم دارد:
سازماندهی داخلی: تقسیم کلاسها، ساختارها، رابطها و… در پروژه، به گونهای که ساختار واضحتری داشته باشند.
نمایش بیرونی: وقتی که برنامه یا کتابخانهای قرار است در جایی دیگر استفاده شود، نام اعضا (types) مشخص و قابل تفکیک هستند.
۲. نحوه تعریف Namespace
با کلیدواژه namespace و سپس یک شناسه (یا مجموعهای از شناسهها با نقطه)
یا روش جدید File‑scoped از C#10
۳. قوانین نامگذاری (Naming Guidelines)
توصیه میشود نامها شامل <شرکت>.<محصول یا تکنولوژی>[.<ویژگی>] باشند.
از PascalCase استفاده شود و از تغییر نامهای عمومی یا تککلمه مانند Log, Message خودداری شود تا از تداخل جلوگیری شود.
۴. نکات فنی و ساختاری
فضای جهانی (global namespace) همیشه حضور دارد و انواع بدون namespace در آن تعریف میشوند.
توصیه میشود برای سازماندهی فایلها، هر پوشه متناظر با یک namespace باشد. استفاده از پایه فایلها یک نوع استاندارد مدرن است.
۵. تو در تویی Namespace (Open Namespace )
میتوان namespace را داخل یک namespace دیگر تعریف کرد یا در فایلهای متعدد با یک نام مشترک تعریفهایی مجزا داشت و همه به هم ملحق میشوند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
۱. مفهوم Namespace
در سیشارپ، Namespace برای سازماندهی کد استفاده میشود و دو نقش مهم دارد:
سازماندهی داخلی: تقسیم کلاسها، ساختارها، رابطها و… در پروژه، به گونهای که ساختار واضحتری داشته باشند.
نمایش بیرونی: وقتی که برنامه یا کتابخانهای قرار است در جایی دیگر استفاده شود، نام اعضا (types) مشخص و قابل تفکیک هستند.
۲. نحوه تعریف Namespace
با کلیدواژه namespace و سپس یک شناسه (یا مجموعهای از شناسهها با نقطه)
namespace MyApp.Services
{
class MyService { }
}
یا روش جدید File‑scoped از C#10
csharp
namespace MyApp.Services;
class MyService { }
۳. قوانین نامگذاری (Naming Guidelines)
توصیه میشود نامها شامل <شرکت>.<محصول یا تکنولوژی>[.<ویژگی>] باشند.
از PascalCase استفاده شود و از تغییر نامهای عمومی یا تککلمه مانند Log, Message خودداری شود تا از تداخل جلوگیری شود.
۴. نکات فنی و ساختاری
فضای جهانی (global namespace) همیشه حضور دارد و انواع بدون namespace در آن تعریف میشوند.
توصیه میشود برای سازماندهی فایلها، هر پوشه متناظر با یک namespace باشد. استفاده از پایه فایلها یک نوع استاندارد مدرن است.
۵. تو در تویی Namespace (Open Namespace )
میتوان namespace را داخل یک namespace دیگر تعریف کرد یا در فایلهای متعدد با یک نام مشترک تعریفهایی مجزا داشت و همه به هم ملحق میشوند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Organizing types in namespaces - C#
Learn how namespaces help you organize related types.
❤4👍3🔥1
تبدیل نوع (Casting & Type Conversions) در سیشارپ
#csharp_for_beginners
در زبان برنامهنویسی سیشارپ، متغیرها انواع (Types) مختلفی دارند؛ مانند int، double، string و غیره. گاهی اوقات نیاز داریم مقدار یک نوع را به نوعی دیگر تبدیل کنیم. این فرآیند تبدیل نوع (Type Conversion) یا Casting نامیده میشود. سیشارپ دو نوع اصلی تبدیل دارد:
Implicit Conversion
Explicit Conversion / Casting
تبدیل ضمنی (Implicit Conversion)
در این نوع تبدیل، کامپایلر خودش بهطور خودکار نوع را تبدیل میکند، چون خطر از دست رفتن داده وجود ندارد. مثلاً وقتی مقدار int را به long تبدیل میکنیم:
تبدیل صریح (Explicit Conversion / Casting)
زمانی که احتمال از بین رفتن اطلاعات وجود دارد یا کامپایلر نمیتواند بهطور خودکار نوع را تبدیل کند، باید از cast صریح استفاده کنیم:
استفاده از توابع Convert
سیشارپ کلاس System.Convert را برای تبدیل بین انواع مختلف فراهم کرده است:
استفاده از Parse و TryParse
برای تبدیل رشته به عدد (یا انواع مشابه)، میتوان از متد Parse یا TryParse استفاده کرد:
تبدیل نوعهای مرجع (Reference Types)
در حالتهای پیشرفتهتر، تبدیل نوع بین کلاسها (مثلاً از یک کلاس فرزند به کلاس والد یا برعکس) هم امکانپذیر است:
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
در زبان برنامهنویسی سیشارپ، متغیرها انواع (Types) مختلفی دارند؛ مانند int، double، string و غیره. گاهی اوقات نیاز داریم مقدار یک نوع را به نوعی دیگر تبدیل کنیم. این فرآیند تبدیل نوع (Type Conversion) یا Casting نامیده میشود. سیشارپ دو نوع اصلی تبدیل دارد:
Implicit Conversion
Explicit Conversion / Casting
تبدیل ضمنی (Implicit Conversion)
در این نوع تبدیل، کامپایلر خودش بهطور خودکار نوع را تبدیل میکند، چون خطر از دست رفتن داده وجود ندارد. مثلاً وقتی مقدار int را به long تبدیل میکنیم:
int myInt = 100;
long myLong = myInt; // تبدیل ضمنی
تبدیل صریح (Explicit Conversion / Casting)
زمانی که احتمال از بین رفتن اطلاعات وجود دارد یا کامپایلر نمیتواند بهطور خودکار نوع را تبدیل کند، باید از cast صریح استفاده کنیم:
double myDouble = 123.45;
int myInt = (int)myDouble; // تبدیل صریح
استفاده از توابع Convert
سیشارپ کلاس System.Convert را برای تبدیل بین انواع مختلف فراهم کرده است:
string myString = "123";
int myInt = Convert.ToInt32(myString); // تبدیل رشته به عدد صحیح
استفاده از Parse و TryParse
برای تبدیل رشته به عدد (یا انواع مشابه)، میتوان از متد Parse یا TryParse استفاده کرد:
string myString = "456";
int myInt = int.Parse(myString); // اگر رشته ناصحیح باشد، استثناء رخ میدهد
bool success = int.TryParse(myString, out int result);
// اگر موفق باشد، result مقدار عددی میگیرد، در غیر این صورت صفر میشود
تبدیل نوعهای مرجع (Reference Types)
در حالتهای پیشرفتهتر، تبدیل نوع بین کلاسها (مثلاً از یک کلاس فرزند به کلاس والد یا برعکس) هم امکانپذیر است:
object obj = "Hello";
string str = (string)obj; // تبدیل صریح با cast
// استفاده از 'as'
string str2 = obj as string; // اگر نشود، مقدار null برمیگرداند
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Casting and type conversions - C#
Learn about casting and type conversions, such as implicit, explicit (casts), and user-defined conversions.
👍8❤7
جایگزینهایی برای کتابخانههای محبوب AutoMapper و MediatR
همانطور که احتمالا در جریان هستید، دو کتابخانه محبوب و پرکاربرد یعنی AutoMapper و MediatR قرار است بهزودی نسخههای تجاری داشته باشند و دیگر کاملاً متنباز نخواهند بود. جیمی بوگارد، توسعهدهنده اصلی این پروژهها، اعلام کرده که برای ادامه توسعه و پشتیبانی، باید مدل تجاری را تهیه کنید.
❗️این یعنی ممکن است در آینده برای استفاده از نسخههای جدید یا پشتیبانی، نیاز به پرداخت هزینه باشد.
پس اگه در پروژههای خود از این پکیجها استفاده میکنید، باید زودتر تصمیم بگیرید که میخواهید از چه جایگزینهایی استفاده کنید. یا این که خب پولش رو بدید :)
البته خیلی هم بد نشد! Automapper داشت از Reflection استفاده میکرد در حالی که جایگزینهایی ساخته شدهاند که زمان کامپایل Mapping را انجام میدهند و حداقل ۴ برابر سرعت بهتر و همچنین استفاده منابع کمتری نیاز دارند.
به هر حال جایگزینهای متنوعی وجود دارد ولی بررسیهایی که من برای پروژههای فعال انجام دادم به دو نتیجه رسیدم که اینجا مطرح میکنم، ممنون میشم اگه پیشنهاد بهتری دارید یا چنانچه موافق هستید، توی کامنت همین پست نظر خود را به اشتراک بذارید
این دو گزینه Mapperly و Mapster هستند.
بین اینها هم از لحاظ آپدیت بودن سورس کد گیت هاب، راحتی بهتر برای دیباگ و رفع خطای بهتر و ... هم از Mapperly استفاده میکنم.
🔗 در این لینک به مقایسه اجمالی بین Mapper ها پرداخته.
❓در مورد MediatR چه پیشنهادی دارید و به چه نتیجهای رسیدید؟ لطفا تجربه خود را با ما به اشتراک بگذارید ...
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
همانطور که احتمالا در جریان هستید، دو کتابخانه محبوب و پرکاربرد یعنی AutoMapper و MediatR قرار است بهزودی نسخههای تجاری داشته باشند و دیگر کاملاً متنباز نخواهند بود. جیمی بوگارد، توسعهدهنده اصلی این پروژهها، اعلام کرده که برای ادامه توسعه و پشتیبانی، باید مدل تجاری را تهیه کنید.
❗️این یعنی ممکن است در آینده برای استفاده از نسخههای جدید یا پشتیبانی، نیاز به پرداخت هزینه باشد.
پس اگه در پروژههای خود از این پکیجها استفاده میکنید، باید زودتر تصمیم بگیرید که میخواهید از چه جایگزینهایی استفاده کنید. یا این که خب پولش رو بدید :)
البته خیلی هم بد نشد! Automapper داشت از Reflection استفاده میکرد در حالی که جایگزینهایی ساخته شدهاند که زمان کامپایل Mapping را انجام میدهند و حداقل ۴ برابر سرعت بهتر و همچنین استفاده منابع کمتری نیاز دارند.
به هر حال جایگزینهای متنوعی وجود دارد ولی بررسیهایی که من برای پروژههای فعال انجام دادم به دو نتیجه رسیدم که اینجا مطرح میکنم، ممنون میشم اگه پیشنهاد بهتری دارید یا چنانچه موافق هستید، توی کامنت همین پست نظر خود را به اشتراک بذارید
این دو گزینه Mapperly و Mapster هستند.
بین اینها هم از لحاظ آپدیت بودن سورس کد گیت هاب، راحتی بهتر برای دیباگ و رفع خطای بهتر و ... هم از Mapperly استفاده میکنم.
🔗 در این لینک به مقایسه اجمالی بین Mapper ها پرداخته.
❓در مورد MediatR چه پیشنهادی دارید و به چه نتیجهای رسیدید؟ لطفا تجربه خود را با ما به اشتراک بگذارید ...
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
Medium
Choosing the Right .NET Core Object Mapper: A Comparative Guide
Object mapping is a fundamental practice in software development, enabling us to convert one type of object to another in a programmatic…
1❤15👍7🔥3👏1
متغیرهای محلی با نوع ضمنی (var) در سیشارپ
#csharp_for_beginners
در سیشارپ، زمانی که متغیری را با استفاده از کلیدواژه var تعریف میکنید، نیازی به مشخص کردن نوع آن ندارید؛ زیرا کامپایلر نوع مناسب را از بند عبارت سمت راست تشخیص میدهد.
نوع ممکن است جزئی از انواع داخلی مثل int یا string باشد، یا حتی انواع ناشناس (anonymous types) یا انواع تعریفشده توسط کاربر یا کتابخانههای داتنت.
نمونههای کاربردی
مثالهایی از تعریف متغیرهای ضمنی با var:
محدودیتها و قوانین استفاده
-ابتدا باید مقداردهی شود: var فقط در صورتی کاربرد دارد که متغیر در همان خط تعریف، مقداردهی شده باشد. تعریف بدون مقدار (var x;) یا مقداردهی به null، باعث خطا میشود.
-قابل استفاده فقط در سطح محلی: نمیتوان از var برای تعریف فیلدهای سطح کلاس، پارامترهای متد یا نوع بازگشتی متد استفاده کرد.
تعریف همزمان چند متغیر با
-نوع متغیر در طول زمان تغییر نمیکند: نوعی که کامپایلر تشخیص میدهد ثابت است.
کاربرد در LINQ و انواع ناشناس
در بسیاری از موارد استفاده از var اختیاری است؛ اما زمانی که نوع ناشناس بهکار رفته، استفاده از var الزامی است، زیرا نوع ناشناس نام مشخصی ندارد:
بدون
چه زمانی بهتر است یا بهتر نیست از var استفاده شود؟
استفاده از var خوانایی کد را بیشتر میکند، بهویژه در مواردی که نوع پیچیدهای پشت مقدار است (مثلاً Dictionary<string, List<int>>).
در اسناد رسمی مایکروسافت توصیه میشود از
یکی از ابزارهای IDE (مثل Visual Studio) امکان تبدیل
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
در سیشارپ، زمانی که متغیری را با استفاده از کلیدواژه var تعریف میکنید، نیازی به مشخص کردن نوع آن ندارید؛ زیرا کامپایلر نوع مناسب را از بند عبارت سمت راست تشخیص میدهد.
نوع ممکن است جزئی از انواع داخلی مثل int یا string باشد، یا حتی انواع ناشناس (anonymous types) یا انواع تعریفشده توسط کاربر یا کتابخانههای داتنت.
نمونههای کاربردی
مثالهایی از تعریف متغیرهای ضمنی با var:
var i = 5; // نوع int
var s = "Hello"; // نوع string
var a = new[] { 0, 1, 2 }; // نوع int[]
var expr = from c in customers where c.City == "London" select c; // IEnumerable<Customer> یا IQueryable<Customer>
var anon = new { Name = "Terry", Age = 34 }; // نوع ناشناس
var list = new List<int>(); // List<int>
محدودیتها و قوانین استفاده
-ابتدا باید مقداردهی شود: var فقط در صورتی کاربرد دارد که متغیر در همان خط تعریف، مقداردهی شده باشد. تعریف بدون مقدار (var x;) یا مقداردهی به null، باعث خطا میشود.
-قابل استفاده فقط در سطح محلی: نمیتوان از var برای تعریف فیلدهای سطح کلاس، پارامترهای متد یا نوع بازگشتی متد استفاده کرد.
تعریف همزمان چند متغیر با
var
امکانپذیر نیست، نظیر: var a = 1, b = 2;
باعث خطا میشود.-نوع متغیر در طول زمان تغییر نمیکند: نوعی که کامپایلر تشخیص میدهد ثابت است.
کاربرد در LINQ و انواع ناشناس
در بسیاری از موارد استفاده از var اختیاری است؛ اما زمانی که نوع ناشناس بهکار رفته، استفاده از var الزامی است، زیرا نوع ناشناس نام مشخصی ندارد:
var studentQuery = from student in students
where student.FirstName[0] == firstLetter
select new { student.FirstName, student.LastName };
foreach (var anonType in studentQuery)
{
Console.WriteLine($"First = {anonType.FirstName}, Last = {anonType.LastName}");
}
بدون
var
، امکان دسترسی به خواص این نوعها وجود ندارد.چه زمانی بهتر است یا بهتر نیست از var استفاده شود؟
استفاده از var خوانایی کد را بیشتر میکند، بهویژه در مواردی که نوع پیچیدهای پشت مقدار است (مثلاً Dictionary<string, List<int>>).
در اسناد رسمی مایکروسافت توصیه میشود از
var
فقط زمانی استفاده کنید که نوع از مقدار سمت راست بهوضوح مشخص باشد. یعنی اگر از خواننده انتظار دارید نوع را تشخیص دهد، فقط در آن صورت از var
استفاده کنید.یکی از ابزارهای IDE (مثل Visual Studio) امکان تبدیل
var
به نوع صریح (explicit type
) را برای خوانایی بیشتر فراهم کرده است؛ البته در شرایطی که مقدار در همان خط تعریف نشده یا نوع ناشناس نیست.🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Implicitly typed local variables - C#
The var keyword in C# instructs the compiler to infer the type of the variable from the expression on the right side of the initialization statement.
👍7❤2🔥2
تجربه معماری شش ضلعی در نتفلیکس
وقتی تیم Studio Workflows در نتفلیکس تصمیم گرفت اپلیکیشن جدیدی برای مدیریت تولید محتوا بسازد، با چالشی بزرگ روبهرو شد: دادههایی که نیاز داشتند، در سیستمهای مختلف پخش شده بود — از gRPC گرفته تا GraphQL و JSON API.
آنها میدانستند که این منابع داده قرار است در آینده تغییر کنند، ولی نمیخواستند منطق برنامههایشان هر بار به هم بریزد. برای همین تصمیم گرفتند از معماری ششضلعی (Hexagonal Architecture) استفاده کنند.
نتیجه؟ وقتی مجبور شدند منبع داده را از JSON API به GraphQL تغییر دهند، بدون آنکه منطق اصلی برنامه دست بخورد!
این معماری کمک کرد تا:
- منطق کسبوکار را از منابع داده جدا کنند.
- تستنویسی راحتتر و سریعتری داشته باشند.
- برای تغییرات آینده آماده باشند.
اگه دوست داری بیشتر دربارهی این تجربه بخونی، این مقالهی نتفلیکس رو از دست نده:
🔗 تجربهی نتفلیکس با معماری ششضلعی یا Hexagonal Architecture
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
وقتی تیم Studio Workflows در نتفلیکس تصمیم گرفت اپلیکیشن جدیدی برای مدیریت تولید محتوا بسازد، با چالشی بزرگ روبهرو شد: دادههایی که نیاز داشتند، در سیستمهای مختلف پخش شده بود — از gRPC گرفته تا GraphQL و JSON API.
آنها میدانستند که این منابع داده قرار است در آینده تغییر کنند، ولی نمیخواستند منطق برنامههایشان هر بار به هم بریزد. برای همین تصمیم گرفتند از معماری ششضلعی (Hexagonal Architecture) استفاده کنند.
نتیجه؟ وقتی مجبور شدند منبع داده را از JSON API به GraphQL تغییر دهند، بدون آنکه منطق اصلی برنامه دست بخورد!
این معماری کمک کرد تا:
- منطق کسبوکار را از منابع داده جدا کنند.
- تستنویسی راحتتر و سریعتری داشته باشند.
- برای تغییرات آینده آماده باشند.
اگه دوست داری بیشتر دربارهی این تجربه بخونی، این مقالهی نتفلیکس رو از دست نده:
🔗 تجربهی نتفلیکس با معماری ششضلعی یا Hexagonal Architecture
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
Medium
Ready for changes with Hexagonal Architecture
A story on how we leveraged Hexagonal Architecture principles to be prepared for changes in the Netflix Studio ecosystem.
1👍8❤4🔥2
مدیریت بهتر سرویس های self-hosted
اگر سایت و اپلیکیشنهای خود را روی سرورهای ویندوزی و لینوکسی بالا میآورید و از سرویسهای ابری استفاده نمیکنید، احتمالا مشکلاتی در مدیریت سرویسهای خود دارید.
از دیپلوی کردن گرفته تا مدیریت بکآپها و نسخههای مختلف و Environment های متفاوت که کنترل این موارد به صورت دستی مشکل است و علاوه بر آن ریسک ایجاد مشکل در سرویسها را بالا میبرد.
ابزارهای متنوعی برای مدیریت این موضوع وجود دارد مثل Heroku، Vercel یا Netlify که محدودیتهای زیادی دارند.
- ابزاری اوپن سورس و رایگان وجود دارد به نام Coolify
ابزاری اوپنسورس و سلفهاستد (self-hosted) که به شما اجازه میدهد خیلی راحت پروژههای خود را روی سرور خود دیپلوی و مدیریت کنید.
بدون نیاز به کلی کانفیگ عجیب غریب، میتوانید با چند کلیک ساده سرویسهایی مثل دیتابیس، اپلیکیشنهای داکری، یا حتی پروژههای Next.js و Laravel و Asp.net و ... را ران کنید.
🔗 آدرس گیتهاب.
📖 مستندات کامل.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
اگر سایت و اپلیکیشنهای خود را روی سرورهای ویندوزی و لینوکسی بالا میآورید و از سرویسهای ابری استفاده نمیکنید، احتمالا مشکلاتی در مدیریت سرویسهای خود دارید.
از دیپلوی کردن گرفته تا مدیریت بکآپها و نسخههای مختلف و Environment های متفاوت که کنترل این موارد به صورت دستی مشکل است و علاوه بر آن ریسک ایجاد مشکل در سرویسها را بالا میبرد.
ابزارهای متنوعی برای مدیریت این موضوع وجود دارد مثل Heroku، Vercel یا Netlify که محدودیتهای زیادی دارند.
- ابزاری اوپن سورس و رایگان وجود دارد به نام Coolify
ابزاری اوپنسورس و سلفهاستد (self-hosted) که به شما اجازه میدهد خیلی راحت پروژههای خود را روی سرور خود دیپلوی و مدیریت کنید.
بدون نیاز به کلی کانفیگ عجیب غریب، میتوانید با چند کلیک ساده سرویسهایی مثل دیتابیس، اپلیکیشنهای داکری، یا حتی پروژههای Next.js و Laravel و Asp.net و ... را ران کنید.
🔗 آدرس گیتهاب.
📖 مستندات کامل.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
GitHub
GitHub - coollabsio/coolify: An open-source & self-hostable Heroku / Netlify / Vercel alternative.
An open-source & self-hostable Heroku / Netlify / Vercel alternative. - coollabsio/coolify
1❤12🔥4👍2
آشنایی باScope of Variables در سیشارپ
#csharp_for_beginners
در سیشارپ Scope به معنای محدودهای است که یک متغیر در برنامه قابل دسترسی بوده و قابل استفاده است. در زبان سیشارپ، محدودهی تغییرپذیری متغیرها معمولاً به سه سطح اصلی تقسیم میشود: در سطح کلاس (Class-Level Scope)، در سطح متد (Method-Level Scope)، و در سطح بلوک (Block-Level Scope)
۱. سطح کلاس Class-Level Scope
متغیرهایی که در داخل کلاس اما بیرون از تمامی متدها تعریف میشوند، دارای محدودهی سطح کلاس هستند و بهعنوان field یا اعضای کلاس شناخته میشوند. این متغیرها در تمامی متدها و بلوکهای همان کلاس قابل دسترسیاند—مگر دسترسی آنها توسط Access Modifier محدود شده باشد، اما داخل همان کلاس تأثیری بر دسترسی ندارد.
مثال:
۲. سطح متد Method-Level Scope
متغیرهایی که در داخل یک متد تعریف میشوند، محدودهی سطح متد دارند و بهعنوان local variables شناخته میشوند. این متغیرها فقط در همان متد قابل دسترسیاند. همچنین امکان تعریف دو متغیر با نام یکسان در یک محدوده وجود ندارد و دسترسی به آنها پس از خاتمهی اجرای متد ممکن نیست.
۳. سطح بلوک Block-Level Scope
متغیرهایی که در داخل یک بلوک مانند if، for، { ... } یا دیگر ساختارهای کنترلی تعریف شوند، محدودهی بلوکی دارند. یعنی تنها در همان بلوک (یا بلوکهای تو در تو) قابل استفادهاند و خارج از آن بلوک قابل دسترسی نیستند.
مثال:
نکته: Shadowing در سیشارپ
در بسیاری از زبانها، متغیرهایی که در داخل بلوک داخلی تعریف میشوند میتوانند متغیرهای بیرونی با همان نام را مخفی یا Shadow کنند. اما در سیشارپ، shadowing نام متغیرها بین بلوک شرطی (if) و متد مجاز نیست—اگرچه بین کلاس و متد یا بین کلاسها ممکن است.
قواعد Scope در سیشارپ:
۱ .ساختاریافتهتر و خواناتر باشند.
۲. از خطاهایی مانند استفاده از متغیر خارج از محدوده جلوگیری شود.
۳. حافظه بهینهتر مدیریت گردد، چرا که متغیرهای محلی پس از انجام وظیفه آزاد میشوند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
در سیشارپ Scope به معنای محدودهای است که یک متغیر در برنامه قابل دسترسی بوده و قابل استفاده است. در زبان سیشارپ، محدودهی تغییرپذیری متغیرها معمولاً به سه سطح اصلی تقسیم میشود: در سطح کلاس (Class-Level Scope)، در سطح متد (Method-Level Scope)، و در سطح بلوک (Block-Level Scope)
۱. سطح کلاس Class-Level Scope
متغیرهایی که در داخل کلاس اما بیرون از تمامی متدها تعریف میشوند، دارای محدودهی سطح کلاس هستند و بهعنوان field یا اعضای کلاس شناخته میشوند. این متغیرها در تمامی متدها و بلوکهای همان کلاس قابل دسترسیاند—مگر دسترسی آنها توسط Access Modifier محدود شده باشد، اما داخل همان کلاس تأثیری بر دسترسی ندارد.
مثال:
class Geeks {
int a = 10; // کلاس-سطح
public void Display() {
Console.WriteLine(a); // قابل دسترسی
}
}
۲. سطح متد Method-Level Scope
متغیرهایی که در داخل یک متد تعریف میشوند، محدودهی سطح متد دارند و بهعنوان local variables شناخته میشوند. این متغیرها فقط در همان متد قابل دسترسیاند. همچنین امکان تعریف دو متغیر با نام یکسان در یک محدوده وجود ندارد و دسترسی به آنها پس از خاتمهی اجرای متد ممکن نیست.
۳. سطح بلوک Block-Level Scope
متغیرهایی که در داخل یک بلوک مانند if، for، { ... } یا دیگر ساختارهای کنترلی تعریف شوند، محدودهی بلوکی دارند. یعنی تنها در همان بلوک (یا بلوکهای تو در تو) قابل استفادهاند و خارج از آن بلوک قابل دسترسی نیستند.
مثال:
for (int i = 0; i < 5; i++) {
Console.WriteLine(i);
}
// Console.WriteLine(i); // خطا—خارج از بلوک for
نکته: Shadowing در سیشارپ
در بسیاری از زبانها، متغیرهایی که در داخل بلوک داخلی تعریف میشوند میتوانند متغیرهای بیرونی با همان نام را مخفی یا Shadow کنند. اما در سیشارپ، shadowing نام متغیرها بین بلوک شرطی (if) و متد مجاز نیست—اگرچه بین کلاس و متد یا بین کلاسها ممکن است.
قواعد Scope در سیشارپ:
۱ .ساختاریافتهتر و خواناتر باشند.
۲. از خطاهایی مانند استفاده از متغیر خارج از محدوده جلوگیری شود.
۳. حافظه بهینهتر مدیریت گردد، چرا که متغیرهای محلی پس از انجام وظیفه آزاد میشوند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
GeeksforGeeks
C# Scope of Variables - GeeksforGeeks
Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.
👍7
اجرای مستقیم فایلهای سیشارپ با dotnet run
آیا تا به حال برای تست یک کد ساده سیشارپ مجبور بودهاید پروژه بسازید و فایل .csproj درست کنید!
با نسخه جدید NET 10. میتونید فایلی ساده مثل app.cs را مستقیم با دستور زیر اجرا کنید:
برای اسکریپتهای سریع، تست یک ایده یا حتی آموزش، این فیچر بسیار کاربردی است و بدون هیچ وابستگی اضافهای کار میکند.
برای اضافه کردن پکیجهای NuGet مستقیم داخل فایل:
برای مشخص کردن نوع SDK پروژه:
برای تنظیم ویژگیهای Build مثل نسخه زبان:
نهایتا میتوان همین فایل را به پروژهای کامل هم تبدیل کرد:
📖 مستندات کامل را اینجا ببینید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
آیا تا به حال برای تست یک کد ساده سیشارپ مجبور بودهاید پروژه بسازید و فایل .csproj درست کنید!
با نسخه جدید NET 10. میتونید فایلی ساده مثل app.cs را مستقیم با دستور زیر اجرا کنید:
dotnet run app.cs
برای اسکریپتهای سریع، تست یک ایده یا حتی آموزش، این فیچر بسیار کاربردی است و بدون هیچ وابستگی اضافهای کار میکند.
برای اضافه کردن پکیجهای NuGet مستقیم داخل فایل:
#:package [email protected]
using Humanizer;
Console.WriteLine(DateTime.Now.AddDays(-3).Humanize());
برای مشخص کردن نوع SDK پروژه:
#:sdk Microsoft.NET.Sdk.Web
var app = WebApplication.Create();
app.MapGet("/", () => "Hello from ASP.NET Core!");
app.Run();
برای تنظیم ویژگیهای Build مثل نسخه زبان:
#:property LangVersion preview
Console.WriteLine("Using C# preview features!");
نهایتا میتوان همین فایل را به پروژهای کامل هم تبدیل کرد:
dotnet project convert app.cs
📖 مستندات کامل را اینجا ببینید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
Microsoft News
Announcing dotnet run app.cs – A simpler way to start with C# and .NET 10
Run C# files instantly with dotnet run app.cs, no project file needed! Coming to .NET 10, try it out today in Preview 4.
1❤10👍5🔥1
آیا هوش مصنوعی جای برنامهنویسان را میگیرد؟
شاید بهتر باشد بپرسیم: کدام برنامهنویسان با هوش مصنوعی جایگزین میشوند؟ در تیم CrystaCode، استفاده از ابزارهایی مثل GitHub Copilot باعث شده توسعهدهندگان ارشد بتوانند کاری را که قبلاً یک تیم در ۱۰ روز انجام میداد، تنها در ۴ ساعت به پایان برسانند. این یعنی مسیر سنتی رشد از طریق بازبینی کد و انجام کارهای تکراری، حالا فشردهتر و سریعتر شده. ابزارهای هوش مصنوعی دیگر فقط تکمیلکننده نیستند؛ آنها به همکارانی تبدیل شدهاند که تفکر معماری، درک سیستم و مهارت در طراحی راهحل را انجام میدهند.
در این چشمانداز جدید، توسعهدهندهای موفق خواهد بود که بتواند با هوش مصنوعی همکاری کند، نه اینکه با آن رقابت کند. مهارتهایی مثل توانایی طراحی end-to-end، درک کسبوکار و ارائه خروجی مستقل، حالا ارزشمندتر از صرفاً نوشتن کد هستند. توصیه من به برنامهنویسان تازهکار این است: سریعتر ارشد شوید. آینده منتظر شما نمیماند، بلکه با سرعت در حال حرکت است.
🔗 مطلب کامل را اینجا بخوانید.
#مهران_داودی (لینکدین - بلاگ)
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
شاید بهتر باشد بپرسیم: کدام برنامهنویسان با هوش مصنوعی جایگزین میشوند؟ در تیم CrystaCode، استفاده از ابزارهایی مثل GitHub Copilot باعث شده توسعهدهندگان ارشد بتوانند کاری را که قبلاً یک تیم در ۱۰ روز انجام میداد، تنها در ۴ ساعت به پایان برسانند. این یعنی مسیر سنتی رشد از طریق بازبینی کد و انجام کارهای تکراری، حالا فشردهتر و سریعتر شده. ابزارهای هوش مصنوعی دیگر فقط تکمیلکننده نیستند؛ آنها به همکارانی تبدیل شدهاند که تفکر معماری، درک سیستم و مهارت در طراحی راهحل را انجام میدهند.
در این چشمانداز جدید، توسعهدهندهای موفق خواهد بود که بتواند با هوش مصنوعی همکاری کند، نه اینکه با آن رقابت کند. مهارتهایی مثل توانایی طراحی end-to-end، درک کسبوکار و ارائه خروجی مستقل، حالا ارزشمندتر از صرفاً نوشتن کد هستند. توصیه من به برنامهنویسان تازهکار این است: سریعتر ارشد شوید. آینده منتظر شما نمیماند، بلکه با سرعت در حال حرکت است.
🔗 مطلب کامل را اینجا بخوانید.
#مهران_داودی (لینکدین - بلاگ)
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Dot Philosophy
Will AI Replace Developers? - Dot Philosophy
The question isn’t whether AI will replace developers, it’s which developers it will replace. The traditional path of slowly climbing the ladder through repetitive tasks and code reviews is being compressed. AI tools like Copilot are not just autocomplete…
5👍7❤2🔥1