Мазмунга өтүү

Өзгөчө кырдаалдар жана каталарды иштетүү

Сабактын башталышы

Өзгөчө кырдаалдар жана каталарды иштетүү

Каталар жөнүндө таза кабарлаңыз, коопсуз калыбына келтириңиз жана объекттериңизди туруктуу абалда сактаңыз

Негизги идея: өзгөчө кырдаал (exception) - бул функция өз ишин аткара албаганын билдирүүнүн жана маселени аны чечүүгө даяр коддго өткөрүп берүүнүн жолу. Чакыруучу этибарга албай коё турган өзгөчө маанини кайтаруунун ордуна, сиз ката-объектти throw кыласыз; андан кийин тил ылайыктуу catch табылганга чейин стекти чечет. Туура жасалса, бул коддун негизги ("бактылуу") жолун таза сактайт жана ката болгондо да ресурстар бошотулат.
Бул теманын аягында сиз:
  • throw, try жана catch туура колдоно аласыз жана std::exception тукумундагы объекттерди ыргыта аласыз,
  • стекти чечүүнү жана эмне үчүн так RAII өзгөчө кырдаалдарды коопсуз кылганын түшүндүрө аласыз,
  • үч өзгөчө кырдаал коопсуздук кепилдиги (базалык, күчтүү, ыргытпоо) жөнүндө ой жүгүртүп, коддду noexcept деп белгилей аласыз,
  • качан өзгөчө кырдаалдарды колдонуп, качан ката коддорун (мисалы std::optional же std::error_code) тандоо керек экенин чече аласыз.

1. Эмне үчүн жөн эле ката кодун кайтарбаш керек?

Ар кандай олуттуу функция катага учурашы мүмкүн: файл ачылбайт, эстутум түгөнөт, колдонуучунун киргизген маалыматы маанисиз, тармактан окуу убакыт боюнча үзүлөт. Бул тууралуу чакыруучуга кабарлоонун эки негизги жолу бар.

  • Ката коддору / өзгөчө маанилер: функция чакыруучу текшериши керек болгон атайын маани (-1, nullptr, false, enum) кайтарат.
  • Өзгөчө кырдаалдар: функция объектти throw кылат; кадимки аткаруу токтойт жана башкаруу иштетүүчүгө өтөт.

Ката коддорунун жаман жери - аларды этибарга албай коюу оңой. Чакыруучуну кайтарылган маанини карап турууга эч нерсе мажбурлабайт, ошондуктан унутулган текшерүү программаны тынч бузат. Дагы алар ар бир чакыруу ордун if текшерүүлөрү менен толтурат жана кайтаруу каналы жок жерден - мисалы конструктордон же перегрузкаланган оператордон - ката жөнүндө кабарлай албайт. Өзгөчө кырдаалдар муну чечет: иштетилбеген өзгөчө кырдаалды тынч жоготуп болбойт (анын ордуна программа токтойт), ал эми ката тиби өзү менен билдирүү алып жүрөт жана маалымат алып жүрө алат.

C++ Core Guidelines документинен түз практикалык эреже: түздөн-түз чакыруучу адатта иштете албай турган сейрек каталар үчүн өзгөчө кырдаалдарды колдонуңуз, ал эми күтүлгөн жана жергиликтүү каталар үчүн кайтарылган маанилерди тандаңыз. Муну 7-бөлүмдө тактайбыз.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө