- Dəyişməz və
mutilə dəyişdirilə bilən dəyişənlər yaratmaq, sabitləriconstilə elan etmək - Kölgələmənin
mut-dan fərqini izah etmək - Düzgün tam ədəd, kəsr ədəd,
boolvəchartipini seçmək və daşmanı təhlükəsiz idarə etmək - Kortejlər və massivlərlə işləmək
Bank kartındakı balans hər gün dəyişir, doğum tarixin isə heç vaxt. Bir çox dildə hər iki qiymət eyni cür saxlanılır və təsadüfən doğum tarixini «dəyişmək» mümkündür. Rust səni əvvəlcədən qərar verməyə məcbur edir: dəyişən standart olaraq dəyişməzdir və dəyişə bilməsi üçün bunu açıq şəkildə yazmalısan.
let, mut və const
Dəyişən let açar sözü ilə yaradılır. Tipi yazmaq çox vaxt lazım deyil: kompilyator onu qiymətdən özü çıxarır. Dəyişənin qiyməti sonra dəyişəcəksə, adından əvvəl mut (ingiliscə mutable — dəyişdirilə bilən) yaz. Rust-da dəyişən adları snake_case üslubunda yazılır: total_score, user_name.
fn main() {
let city = "Baku";
let mut score = 10;
println!("{city}: {score}");
score += 5;
println!("{city}: {score}");
}Baku: 10 Baku: 15
fn main() {
let score = 10;
println!("{score}");
score = 15;
println!("{score}");
}fn main() {
let mut score = 10;
println!("{score}");
score = 15;
println!("{score}");
}10 və 15 çap edir.error[E0384]: cannot assign twice to immutable variable `score`
--> src/main.rs:4:5
|
2 | let score = 10;
| ----- first assignment to `score`
3 | println!("{score}");
4 | score = 15;
| ^^^^^^^^^^ cannot assign twice to immutable variable
|
help: consider making this binding mutable
|
2 | let mut score = 10;
| ++++++ əlavə olunmalı mətni işarələyir).Sabitlər const ilə elan olunur. Onların tipi həmişə yazılmalıdır, adları BÖYÜK_HƏRFLƏRLƏ yazılır və qiyməti kompilyasiya zamanı məlum olmalıdır. Sabiti main-dən kənarda, faylın yuxarısında da elan etmək olar.
const MAX_PLAYERS: u32 = 4;
const SECONDS_PER_HOUR: u32 = 60 * 60;
fn main() {
println!("Players: {}", MAX_PLAYERS);
println!("Seconds in 2 hours: {}", 2 * SECONDS_PER_HOUR);
}Players: 4 Seconds in 2 hours: 7200
Kölgələmə
Eyni adla yenidən let yazsan, köhnə dəyişənin üstünü örtən yeni dəyişən yaranır — buna kölgələmə (shadowing) deyilir. Kölgələmə ilə qiymətin hətta tipini də dəyişmək olar. Daxili blokda ({ }) edilən kölgələmə isə blok bitəndə yox olur.
fn main() {
let spaces = " ";
let spaces = spaces.len();
println!("spaces = {spaces}");
let x = 5;
let x = x + 1;
{
let x = x * 2;
println!("inner x = {x}");
}
println!("outer x = {x}");
}spaces = 3 inner x = 12 outer x = 6
spaces əvvəl mətn idi, sonra ədəd oldu. mut ilə bu mümkün olmazdı: mut dəyişənin qiymətini dəyişməyə icazə verir, tipini isə yox.Skalyar tiplər
Skalyar tip tək bir qiymət saxlayır. Rust-da onların dörd növü var: tam ədədlər, kəsr ədədlər (sürüşən nöqtəli), məntiqi bool (true/false) və simvol char. Tam ədədlərin adı işarəni və ölçünü göstərir: i — işarəli (mənfi də ola bilər), u — işarəsiz, rəqəm isə bitlərin sayıdır. Tip göstərilməsə, tam ədəd i32, kəsr ədəd isə f64 olur.
| Tip | Diapazon və ya məzmun | Harada lazımdır |
|---|---|---|
u8 | 0 … 255 | baytlar, rəng komponentləri, yaş |
i32 | −2 147 483 648 … 2 147 483 647 | adi tam ədədlər (standart tip) |
i64, u64 | təxminən ±9,2 · 10¹⁸ | böyük saylar, vaxt ştampları |
usize | 64 bitlik sistemdə 64 bit | indekslər və uzunluqlar |
f64 | təxminən 15–16 dəqiq rəqəm | kəsr ədədlər (standart tip) |
bool | true, false | şərtlər |
char | istənilən Unicode simvolu, 4 bayt | tək hərflər və işarələr |
fn main() {
let age: u8 = 14;
let temperature: i32 = -3;
let price: f64 = 2.5;
let whole: f64 = 10.0;
let is_open = true;
let currency = '₼';
println!("{age} {temperature} {price} {whole} {is_open} {currency}");
println!("{:?} {:.2}", whole, price);
println!("{} {} {}", 7 / 2, 7 % 2, 7.0 / 2.0);
println!("{} {}", 3.9_f64 as i32, u8::MAX);
}14 -3 2.5 10 true ₼ 10.0 2.50 3 1 3.5 3 255
{} 10.0-ı 10 kimi, {:?} isə 10.0 kimi çap edir. {:.2} vergüldən sonra iki rəqəm saxlayır. Tam ədədlərin bölünməsi kəsr hissəni atır, as isə tipi çevirir.fn main() {
let level: u8 = 250;
println!("{:?}", level.checked_add(10));
println!("{:?}", level.checked_add(5));
println!("{}", level.saturating_add(10));
println!("{}", level.wrapping_add(10));
}None Some(255) 255 4
Some və None «qiymət var» və «qiymət yoxdur» deməkdir — bu Option tipi ilə 5-ci dərsdə tanış olacaqsan. 250 + 10 = 260, 260 − 256 = 4.Mürəkkəb tiplər: kortejlər və massivlər
Kortej (tuple) müxtəlif tipli bir neçə qiyməti bir yerdə saxlayır: ("Murad", 15, 4.5). Onun elementlərinə nöqtə və indekslə (student.0) müraciət olunur və ya kortej let (a, b, c) = ... ilə ayrı dəyişənlərə açılır. Massiv isə eyni tipli, ölçüsü sabit olan elementlər ardıcıllığıdır: tipi [i32; 5] kimi yazılır, elementlərə days[0] ilə müraciət olunur.
fn main() {
let student: (&str, u8, f64) = ("Murad", 15, 4.5);
let (name, age, grade) = student;
println!("{name} is {age}, average grade {grade}");
println!("First field: {}", student.0);
let days = ["Mon", "Tue", "Wed", "Thu", "Fri"];
let zeros = [0; 3];
println!("{} days, first: {}", days.len(), days[0]);
println!("{:?}", zeros);
println!("{:?}", student);
}Murad is 15, average grade 4.5
First field: Murad
5 days, first: Mon
[0, 0, 0]
("Murad", 15, 4.5)[0; 3] «üç sıfır» deməkdir. Massivləri və kortejləri {:?} ilə çap etmək lazımdır; {:?} mətnləri dırnaqla göstərir.Əsas fikirlər
- Rust-da dəyişənlər standart olaraq dəyişməzdir; dəyişmək üçün
let mutyazılır. constsabitinin tipi mütləq yazılır və qiyməti kompilyasiya zamanı məlum olmalıdır.- Kölgələmə eyni adla yeni dəyişən yaradır və tipi dəyişməyə imkan verir.
- Standart tiplər: tam ədəd üçün
i32, kəsr ədəd üçünf64;charistənilən Unicode simvoludur. - Daşmanı
checked_add,saturating_add,wrapping_addilə açıq idarə et. - Kortej müxtəlif tipləri, massiv isə eyni tipli sabit sayda elementi saxlayır.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
let x = 5; x = 6; kodu ilə nə baş verir?