Rust da siz o’zgaruvchilarni istalgan ko’rinishda chop etishingiz mumkin. Quyida biz chop etish to’g’risida yana ham ko’proq ma’lumot berib o’tamiz.
“\n” ni qo’shish bilan biz yangi qatordan yozishni boshlaymiz, “\t” da esa tabulyatsiya qiladi yani 3-4 probel tashlab yozishni boshlaydi.
fn main() {
// Eslatma: Bu print!, println! emas
print!("\t Start with a tab\nand move to a new line");
}
Natija esa quyidagicha:
Start with a tab
and move to a new line
Chop etilayotganda biz “” ning ichida istalgan qatordagi ma’lumot kirgazishimiz mumkin bo’ladi, lekin probellarga ahamiyat bersak bo’ldi.
fn main() {
// Eslatma: birinchi qatordan so'ng, keyingi qatorni chap tomonning eng boshida boshlash kerak
//Agar println! ning tagiga moslab yoziladigan bo'lsa, unda qo'shimcha probellar qo'shiladi.
println!("Inside quotes
you can write over
many lines
and it will print just fine.");
println!("If you forget to write
on the left side, the spaces
will be added when you print.");
}
Agarda siz biror belgini chop etmoqchi bo’lsangiz “\n” ga o’xshash, unda siz qo’shimcha “\” qo’shishingiz kerak bo’ladi.
fn main() {
println!("Here are two escape characters: \\n and \\t");
}
Natija:
Here are two escape characters: \n and \t
Bazida esa bizda juda ham ko’p belgilar yokida qo’shtirnoq ichidagi gaplarimiz bo’lishi mumkin. Aynan shu vaziyatda har biri uchun “\” qo’yish o’rniga qatorimiz boshini “r#” bilan boshlab, “#” bilan yakunlashimiz kerak.
fn main() {
println!("He said, \"You can find the file at c:\\files\\my_documents\\file.txt.\" Then I found the file."); //Bu misolda biz 5 martta "\" ishlatdik
println!(r#"He said, "You can find the file at c:\files\my_documents\file.txt." Then I found the file."#)
}
Natija esa bir xil:
He said, "You can find the file at c:\files\my_documents\file.txt." Then I found the file.
He said, "You can find the file at c:\files\my_documents\file.txt." Then I found the file.
Agar siz chop etilayotgan matnni ichida “#” belgisini ham qo’ymoqchi bo’lsangiz, unda “r##” bilan ochib,”##” bilan yopamiz qatorimizni.
fn main() {
let my_string = "'Ice to see you,' he said."; // bitta qo'shtirnoq
let quote_string = r#""Ice to see you," he said."#; // Ikkita qo'shtirnoq
let hashtag_string = r##"The hashtag #IceToSeeYou had become very popular."##; // Bu yerda "#" bor shuning uchun ikkitalik "##" ishlatishimiz kerak
let many_hashtags = r####""You don't have to type ### to use a hashtag. You can just use #.""####; // Bu yerda kamida 3 ta "#" bor shuning uchun ham "r" dan keyingi "#" larimiz ichkaridagidan 1 ta ko'proq bo'lishi kerak.
println!("{}\n{}\n{}\n{}\n", my_string, quote_string, hashtag_string, many_hashtags);
}
Natija esa quyidagicha:
'Ice to see you,' he said.
"Ice to see you," he said.
The hashtag #IceToSeeYou had become very popular.
"You don't have to type ### to use a hashtag. You can just use #."
“r#” ning yana bir xususiyatlaridan biri shuki, u yordamida biz oldindan band qilingan kalit so’zlar bilan ham o’zgaruvchi nomini yaratsak bo’ladi.
fn main() {
let r#let = 6; // O'zgaruvchinining nomi "let"
let mut r#mut = 10; // Bu yerda esa "mut"
}
Ba’zi sabablarga ko’ra siz yaratayotgan funksiyangizni nomini “return” deb qo’ymoqchi bo’lsangiz unda “r#” yordam beradi:
fn r#return() -> u8 {
println!("Here is your number.");
8
}
fn main() {
let my_number = r#return();
println!("{}", my_number);
}
Natijamiz quyidagicha:
Here is your number.
8
Agarda biz, “&str” yokida “char” ning byte ko’rinishidagi qiymatini ko’rmoqchi bo’lsak, unda satrdagi mattni yozishdan oldin “b” harfini qo’shib ketamiz. Bu barcha ASCII belgilari uchun ishlayi. Quyida ASCII ning barcha belgilarini keltiramiz:
☺☻♥♦♣♠♫☼►◄↕‼¶§▬↨↑↓→∟↔▲▼123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
Quyidagi misolni byte ko’rinisini olmoqchi bo’lsak, bizda turli raqamlar chop etib beradi:
fn main() {
println!("{:?}", b"This will look like numbers");
}
[84, 104, 105, 115, 32, 119, 105, 108, 108, 32, 108, 111, 111, 107, 32, 108, 105, 107, 101, 32, 110, 117, 109, 98, 101, 114, 115]
Har bir “char” uchun bu “byte” deb ataladi.&str uchun esa “byte string”
Biz p va r ni birga ishlatsak ham bo’ladi:
fn main() {
println!("{:?}", br##"I like to write "#"."##);
}
[73, 32, 108, 105, 107, 101, 32, 116, 111, 32, 119, 114, 105, 116, 101, 32, 34, 35, 34, 46]
Agar siz Unicode belgilarini chop etmoqchi bo’lsangiz unda “\u{}” dan foydalanishimiz kerak. O’n olti xonalik raqam chop etish uchun “{}” ning ichiga yoziladi. Keyingi blokda buni ishlatish bo’yicha qisqacha misol keltiramiz:
fn main() {
println!("{:X}", '행' as u32); // "char" ni u32 ga konvertatsiya qilish kerak
println!("{:X}", 'H' as u32);
println!("{:X}", '居' as u32);
println!("{:X}", 'い' as u32);
println!("\u{D589}, \u{48}, \u{5C45}, \u{3044}"); // Endi \u bilan chop etib ko'ramiz.
}
Biz bilamizki, “println!” Display ni “{}” orqali, Debug ni “{:?}” orqali va chiroyli chop etishni(pretty print) “{:#?}” orqali amalga oshiradi. Lekin bunga qo’shimcha usullar ham mavjud.
Misol uchun agar bizda “reference” bo’lsa, biz uni {:p} orqali chop etishimiz va “reference” ning kompyuter xotirasidagi egallagan joyning adresini olishimiz mumkin.
fn main() {
let number = 9;
let number_ref = &number;
println!("{:p}", number_ref);
}
Bizning holatda bu 0xe2bc0ffcfc chop etadi, ammo bu har xil qurilmaga qarab farq qiladi, sababi har bir qurilma xotirani o’zi hoxlaganicha boshqaradi.
Undan tashqari biz, ikkilik, o’n oltilik va sakkizlik sonlarini ham chop etishimiz mumkin.
fn main() {
let number = 555;
println!("Binary: {:b}, hexadecimal: {:x}, octal: {:o}", number, number, number);
}
Binary: 1000101011, hexadecimal: 22b, octal: 1053
Yokida biz o’zgaruvchilar ketma ketligini aniqlashtirish uchun raqamlar ham qo’shishimiz mumkin. Birinchi o’zgaruvchining indeksi 0 dan boshlanadi va shu bo’yi davom etadi.
fn main() {
let father_name = "Vlad";
let son_name = "Adrian Fahrenheit";
let family_name = "Țepeș";
println!("This is {1} {2}, son of {0} {2}.", father_name, son_name, family_name);
}
father_name 0-pozitsiyada, son_name 1-chi pozitsiyada, and family_name 2-pozitsiyada. Shuning uchun ham:
This is Adrian Fahrenheit Țepeș, son of Vlad Țepeș
Ba’zida bizda juda ham komplekt satrlar bo’lishi mumkin, yokida juda ham ko’p o’zgaruvchilar. Aynan shu holatda biz “{}” ning ichiga o’zgaruvchining nomini kiritib yozib ketsak ham bo’adi:
fn main() {
println!(
"{city1} is in {country} and {city2} is also in {country},
but {city3} is not in {country}.",
city1 = "Seoul",
city2 = "Busan",
city3 = "Tokyo",
country = "Korea"
);
}
Seoul is in Korea and Busan is also in Korea,
but Tokyo is not in Korea.
Agar Rust da juda ham murakkab satr/matn larni chop etishni hoxlasangiz unda quyidagi formatdan foydalanishingizga to’g’ri keladi:
{o’zgaruvchi:”to’ldiruvchi belgi” “belgining joylashvi” minimum-qiymat.maximum-qiymat}
Buni to’liqroq tushuning uchun quyidagi misolni keltiramiz:
- Agar o’zgaruvchi nomini qo’shmoqchi bo’lsangiz, uni avval yozishingiz kerak huddi tepada {country} yozilganidek va undan keyin darxol “:” belgisi qo’yiladi va tepada keltirgan formatimiz bilan to’ldirib boriladi.
- To’ldiruvchi belgi ham qo’ymoqchimisiz ? Misol uchun qiymat 55 bo’lsa va biz 3 ta 0 ni to’ldiruvchi qilib belgilasak, unda 00055 qiymadi hosil bo’ladi.
- To’ldiruvchi belgini aynan qaysi tarafga joylashtirish kerak chap/o’rta/o’ng tomon?
- Aynan necha martta takrorlanib qo’shilishini hoxlaysiz ?
Misol uchun biz “a” harfini ikkala tarafiga 5 tadan ㅎ belgisini joylamoqchi bo’lsak unda:
fn main() {
let letter = "a";
println!("{:ㅎ^11}", letter);
}
ㅎㅎㅎㅎㅎaㅎㅎㅎㅎㅎ
Agar hozirgi kodni tepadagi shablonga solib taftish qiladigan bo’lsak:
- O’zgaruvchi nomi bormi ? Yo’q, sababi bizda bir dona o’zgaruvchi bo’lganinga uni belgilash shart emas : dan keyin.
- To’ldiruvchi belgini kiriting ?
{:ㅎ^11}, Bu misoldaㅎtanlangan va “:” belgisidan keyin ^ bilan yozilgan. <-chap tomondan to’ldirish, ^ – o’rtadan to’ldirish, > – o’ng tomondan to’ldirish. - Eng kami nechta belgi?
{:ㅎ^11}, bu yerda 11 ta deb kiritilgan. - Eng katta uzunlik? Chop etiladigan satrning eng katta uzunligi esa kiritilmagan.
Yana bir qancha misol keltiramiz:
fn main() {
let title = "TODAY'S NEWS";
println!("{:-^30}", title); // o'zgaruvchi nomi yo'q, - bilan pad, o'rtaga qo'yish, 30 belgidan iborat
let bar = "|";
println!("{: <15}{: >15}", bar, bar); // o'zgaruvchining nomi yo'q, bo'sh joy bilan to'ldirish, har biri 15 ta belgidan iborat, biri chapga, biri o'ngga
let a = "SEOUL";
let b = "TOKYO";
println!("{city1:-<15}{city2:->15}", city1 = a, city2 = b); // vo'zgaruvchilar nomlari city1 va city2, - bilan to'ldirish, biri chapga, biri o'ngga
}
---------TODAY'S NEWS---------
| |
SEOUL--------------------TOKYO
Leave a Reply