Shanraq.org Shanraq.org
Айнымалылар, мәндер және деректер түрлері
IT

Rust: алғашқы қадамнан жеке жоспарлау құралына дейін 9-сабақ (барлығы 60)

Айнымалылар, мәндер және деректер түрлері

Мәнді болжау және өзгертуді қайта жариялаудан ажырату.

Алғышарт: 1–8 сабақ. Басқаша айтылмаса, organizer ішінде жұмыс істеңіз.

Бұл не үшін керек?

Мән — нақты дерек, мысалы 2 саны. Айнымалы атауды мәнмен байланыстырады. Оны дерекке арналған белгісі бар орынға ұқсатуға болады. Кейін бұл ұқсатудың шегін көреміз: атау әрдайым тәуелсіз көшірмесі бар бөлек қорап емес.

Деректер түрі рұқсат етілген мәндер мен амалдарды анықтайды. Оны мазмұнға қойылған ережеге ұқсатыңыз: санға есептеу, мәтінге мәтіндік амалдар қолданылады. Атаудың өзі түрді анықтамайды.

Алдымен тұтас көрініс

src/main.rs ауыстырып сақтаңыз, organizer ішінен cargo run орындаңыз:

Бірінші мысалға дейін жазылым кілті: let атауды мәнмен байланыстырады, mut кейін осы атауға жаңа мән беруге рұқсат береді, : u32 теріс емес бүтін сан түрін ашық көрсетеді, ал = мән меншіктейді. ; нұсқауды аяқтайды. println! ішіндегі {count} атаудың ағымдағы мәнін мәтінге қояды; бұл жаңа бағдарлама блогы емес. Мұны саны жазылған таңбалы қағазға ұқсатыңыз: mut рұқсат етсе, санын ауыстыруға болады. Бірақ ұқсатудың шегі бар: атау әрдайым жеке көшірмесі бар қорап емес.

fn main() {
    let mut count: u32 = 2;
    println!("Бұрын: {count}");
    count = 3;
    println!("Қазір: {count}");
}

Нәтиже:

Бұрын: 2
Қазір: 3

Жариялауды бөліп оқимыз

let айнымалыны жариялайды. mut оған жаңа мән меншіктеуге рұқсат береді. count — таңдаған атауымыз, мағынасы «сан». : u32 — түрді ашық көрсету, 32 биттік таңбасыз бүтін санды таңдау. «Таңбасыз» дегеніміз — теріс мәнсіз. Бит екі күйдің бірін қабылдайтын екілік бірлік; бит саны мәндер ауқымын шектейді. Нақты ауқымдар 10-сабақта беріледі. = мәнді меншіктейді, теңдігін сұрамайды. 2 — сандық литерал; ; нұсқауды аяқтайды.

println! мәтініндегі {count} орнына айнымалы мәні қойылады. Жол ішіндегі бұл жақшалар Rust блогы емес. count = 3 мәнді өзгертеді, бірақ атауы мен түрін өзгертпейді. mut болмаса, қайта меншіктеуге тыйым салынады.

Түрді автоматты анықтау

Кейде түрді жазбай қалдыруға болады: компилятор оны мән мен қолданылуына қарап анықтайды. Бұл — түрді автоматты анықтау, түрдің жоқтығы емес. Басқа шектеу болмаса, let count = 2 бүтін санға i32 түрін таңдайды; ол теріс мәндерге де рұқсат береді. Оқу санауышында u32 түрін ашық көрсетіп, мәнмәтінді жорамалдауды талап етпейміз.

true және false — ақиқат пен жалғанды білдіретін bool мәндері. 'A' — char, Unicode жүйесіндегі бір рұқсат етілген кодтық мән. Unicode — таңбаларды ортақ белгілеу жүйесі; экрандағы бір белгі бірнеше кодтық мәннен тұруы мүмкін. Мұны мәтін туралы сабақта қайталаймыз. Дара тырнақша мұнда char мәнін, қос тырнақша мәтінді қоршайды.

"Rust" — &str түріндегі жолдық литерал. Дерекке иелік ету — оны сақтауға және қажеті біткенде босатуға жауапты болу. Мұндағы & — сілтеме: осы жауапкершілікті алмай, бар мәтінді оқуға қатынау; str мәтін бөлігін білдіреді. Мұны кітап бетін көрсететін қағазға ұқсатыңыз: қағаз екінші кітап жасамайды, ал кітап жоғалса, бетке көрсете алмайды. Осы мысалдағы дайын мәтін бағдарлама жұмыс істеп тұрғанша қолжетімді; &str арқылы оны өсірмейміз. Иелік пен жол түрлерін 18–22-сабақтарда тереңдетеміз. Логикалық амалдарды 11-сабақта қараймыз. Қазір түрлер тек сандармен шектелмейтінін түсіну керек.

Бір шағын бағдарламада бірнеше түрді тексеріңіз. true экранда да true болып көрінеді: Rust оны қазақша «ақиқат» сөзіне аудармайды. ready, mark және title атаулары «дайын», «белгі» және «атау» мағынасында таңдалды. println! мәтініндегі ирек жақшалар жоғарыдағы {count} сияқты атауы берілген мәнді кірістіреді.

fn main() {
    let ready: bool = true;
    let mark: char = 'A';
    let title: &str = "Rust";
    println!("{ready}");
    println!("{mark}");
    println!("{title}");
}
true
A
Rust

Атауды қайта жариялау және көріну аймағы

Сол атаумен тағы let жазу жаңа байланыс жасайды. Мұны атауды қайта жариялау (shadowing) деп атаймыз; ол бұрынғы айнымалыға мән меншіктеу емес. Көріну аймағы — атауды қолдануға болатын бағдарлама бөлігі. Ішкі блокта өз айнымалысы болып, одан шыққанда сыртқысы қайта көрінеді:

fn main() {
    let count = 2;
    {
        let count = 3;
        println!("Ішінде: {count}");
    }
    println!("Сыртында: {count}");
}

Нәтиже:

Ішінде: 3
Сыртында: 2

const құрастыру кезінде есептелетін тұрақтыны жариялайды. Түрі міндетті түрде көрсетіледі, mut қолданылмайды. Ал кәдімгі өзгермейтін айнымалы мәнді орындалу кезінде алуы мүмкін; бұлар бір ұғым емес. Тұрақты атауы әдетте бас латын әріптерімен жазылып, сөздері _ арқылы бөлінеді. DAILY_LIMIT — «күндік шек».

const DAILY_LIMIT: u32 = 5;

fn main() {
    println!("Жоспар: {DAILY_LIMIT}");
}

Нәтиже:

Жоспар: 5

Әдейі қате мысалда өзгертуге рұқсат берілмеген. Нәтиже орнына E0384 күтіледі:

fn main() {
    let count = 2;
    println!("Бұрын: {count}");
    count = 3;
    println!("Қазір: {count}");
}

Тірек сызба

Мән → атау → түр → рұқсат етілген амал. let байланыстырады; mut қайта меншіктеуге рұқсат береді; жаңа let қайта жариялайды; блок көріну аймағын шектейді; const тұрақты жасайды.

Жаттығу

  1. Ішкі блоктан кейін сыртқы count мәнін болжаңыз.
  2. Кейін 5 меншіктеу үшін let ___ count: u32 = 4; жолын толықтырыңыз.
  3. Айнымалыны тұрақтыға айналдырмай, E0384 қатесін түзетіңіз.

Тапсырма

Міндетті. Өзгертуге болатын u32 санауышын 4 мәнімен жасаңыз. «Бұрын: 4» шығарып, 5 меншіктеңіз, «Қазір: 5» шығарыңыз. Бұл неліктен қайта жариялау емес екенін түсіндіріңіз.

Өз деректеріңізбен. Басқа екі шағын теріс емес сан таңдаңыз.

Көмек және үлгі жауап

Үлгіде бір ғана let бар, кейін мән меншіктеледі. Жаттығу жауабы: сыртқы мән 2 болып қалады; бос орынға mut керек; өзгертуге рұқсат қатені түзетеді. Айырмасы түсініксіз болса, екі мысалды бөлек қайталаңыз, содан кейін арифметикаға өтіңіз.

fn main() {
    let mut count: u32 = 4;
    println!("Бұрын: {count}");
    count = 5;
    println!("Қазір: {count}");
}

Күтілетін нәтиже:

Бұрын: 4
Қазір: 5

Алдыңғы сабақ · Мазмұны · Келесі сабақ

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.