DEV Community

Farkhodbek Kamolov
Farkhodbek Kamolov

Posted on • Edited on

Yangi \e - escape ketma-ketligi

Yangi escape ketma-ketligi(escape sequence) haqida gapirishdan oldin, o'zim uchunham yangilik bo'lgan bir tushuncha haqida aytishni shart deb bildim.
Shu kungacha, shaxsan men uchun birxil manoga ega bolgan, ko'plab dasturlash tillarida, hususan C# daham, escape belgi(character) hamda escape ketma-ketligi(sequence) degan ikkita bir-biridan farq qildigon, lekin uzviy bog'liq konsepsiyalarni farqi nimada ekanligini iloji boricha qisqacha tushuntirishga harakat qilaman.
Escape character(belgi) deb \ backslash ni aytiladi. Bu o'zi nima uchun kerak?! Hechkimga sir emaski double quotes "" hamda backslash \, maxsus belgilar hisoblanib, ularni string malumot turiga shunchaki saqlab keta olmaymiz. Sababi ushbu belgilarni kompilyatorda boshqa maqsad uchun ishlatilinadi.

Misol:

// error
string str1 = "Shoqasim "yaxshi" bola";
string str2 = "Shoqasim \yaxshi\ bola";
Enter fullscreen mode Exit fullscreen mode

Bu kodimiz hatolik keltirib chiqaradi, ushbu hatolikni oldini olish uchun, bizga \ escape -> qochish belgisi yordam beradi(hatolikdan qochishga yo'l ochib beradi).

Misol:

string str1 = "Shoqasim \"yaxshi\" bola"; 
string str2 = "Shoqasim \\yaxshi\\ bola";

Console.WriteLine(str1); --> Shoqasim "yaxshi" bola
Console.WriteLine(str2); --> Shoqasim \yaxshi\ bola
Enter fullscreen mode Exit fullscreen mode

Misolda ko'rganimiz kabi qo'sh tirnoq " yoki orqa chiziq
\ belgilarini hatoliklarsiz saqlash uchun bizga escape character yordam berdi. Lekin bu yerda yana bir qo'shimcha qilish kerakki \", yoki \\ belgilari, bundan buyog'iga escape character emas balki escape sequence deyiladi. Bu bilan demoqchi bolganim shundaki escape character doimo bitta backslash \, va ushbu \ belgi, escape sequence lar yaratishga yo'l beradi. Escape sequence larni turlari ko'p, eng ko'p uchraydigonlari: \", \\, \n, \t, \r va boshqalar. Ushbu ketma-ketliklar bizga string qiymatlarini turli hil formatlash(shakllash)ga yordam beradi. Ko'proq misollar uchun -> havola.

Endi ushbu postimizni asosiy qaxramoni bo'lmish \e escape sequence ga o'tsak. Ushbu yangi sequence, 13-chi versiyadan oldingi ESCAPE belgisi(ASCII jadvali bo'yicha 27-chi)ni ifodalovchi \x1b sequence orniga kelishi kutilmoqda.
Bu belgi nimani bildiradi degan savolga kodda javob berishga harakat qilaman.

Console.WriteLine("\x1b");
// output -> Bo'm-bo'sh bolib qoladi
Enter fullscreen mode Exit fullscreen mode

Outputda hich-narsa ko'rinmasligini sababi, x1b (ESC) belgisi asosan konsolga chiqishi kerak bolgan matinni manipulyatsiya qilish uchun ishlatiladi(rangini o'zgartirish, formatini o'zgartirish vaho-kazo...).

Misol:

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
Enter fullscreen mode Exit fullscreen mode

Hattoki Microsoft o'z documentationida \x1b ishlatishni maslaxat bermaydi. Bunga sabab 1b ketma-ketligidan keyin keluvchi qiymatlar o'n oltilik sanoq tizimini qiymatiga teng bo'lib qolishi mumkin va kutilmagan natijalarni keltirib chiqarishi mumkin.

Misol:

Console.WriteLine("\x1b12");
// output -> ? belgisi
Enter fullscreen mode Exit fullscreen mode

Shunaqangi kutilmagan xatoliklar oldini olish maqsadida Microsoft \x1b sequensini \e o'zgartirmoqchi. Yangi ketma-ketlikni endi ikkilanmay \e12 qilib ishlatsa bo'ladi, hechqanday ? belgisi chiqmaydi. Formatlash sistemasixam eski sequence nikidek qoladi.

Misol:

Console.WriteLine("\e12");
// output -> 2
Console.WriteLine($"\e[31m123\e[0m456");
123(qizil rangda) 456 (defolt rangda)
Enter fullscreen mode Exit fullscreen mode

Top comments (0)