+ در برابر $ (الحاق یا درونیابی؟)
همهی ما یه زمانی اینجوری رشته میساختیم:
string s = "User: " + name + " | Age: " + age;
این کد کار میکنه، ولی آیا بهترین، خواناترین و بهینهترین راهه؟
بیاید دو روش اصلی ساختن رشته در سیشارپ رو با تمام جزئیاتشون کالبدشکافی کنیم و ببینیم کی باید از کدوم استفاده کرد.
🔗 روش سنتی: الحاق با + و تلهی پرفورمنس
این سادهترین روشه. اپراتور + دو تا رشته رو به هم میچسبونه. اگه یکی از مقادیر رشته نباشه، #C به صورت خودکار متد ()ToString رو روش صدا میزنه.
string s = "User ID: " + 5; // خروجی: "User ID: 5"
اما تله بزرگ کجاست؟
یادتونه تو پست "رازهای string" گفتیم که stringها تغییرناپذیر (Immutable) هستن؟ این یعنی هر بار که از + استفاده میکنید، #C یه رشته کاملاً جدید در حافظه میسازه و قبلیها رو دور میریزه.
اگه این کار رو تو یه حلقه انجام بدید، دارید رسماً حافظه رو به آتیش میکشید و برنامهتون رو به شدت کند میکنید!
راه حل حرفهای (برای موارد پیچیده)
برای ساختن رشتههای داینامیک در حلقهها، همیشه از کلاس System.Text.StringBuilder استفاده کنید که بعداً مفصل در موردش صحبت میکنیم.
💲 روش مدرن و حرفهای: درونیابی با $ (String Interpolation)
این روش که با گذاشتن $ قبل از رشته فعال میشه، خواناترین و قدرتمندترین راه برای ساختن رشتههاست. شما میتونید متغیرها و عبارات #C رو مستقیم داخل رشته و بین آکولاد {} بنویسید.
int x = 4;
Console.WriteLine($"A square has {x} sides."); // خروجی: A square has 4 sides
قدرتهای پنهان درونیابی:
فرمتدهی 🎨: میتونید خروجی رو همونجا با گذاشتن : و یه "فرمت استرینگ" کنترل کنید. مثلاً برای نمایش عدد در مبنای هگزادسیمال:
string s = $"255 in hex is {byte.MaxValue:X2}"; // X2 یعنی هگزادسیمال با ۲ رقم
// خروجی: "255 in hex is FF"عبارات پیچیده 🤯: اگه عبارتتون پیچیدهست
یا خودش : داره (مثل اپراتور سهتایی)، کل عبارت رو داخل پرانتز بذارید:
bool b = true;
Console.WriteLine($"The answer is {(b ? 1 : 0)}");
رشتههای ثابت (از C# 10) 💎: اگه تمام مقادیر داخل $ ثابت باشن، خود رشته هم میتونه const باشه:
const string greeting = "Hello";
const string message = $"{greeting}, world";
رشتههای چند خطی (از C# 11) 📄: رشتههای درونیابی میتونن چند خطی هم باشن که کار رو خیلی راحتتر میکنه:
string s = $"This interpolation spans {1 + 1} lines";🤔 حرف حساب و انتخاب شما
برای چسبوندن دو یا سه تا رشته ساده ⟵ + کار راه اندازه.
برای هر حالت دیگهای، به خصوص وقتی متغیرها رو داخل رشته میارید ⟵ $ (درونیابی) انتخاب اول و آخر شماست. خوانا، قدرتمند و مدرن.
شما تو کدهاتون بیشتر از کدوم روش استفاده میکنید؟ آیا تا حالا با مشکل پرفورمنس به خاطر استفاده زیاد از + تو حلقهها برخورد کردید؟ یا چه ترفند باحالی برای فرمت کردن رشتهها با $ بلدید؟
🔖 هشتگها :
#CSharp
#String
#DotNet
#Performance