دنباله فرار جدید \e – انجمن DEV

قبل از صحبت در مورد سکانس فرار جدید، لازم دیدم درباره مفهومی بگویم که برایم تازگی دارد.
تا به امروز، در بسیاری از زبان های برنامه نویسی، به ویژه سی شارپ، کاراکتر فرار (شخصیت) و دنباله فرار (توالی) دو متفاوت از یکدیگر، اما من سعی خواهم کرد تا حد امکان به طور خلاصه توضیح دهم که تفاوت بین مفاهیم نزدیک چیست.
شخصیت فرار (belgi) deb \
بک اسلش گفته شده است. چرا این لازم است؟! این راز نیست که نقل قول های دوگانه است ""
و بک اسلش \
، آنها شخصیت های خاص محسوب می شوند string
ما نمی توانیم آن را فقط در یک نوع مرجع ذخیره کنیم. این به این دلیل است که این نمادها برای اهداف متفاوتی در کامپایلر استفاده می شوند.
مثال:
// error
string str1 = "Shoqasim "yaxshi" bola";
string str2 = "Shoqasim \yaxshi\ bola";
این کد ما است که خطا می دهد، برای جلوگیری از این خطا، ما \
escape -> نماد فرار کمک می کند (راه فرار از خطا را باز می کند).
مثال:
string str1 = "Shoqasim \"yaxshi\" bola";
string str2 = "Shoqasim \\yaxshi\\ bola";
Console.WriteLine(str1); --> Shoqasim "yaxshi" bola
Console.WriteLine(str2); --> Shoqasim \yaxshi\ bola
همانطور که در مثال دیدیم نقل قول های دوگانه "
یا خط عقب \
ما کاراکترها را بدون خطا نگه داریم شخصیت فرار کمک کرد. اما یک چیز دیگر را باید در اینجا اضافه کرد \"
، یا \\
شخصیت ها، اما نه دیگر شخصیت فرار دنباله فرار نامیده میشود منظور من از این این است که شخصیت فرار همیشه یکی است بک اسلش \
، و این \
شخصیت به شما اجازه می دهد تا دنباله های فرار ایجاد کنید. انواع مختلفی از توالی فرار وجود دارد که رایج ترین آنها عبارتند از: \"
، \\
، \n
، \t
، \r
و دیگران. این سکانس ها برای ما string
به قالب بندی مقادیر به روش های مختلف کمک می کند. برای مثال های بیشتر -> پیوند.
حالا شخصیت اصلی این پست \e
بریم سراغ سکانس فرار. این سکانس جدید مربوط به نسخه 13 است در رفتن نشان دهنده شخصیت (بیست و هفتمین با توجه به جدول ASCII). \x1b
انتظار می رود دنباله جایگزین شود.
من سعی خواهم کرد به این سوال پاسخ دهم که این نماد در کد به چه معناست.
Console.WriteLine("\x1b");
// output -> Bo'm-bo'sh bolib qoladi
دلیل اینکه چیزی در خروجی ظاهر نمی شود این است که x1b
نماد (ESC) اساساً متنی است که باید به کنسول خروجی شود دستکاری – اعمال نفوذ برای انجام (تغییر رنگ، تغییر فرمت و غیره…) استفاده می شود.
مثال:
Console.WriteLine("\x1b[31mHello \x1b[0mWorld!");
// output -> Hello(qizil rangda) World!(defolt rangda)
Console.WriteLine("\x1bHello \x1bWorld!");
// output -> ello orld! birinchi harflar o'chib ketadi
حتی مایکروسافت در مستنداتش \x1b
توصیه به استفاده نمی کند. دلیلش این است 1b
مقادیر به دنبال دنباله هگزادسیمال ممکن است برابر با مقدار سیستم اعداد باقی بماند و ممکن است نتایج غیرمنتظره ای ایجاد کند.
مثال:
Console.WriteLine("\x1b12");
// output -> ? belgisi
به منظور جلوگیری از چنین خطاهای غیر منتظره، مایکروسافت \x1b
sequensini \e
می خواهد تغییر کند برای شروع یک سکانس جدید تردید نکنید \e12
به هیچ وجه قابل استفاده است ? نماد ظاهر نمی شود سیستم قالب بندی مانند توالی قبلی باقی می ماند.
مثال:
Console.WriteLine("\e12");
// output -> 2
Console.WriteLine($"\e[31m123\e[0m456");
123(qizil rangda) 456 (defolt rangda)