Shanraq.org Shanraq.org
Модульдер: іске қосуды негізгі логикадан бөлу
IT

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

Модульдер: іске қосуды негізгі логикадан бөлу

44-сабақ. Кодты файлдарға бөліп, қажет атауларға ғана қол жеткізу.

Мәтін ИИ көмегімен аударылды.

Алдын ала: құрылымдар, әдістер, жоспарлау құралы. Жобаның көшірмесінен бастаңыз: қолжетімділік шекарасын көру үшін мысал src/main.rs файлын түгел ауыстырады. Тапсырмаларды файлға сақтау кезеңі әлі басталған жоқ.

Таныс бейне және тірек сызба

Шеберханада ортақ үстел және құралдар салынған жабық шкаф бар. Үстелге келушіге қажет заттар ғана шығарылады. Модуль (mod) атауларды топтап, олардың көріну шекарасын белгілейді. pub атауды сол шекарадан тыс қолдануға ашады. Ұқсатудың шегі: кодтағы жабықтық түсінікті қолдану жолын құрады, бірақ деректі шифрламайды және компьютерді пайдаланушыдан қорғамайды.

mainuse crate::organizer::Task → ашық Task::new пен task.print → жабық өрістер. crate ағымдағы құрастыру бірлігінің түбірін білдіреді. :: атауға апаратын жол бөліктерін біріктіреді. use толық жолдың орнына қысқа Task атауын жазуға мүмкіндік береді. pub struct Task түрді ашады, бірақ pub қойылмаған id пен title өрістері жабық қалады. Сондықтан main ашық жасаушы әдісті қолданады, ал task.title = ... деп жаза алмайды. Құрылым өзгерістерді өз әдістерінде тексере алады. impl Task ішіндегі Self сол Task түрін білдіреді; бұл 28-сабақтан таныс.

Алдымен бір файл

src/main.rs файлын ауыстырып, cargo run пәрменін орындаңыз. Cargo хабарлары бағдарлама нәтижесінен бөлек. Қосымша тәуелділік жоқ.

mod organizer {
    pub struct Task {
        id: u32,
        title: String,
    }
    impl Task {
        pub fn new(id: u32, title: &str) -> Self {
            Self {
                id,
                title: String::from(title),
            }
        }
        pub fn print(&self) {
            println!("Тапсырма {}: {}", self.id, self.title);
        }
    }
}

use crate::organizer::Task;

fn main() {
    let task = Task::new(1, "Rust оқу");
    task.print();
}
Тапсырма 1: Rust оқу

Одан кейін екі файл

Енді mod organizer { ... } блогының ішіндегі кодты сыртқы ирек жақшаларсыз жаңа src/organizer.rs файлына көшіріңіз. src/main.rs басында бүкіл блоктың орнына mod organizer; қалдырыңыз, use crate::organizer::Task; пен fn main() өзгермесін. mod organizer соңындағы нүктелі үтір Rust-қа модульдің денесін бөлек файлдан іздеуді айтады. cargo run сол бір жолды шығаруы тиіс. private field қатесі шықса, main ішінен жабық өрісті оқығансыз; ашық әдісті қолданыңыз. file not found болса, src/organizer.rs орны мен атауын тексеріңіз.

main.rs — іске қосылатын бағдарламаның түбірі. lib.rs сол Cargo бумасындағы бөлек кітапханалық бөліктің түбірі бола алады: оның қызметтерін өзге бағдарламалар шақырып, жеке сынауға болады. Бұл жаттығуға lib.rs қажет емес. main.rs пен organizer.rs жұбының өзі іске қосуды логикадан бөледі. Үлкен жобаға ашық мінез-құлықты анықтауды үйренгенде кітапхана қосамыз.

Бетке қарамай жауап беріңіз

  1. pub struct Task неге title өрісін де өздігінен ашпайды?
  2. mod organizer; соңындағы нүктелі үтір не білдіреді?
  3. main.rs пен lib.rs айырмасы қандай?

Тапсырма

Міндетті. Ашық id(&self) -> u32 әдісін қосып, соның көмегімен Нөмір: 1 шығарыңыз; id өрісі жабық қалсын. Мұны екі файлға бөлінген нұсқада да орындап, cargo run арқылы тексеріңіз. Өрістің өзіне pub қоспаңыз.

Жауаптар

Жауаптарды көрсету

impl Task ішіндегі әдіс self.id оқи алады; сырттан task.id() шақырыңыз. Екі файлға бөлгенде әдіс src/organizer.rs ішінде қалады.

Талпыныстан кейінгі үлгі жауап

Төменде бір файлдағы толық жауап берілген. Екі файл үшін жоғарыдағы көшіру қадамдарын қолданыңыз.

mod organizer {
    pub struct Task {
        id: u32,
        title: String,
    }
    impl Task {
        pub fn new(id: u32, title: &str) -> Self {
            Self {
                id,
                title: String::from(title),
            }
        }
        pub fn print(&self) {
            println!("Тапсырма {}: {}", self.id, self.title);
        }
        pub fn id(&self) -> u32 {
            self.id
        }
    }
}

use crate::organizer::Task;

fn main() {
    let task = Task::new(1, "Rust оқу");
    task.print();
    println!("Нөмір: {}", task.id());
}
Тапсырма 1: Rust оқу
Нөмір: 1

Тексергеннен кейін

Модульдер туралы ресми түсіндірме · файлдарға бөлу. impl ұмытылса, 28-сабаққа оралыңыз.

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

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

Пікірлер (0)

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