این مقاله به بررسی مفهوم و کاربردهای رشته های کلمه به کلمه در سی شارپ «#Verbatim String Literal in C» میپردازد. این نوع رشتهها با استفاده از نماد خاص @ پیش از رشته تعریف میشوند و به برنامهنویسان این امکان را میدهند که از ویژگیهایی همچون نادیده گرفتن نویسههای فرار «Escape Characters» و شکستهای خط «Line Breaks» بهرهمند شوند. در این مقاله به توضیح مزایای استفاده از رشتههای کلمه به کلمه و موارد کاربرد آنها در مدیریت مسیرهای فایل، نوشتارهای چندخطی و استفاده از کاراکترهای خاص میپردازیم. همچنین، چندین مثال عملی برای درک بهتر نحوه استفاده از این نوع رشتهها در برنامهنویسی ارائه شده است.
ساختار رشته های کلمه به کلمه در سی شارپ
رشته های کلمه به کلمه در سی شارپ با استفاده از یک نماد خاص به نام @ ایجاد میشوند. این نماد که به عنوان شناسه کلمه به کلمه «Verbatim Identifier» شناخته میشود، زمانی که یک رشته با @ بهعنوان پیشوند و سپس داخل علامتهای نقلقول دوتایی (“) نوشته شود، کامپایلر آن را بهعنوان یک رشته کلمه به کلمه تشخیص داده و آن را کامپایل میکند.
مزیت اصلی استفاده از نماد @ این است که به سازنده رشته اطلاع میدهد که نویسههای فرار «Escape Characters» و شکستهای خط «Line Breaks» را نادیده بگیرد.
ساختار
string str = @" string content ";
ویژگی های کلیدی رشته های کلمه به کلمه در سی شارپ
در سی شارپ، رشتههای کلمه به کلمه (Verbatim Strings) با پیشوند @ مشخص میشوند و دارای ویژگیهای خاصی هستند که آنها را از رشتههای معمولی متمایز میکند. در ادامه توضیحات بیشتری درباره این ویژگیها ارائه میشود:
- بدون دنبالههای فرار «Escape Sequences»: رشتههای کلمه به کلمه از دنبالههای فرار مانند \n (خط جدید)، \t (تب) و \\ (بکاسلش) پشتیبانی نمیکنند. در عوض، تمامی کاراکترها دقیقاً همانطور که در کد نوشته شدهاند، در مقدار رشته حفظ میشوند.
- مفید برای مسیرهای فایل: از آنجایی که رشتههای کلمه به کلمه نیازی به دنبالههای فرار ندارند، هنگام تعریف مسیرهای فایل بسیار مفید هستند. زیرا در رشتههای معمولی، بکاسلش (\) یک کاراکتر خاص است و باید دو بار نوشته شود (\\)، اما در رشتههای کلمه به کلمه نیازی به این کار نیست.
- رشتههای چندخطی خوانا: در رشتههای معمولی، اگر بخواهید یک رشته را در چند خط بنویسید، باید از کاراکتر \n برای رفتن به خط جدید استفاده کنید. اما در رشتههای کلمه به کلمه، میتوان متن را مستقیماً در چندین خط نوشت، بدون نیاز به \n یا +.
- استفاده از علامت نقلقول دوگانه (“) در داخل رشته: در رشتههای کلمه به کلمه، اگر بخواهید از علامت نقلقول دوگانه (“) استفاده کنید، باید آن را دو بار پشت سر هم بنویسید (“”).
- ترکیب با رشتههای میانیابی ($”…”): میتوان رشتههای کلمه به کلمه را با رشتههای میانیابی ترکیب کرد. برای این کار، کافی است از ترکیب @$ استفاده کنید.
مثال
using System; public class PStore { static public void Main () { // using for file path string str = @"C:\Users"; Console.WriteLine("File Path: " + str); // using double quotes string str2 = @"Hello ""ProgramStore"" "; Console.WriteLine("Using Double Quotes: " + str2); // using multi line string str3 = @" This is multi line String"; Console.WriteLine("Multi Line: "+str3); } }
خروجی
File Path: C:\Users Using Double Quotes: Hello "ProgramStore" Multi Line: This is multi line String
انواع رشتههای کلمه به کلمه در سی شارپ
سه کاربرد اصلی برای نماد @ وجود دارد که عبارتند از:
- شناسه کلمه به کلمه «Verbatim String Identifier»:
- رشته کلمه به کلمه «Verbatim String Literal»:
شناسه کلمه به کلمه در سی شارپ
این نماد امکان استفاده از یک کلمه کلیدی بهعنوان شناسه را فراهم میکند. با اضافه کردن نماد @ به ابتدای کلمه کلیدی، کامپایلر آن کلمه را بهعنوان شناسه در نظر میگیرد و خطایی رخ نمیدهد. مثال زیر این موضوع را نشان میدهد:
مثال
// C# program to illustrate // the use of @ by using keyword // as an identifier using System; public class PStore { // Main method static public void Main() { // Creating and initializing the array // here 'for' keyword is used as // an identifier by using @ symbol string[] @for = {"C#", "PHP", "Java", "Python"}; // as and for keywords is // as an identifier // using @ symbol foreach (string @as in @for) { Console.WriteLine("Element of Array: {0}", @as); } } }
خروجی
Element of Array: C# Element of Array: PHP Element of Array: Java Element of Array: Python
رشته کلمه به کلمه در سی شارپ
در زبان سیشارپ، رشتههای کلمه به کلمه «verbatim strings» به گونهای طراحی شدهاند که میتوانند دنبالههای فرار «Escape Sequences» مانند شکستهای خط «Line Breaks» و سایر موارد را بدون نیاز به استفاده از دنبالههای فرار خاص در داخل رشتهها نمایش دهند.
اگر دنبالههایی مانند “\” (برای بکاسلش)، “\u” (دنباله فرار یونیکد)، “\x” (دنباله فرار هگزادسیمال) و دیگر دنبالهها را در رشتهای قرار دهید که از علامت @ استفاده نمیکند، این دنبالهها بهطور خودکار توسط کامپایلر تفسیر میشوند. اما در این حالت، علامت نقلقول دوتایی (“”) بهطور معمول به عنوان یک متن (Literal) در نظر گرفته نمیشود. این حالت مشابه با رشتههای دارای تداخل در رشتهها «String Interpolation» است
مثال
// Using Verbatim String Literal using System; public class PStore { static public void Main () { // Verbatim String Literal string str = @"This is \n a verbatim string"; Console.WriteLine(str); } }
خروجی
This is \n a verbatim string
موارد استفاده از رشته ها در سی شارپ با مثال
بیایید به بررسی موارد مختلف استفاده از رشتهها با و بدون استفاده از نماد @ بپردازیم.
مورد ۱
// taking a string literal and // try to print double quotes string str1 = “”””; // printing output // this will give compile // time error as Unexpected // symbol `’ Console.WriteLine(str1);
در برنامه بالا، علامت نقلقول دوتایی (“”) که درون یک رشته قرار دارد، بهعنوان یک علامت نقلقول منفرد (“) تفسیر میشود.
به عبارت دیگر، اگر در یک رشته کلمه به کلمه از نقلقول دوتایی (“””) استفاده کنید، این کار به کامپایلر میگوید که یک نقلقول منفرد در خروجی ایجاد شود. این ویژگی برای قرار دادن نقلقولها در متن رشتهای بسیار مفید است
مورد ۲
// taking a string literal prefixes // with @ and try to print double quotes string str1 = @””””; // printing output // this will output as “ Console.WriteLine(str1);
کد بالا در کنسول یک دابل کوتیشن (“) را به عنوان خروجی چاپ خواهد کرد.
به عبارت دیگر، این کد نشان میدهد که چگونه میتوان از دابل کوتیشنها به طور صحیح در یک رشتهی سیشارپ استفاده کرد، بدون اینکه نیاز به فرار دادن آنها با بکاسلش باشد.
مورد ۳
// taking a string in which we are storing // some location of file but \Testing will // interpreted as escape sequence \T // similarly \N string str1 = “\\C:\Testing\New\Target”; // printing str1 // this will give compile time error as // Unrecognized escape sequence `\T’ // Unrecognized escape sequence `\N’ // Unrecognized escape sequence `\T’ Console.WriteLine(str1);
در کد بالا، از یک رشته در زبان سیشارپ استفاده شده که به اشتباه دنبالههای فرار (escape sequences) را شامل میشود. این کد موجب بروز خطای زمان کامپایل خواهد شد.
برای جلوگیری از این خطا، شما باید از دو بکاسلش (\\) برای نمایندگی مسیرها و جلوگیری از تفسیر اشتباه دنبالههای فرار استفاده کنید.
مورد ۴
// taking a string and prefix literal with @ symbol. // Storing some location of file string str1 = @”\\C:\Testing\New\Target”; // printing str1 will give output as // \\C:\Testing\New\Target Console.WriteLine(str1);
در کد بالا با استفاده از علامت @، دیگر نیازی به استفاده از بکاسلشهای اضافی برای فرار دادن مسیرها نیست. این روش برای کار با مسیرهای فایل در سیشارپ بسیار مفید است زیرا باعث سادهتر و خواناتر شدن کد میشود.
مثال: کد زیر به زبان #C نوشته شده است و بهطور خاص از نماد @ برای کار با رشتههای verbatim (رشتههای با پردازش خاص) استفاده میکند. کد تفاوت میان رشتههای معمولی (non-verbatim) و رشتههای verbatim را در کار با کاراکترهای escape (مانند \n یا \t) توضیح میدهد.
// C# program to illustrate // the use of @ in terms of // escape sequences and new // line and tab using System; public class PStore { // Main method static public void Main() { // If you use the below commented // the part then this will give // Unrecognized escape sequence error // string S1 = "\\welcome \to GeeksforGeeks \ portal \"; // Console.WriteLine("String 1 is :{0}", S1); // By using @ in the given string // it runs smoothly because // @ symbol tells the compiler to // ignore all escape sequences string S2 = @"\\welcome \to ProgramStore \ portal \"; Console.WriteLine("String 2 is: {0}", S2); // printing new line character in string literal // but it will make the string to break // into a new line, see output string S3 = "This is \n C# non verbatim string"; Console.WriteLine("String 3 is :{0}", S3); // By using @ symbol /n does not processed string S4 = @"This is \n C# verbatim string"; Console.WriteLine("String 4 is :{0}", S4); // printing a string literal contains // tabs and new line without using // any escape sequence Console.WriteLine(@"Without Tab Sequence and New Line Character C C++ Java Python"); } }
خروجی
String 2 is: \\welcome \to ProgramStore \ portal \ String 3 is :This is C# non verbatim string String 4 is :This is \n C# verbatim string Without Tab Sequence and New Line Character C C++ Java Python
نکات کلیدی :
- رشتههای verbatim: با پیشوند @ تعریف میشوند. کامپایلر همه escape sequences را بهعنوان کاراکترهای عادی در نظر میگیرد. برای رشتههای چند خطی مفید هستند.
- رشتههای غیر-verbatim: از escape sequences (مانند \n یا \t) برای تعریف ویژگیهای خاص استفاده میکنند.
جمع بندی
این مقاله نشان میدهد که استفاده از رشته های کلمه به کلمه در سی شارپ #C ابزار مفیدی برای مدیریت رشتهها با ویژگیهایی خاص مانند نادیده گرفتن نویسههای فرار و شکستهای خط است. این ویژگی به ویژه در مواردی که نیاز به تعریف مسیرهای فایل یا نوشتارهای چندخطی داریم، به شدت کاربردی است. علاوه بر این، با استفاده از نماد @ میتوان از برخی محدودیتها مانند تداخلهای ناشی از کاراکترهای خاص یا فرار جلوگیری کرد. به طور کلی، این ویژگی در برنامهنویسی #C قابلیتهای زیادی برای سادهسازی نوشتار کد و افزایش خوانایی آن فراهم میکند و برای توسعهدهندگان این زبان ابزاری کارآمد و ضروری محسوب میشود.