Rust: алғашқы қадамнан жеке жоспарлау құралына дейін 27-сабақ (барлығы 35)
Task құрылымы: деректерді атауымен жинау
27-сабақ. Тапсырманың атауын, уақытын және орындалу күйін бір деректер түріне біріктіру.
Мәтін ИИ көмегімен аударылды.
Алдын ала: 9, 11, 19, 22 және 26-сабақтар. Кортеж әлі түсініксіз болса, 26-сабаққа оралыңыз.
Таныс бейне және тірек сызба
Тапсырма парағында «атауы», «минуты», «орындалды ма?» деген атаулы орындар бар. Кортежде .0 мен .1 нені білдіретінін есте сақтау керек еді. Құрылым (struct) — атауы бар өрістерден тұратын өзіміз анықтайтын деректер түрі. Өріс мәннің бір бөлігін сақтайды; дана (instance) — нақты толтырылған парақ. Ұқсатудың шегі: қағазға кез келген сөзді жаза аласыз, ал Rust өрістердің барын және түрін тексереді. Бірақ құрылым мәннің мағынасын, мысалы минуттың нөлден үлкен болуын, өзі тексермейді.
Task түрі → өрістер → дана → нүктемен оқу → mut арқылы өзгерту. Мысалға дейін сызбаны қайталаңыз. struct түйінді сөзі жаңа түрді жариялайды. Task атауынан кейінгі ирек жақшада атау: түр пішініндегі өрістер үтірмен бөлінеді. Бұл әзірге нақты тапсырма емес, оның пішіні. Rust дәстүрінде түр атауы бас әріптен басталады.
Парақты толтырамыз
organizer жобасындағы бұрынғы src/main.rs файлын сақтап, оны толық ауыстырыңыз. Cargo.toml тұрған бумада cargo run орындаңыз. Басқа файлдар мен тәуелділіктер өзгермейді. Нәтижені алдын ала болжаңыз.
Task { title: ..., minutes: ..., done: ... } нақты дана жасайды. Кортежден айырмасы — әр мәннің өріс атауы бар. task.title нүктеден кейінгі өрісті оқиды. println! мәтінді көрсету үшін қолданады; тапсырма одан кейін де қолжетімді. done — бұрыннан таныс bool түрі. Соңғы өрістен кейін де үтір жазуға болады; сонда жаңа өріс қосқанда алдыңғы жолды түзетпейсіз.
struct Task {
title: String,
minutes: u32,
done: bool,
}
fn main() {
let task = Task {
title: String::from("Оқу"),
minutes: 20,
done: false,
};
println!("Тапсырма: {}", task.title);
println!("Минут: {}", task.minutes);
println!("Орындалды: {}", task.done);
}
Тапсырма: Оқу
Минут: 20
Орындалды: false
Дана жасағанда өрістердің реті жарияланған ретпен бірдей болуы шарт емес: атаулар мағынаны сақтайды.
Өзгерту мен мағынаны тексеру
let mut task осы дананың өрістерін өзгертуге рұқсат береді. task.done = true жаңа логикалық мән жазады. Бұл жерде нүкте әдісті шақырмайды, өріске қатынайды. Құрылымның анықтамасына mut жазылмайды. task.minutes > 0 — жоспарлау құралындағы өз ережеміз. Нөл де u32 түріне сай, бірақ осы тапсырма үшін жарамсыз уақыт болуы мүмкін.
struct Task {
title: String,
minutes: u32,
done: bool,
}
fn main() {
let mut task = Task {
title: String::from("Серуен"),
minutes: 30,
done: false,
};
if task.minutes > 0 {
task.done = true;
}
println!("{}: {}", task.title, task.done);
}
Серуен: true
Шарт тек тексеру қай жерде қажет екенін көрсетеді. Кейін жарамсыз тапсырманы жасатпайтын және қатенің себебін білдіретін тәсіл енгіземіз. Мұнда пайдаланушыдан дерек алынбайды, сондықтан мысалды деректерді толық тексеру деп түсінбеңіз.
Жарияланған барлық өрісті толтыру керек. Келесі бөлек мысалда done жоқ, сондықтан құрастырушы E0063 қатесін береді:
struct Task {
title: String,
minutes: u32,
done: bool,
}
fn main() {
let task = Task {
title: String::from("Оқу"),
minutes: 20,
};
println!("{}", task.title);
}
Құрастырушы өрістердің барын және түрін тексереді, бірақ серуенге қанша минут лайық екенін білмейді. Қағаз пішінімен ұқсатудың шегі осы.
Түсінгеніңізді тексеріңіз
Taskпен бірtaskнесімен өзгеше?task.minutesнегеreport.1жазылымынан түсініктірек?minutes: u32минуттың нөлден үлкен болуына кепіл бола ма?
Жауап: біріншісі — түрдің анықтамасы, екіншісі — нақты дана; өріс атауы қызметін айтады; жоқ, нөл де u32 мәні. Тірек сызбаны жатқа айтып көріңіз.
Тапсырма
Міндетті. Сабақтағы үш өрісі бар Task жариялаңыз. Өзгеретін Тазалау тапсырмасын жасаңыз: 15 минут, false. Алдымен Тазалау: 15 мин, орындалды false, одан соң done мәнін true етіп, Кейін: true жолын шығарыңыз. Дайын нәтижені мәтінге жазбай, өріс мәндерін қолданыңыз.
Шекара. minutes өрісінсіз дана жасап көріңіз. Құрастырушы хабарын оқып, өрісті қайтарыңыз.
Ишара
let mut task = Task { ... }; деп бастаңыз, кейін task.done = true; жазыңыз. println! ішіне өрістерді беріңіз.
Талпыныстан кейінгі үлгі жауап
struct Task {
title: String,
minutes: u32,
done: bool,
}
fn main() {
let mut task = Task {
title: String::from("Тазалау"),
minutes: 15,
done: false,
};
println!(
"{}: {} мин, орындалды {}",
task.title, task.minutes, task.done
);
task.done = true;
println!("Кейін: {}", task.done);
}
Тазалау: 15 мин, орындалды false
Кейін: true
Тапсырманың деректері бірге сақталып, атауы арқылы оқылады. Келесі сабақта оған қатысты әрекеттерді қосамыз. Құрылымдар туралы ресми тарау.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.