Nəsə xəta baş verdi! Bu məqalə JavaRush komandasındakı vəzifə üçün test tapşırığı kimi yazılmışdır. Və tam mühazirə kimi yazılmışdır. Buna görə bu yazıda toplanmış faydalı biliklərin keyfiyyətinə və kəmiyyətinə zəmanət verirəm. Məqalədə praktiki və nəzəri məlumatlardan əlavə, sizin heç bilmədiyiniz maraqlı faktlar da var!
Salam Dünya!
Xarakterdən qaçmaq çox maraqlı və zəruri texniki həlldir. Xarakterdən qaçmaq ehtiyacı bütün proqramlaşdırma sənayesinin tarixində mühüm rol oynamışdır. Bu yazıda xarakterdən qaçmağın nə olduğu, onlardan qaçmağa nə üçün ehtiyac olduğu və Java-da xarakterdən qaçmağın necə həyata keçirildiyi haqqında danışacağıq. Məqalədə xarakterdən qaçma mövzusu ilə bağlı nümunələr və maraqlı faktlar təqdim olunacaq. Oxumaqdan həzz alın! Kompüter sistemindəki bütün məlumatlar mətn şəklində təqdim olunur, daha aşağı səviyyədə baytlarla təmsil olunur. Məktub və ya mesaj yazarkən insana başa düşüləcək mətn yazırıq. IDE-də kod yazarkən, kompilyatorun təhlil edə biləcəyi mətni yazırıq.
String
Java-da mətn verilənləri nəzarət simvolları - qoşalaşmış sitatlar ilə təmsil olunan bir növ kimi təqdim edilə bilər .
String str = "Hello World!";
“Salam Dünya!” mətni ilə heç bir problem yaranmır, amma birbaşa nitqdə eyni mətni vurğulamaq lazımdırsa necə? Qrammatika qaydalarından istifadə edərək aydın olur ki, “Salam Dünya!” mətni tipdən idarə simvollarına əlavə olaraq
String
birbaşa nitq sitatlarına yerləşdirilməlidir.
String str = "Java said, "Hello World!"";
Bu seçim işləməyəcək, çünki kompilyator sadəcə dəyişənin başlanğıcının hansı nöqtədə bitdiyini başa düşməyəcək
str
.
Bu və buna bənzər problemləri həll etmək üçün simvollardan qaçmaq , yəni
idarəetmə simvollarını qaçış ardıcıllığı kimi tanınan sözdə idarəetmə ardıcıllığına dəyişdirmək icad edilmişdir . Aşağıda sətirlərdə istifadə üçün etibarlı java qaçış ardıcıllığının siyahısı verilmişdir.
\t
— Tab simvolu (javada – dörd boşluğa ekvivalent);
\b
— Mətndə bir addım geriyə qayıdış simvolu və ya sətirdəki bir simvolun silinməsi (geri işarə);
\n
— Yeni xətt simvolu;
\r
— Vaqonun qaytarılması simvolu;
\f
— Səhifəni növbəti səhifənin əvvəlinə keçirin;
\'
— Tək sitat simvolu;
\"
— İkiqat sitat xarakteri;
\\
— əks kəsik işarəsi (
\
). İndi isə cümləmizdəki birbaşa nitqi vurğulayaq ki, tərtibçi yazılanları asanlıqla təhlil edə bilsin.
String str = "Java said, \"Hello World!\"";
Beləliklə, dəyişənin məzmunu
str
ekranda göstərilirsə, yazılı mətn həm tərtibçi, həm də şəxs üçün başa düşüləndir. Xarakterdən qaçmağın nə olduğunu və nə üçün lazım olduğunu anladıq. Və hətta ikiqat sitat xarakterindən də qaçdılar! Qalan qaçış ardıcıllıqlarını təhlil etməyə davam edək.
Xəttdəki nişan simvolu qaçış ardıcıllığı ilə göstərilir
\t
və dörd boşluğa bənzəyir. Lakin, dörd boşluqdan ibarət sətir uzunluğu dörd simvolun uzunluğuna bərabərdirsə, nişan simvolu olan sətirin uzunluğu birə bərabər olacaqdır. Tab simvolu tez-tez cədvəllər və ya
psevdoqrafik interfeys elementləri qurmaq üçün istifadə olunur, çünki... Bu, dörd boşluq yazmaqdan daha rahatdır. Aşağıda psevdoqrafik interfeys nümunəsi verilmişdir.
Bütün qaçış ardıcıllıqları arasında simvol
\b
bəlkə də ən maraqlısıdır, çünki o, çıxış sətirindəki sonuncu simvolu silməyə imkan verir,
geriyə düyməni basaraq onu sildiyimiz kimi .
System.out.print("2 + 2 = 5");
System.out.print("\b");
System.out.print("4");
Simvolların ümumi tarixçəsi
\n
var
\r
- gəlin onlara birlikdə baxaq.
\n
Ola bilsin ki, siz əvvəllər sətir kəsilməsi xarakteri ilə qarşılaşmısınız. Məsələn, bir metod
println()
məlumatı çıxarırsa ki, növbəti çıxış yeni sətirdə olsun, o zaman metod
print()
çıxışdan sonra sətir kəsilməsini yerinə yetirmir, lakin çıxışın sonuna simvol əlavə etsəniz
\n
, sətir sonu olur. icra olunacaq.
System.out.print("Next output will be on a new line\n");
System.out.println("Next output will be on a new line");
Karetajın qaytarılması simvolu
\r
bizə kursoru çıxış sətirinin əvvəlinə qaytarmağa və yeni məlumatı sanki bu sətirdə əvvəllər heç nə olmamış kimi göstərməyə imkan verir.
System.out.print("Text to be rewritten.");
System.out.print('\r');
System.out.print("New text.");
Əslində, vaqonun qaytarılması mətnin makinalarda çap edildiyi günlərə təsadüf edir. Xətt ötürülməsini yerinə yetirmək üçün vaqonu hərəkət etdirmək və qolu (makina mexanizminin bir hissəsi) aşağı salmaq lazım idi, bundan sonra xəttin ötürülməsi yerinə yetiriləcəkdir. Qolu endirməsəydi, eyni sətirdə çap etməyə davam edə bilərsiniz. Simvol göstərdikdə müşahidə etdiyimiz budur
\r
. Bununla əlaqədar olaraq, proqramçı sətir kəsilməsini yerinə yetirmək istədikdə, o, vərdişdən kənar, çıxışın sonunda simvollar ardıcıllığını yerinə yetirdi
\r\n
. Yazı makinası dövrü sona çatdığından, özləri yazı makinasında heç vaxt işləməsələr də, hələ də bu ardıcıllıqdan istifadə edən proqramçılar nəsli var idi. Onlar tez-tez müəyyən bir ardıcıllığı tamamlamaq üçün hansı ardıcıllıqla lazım olduğunu unudurlar -
\r\n
və ya
\n\r
. Sonra onların köməyinə bir test sözü gəldi
return
, burada bu simvolların göstərilmə ardıcıllığı aydın görünürdü. Lakin sonradan, Windows-un ilk versiyaları üçün proqram təminatı hazırlayarkən, MS-DOS-dan sonra proqramçılar ardıcıllıqla istifadə etməyə məcbur oldular
\r\n
. İndi bu barədə narahat olmaq lazım deyil və xətti qırmaq üçün yalnız simvoldan istifadə edin
\n
.
Yenidən keçmişə qayıdaq, təxminən 80-ci illərə.
\f
Məhz bundan sonra növbəti səhifənin əvvəlinə doğru səhifənin simvolu məşhurlaşdı. O dövrdə böyük xətt printerləri var idi, onlarla işləmək üçün printerin nəyi və necə çap etməli olduğu proqram kodunu yazmaq lazım idi. Və mətnin yeni səhifədən başlamalı olduğunu göstərmək üçün simvoldan istifadə edilmişdir
\f
. Bizim dövrümüzdə bu simvol çoxdan öz aktuallığını itirib və çətin ki, onunla heç vaxt rastlaşasınız. Xətti printerin ölçüləri olduqca təsir edicidir.
Simvollarla
\’
və
\\
hər şey ikiqat sitatdan qaçmaqla eynidir, məqalənin əvvəlində bir nümunə var idi. Siz tək sitatdan qaçmalı olacaqsınız, məsələn, simvol tipini tək sitatla işə salmaq üçün.
char ch = '\'';
Aşağıdakı simvolun qaçış ardıcıllığının bir hissəsi olmayacağını göstərmək üçün əks kəsik işarəsindən qaçın.
System.out.println("\\n - line break escape sequence");
Praktikada, yollarla işləyərkən tez-tez əks kəsiklərdən qaçmalı olursunuz:
System.out.println("It's Java string: \"C:\\Program Files\\Java\\jdk1.7.0\\bin\"");
Vurğuladım ki, bu qaçış ardıcıllıqları sətirlərdə (string literals) istifadə olunur, çünki onların qalan hissəsi sinif müntəzəm ifadələrini təsvir etmək üçün istifadə olunur
Pattern
və bu məqalənin mövzusuna uyğun deyil.
Burada siz sinif üçün bütün qaçış ardıcıllığının siyahısını görə bilərsiniz
Pattern
. Bununla belə, qeyd etmək lazımdır ki, indi mövcud olan formada olan müntəzəm ifadələri təkcə java deyil, digər populyar proqramlaşdırma dillərində, məsələn, PHP-də də qaçış ardıcıllığından istifadə etmədən təsəvvür etmək olmaz. Java-da simvolların qaçması sətir formatlaşdırmasında da istifadə olunur. Məsələn, faiz simvolunu göstərmək üçün sətir formatını təyin edərkən, faiz simvolunu dublikat etməlisiniz -
%%
, əks halda xəta alacağıq və IDE sizdən faizi əlavə etməyi təklif edəcək.
System.out.printf("Milk fat percentage : %d%%", 10);
Bununla da məqalə yekunlaşır. Ümid edirəm ki, siz xarakterdən qaçmaq və onu necə həyata keçirmək barədə çox şey öyrəndiniz. Xarakterlərin qaçması bir çox proqramlaşdırma dillərinə xasdır. Digər C-yə bənzər dillərdə olduğu kimi java-da da bu texnologiya demək olar ki, eyni şəkildə həyata keçirilir. Buna görə də, bu məqalədən əldə etdiyiniz biliklər təkcə java deyil, faydalı ola bilər. Diqqətiniz üçün təşəkkür edirik və təhsilinizdə uğurlar!
GO TO FULL VERSION