Farkhodbek Kamolov
Posted on May 28, 2024
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";
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
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
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
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
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)
Posted on May 28, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.