7. Option and Result Types, Error Handling (Rust on NEAR Course)
Nothing is loaded from YouTube until you press play, and then without tracking cookies.
About this video
All course videos: • Курс Rust на NEAR (RU) Joint course by NEAR & 4ire Labs
Subscribe to receive updates on NEAR news, promotions, project launches, bounties, and hackathons. Russian-speaking NEAR community: t.me/near_protocol Twitter: / near_protocol Chat with developers: t.me/openwebdev
Follow the latest from NEAR Protocol on: Website: near.org Discord: near.chat Blog: near.org/blog Twitter: / nearprotocol GitHub: github.com/near github.com/nearprotocol #Blockchain #FutureIsNEAR #NEAR #nearprotocol #rust #wasm #assemblyscript #rast
Transcript
7,173 wordsCaptions as YouTube publishes them, usually machine-generated, so product and people names can be misheard.
- 0:00
хорошо сегодня мы с вами рассмотрим тему про общин разжался хендлинг это одна из важных тем в работе и как конкретно при программировании на власти и также принципе на любом языке программирования новости скажем гораздо приятнее потому что многих языках программирования и давайте с вами рассмотрим почему так ошибки всегда являются неотъемлемой частью программы то есть они всегда существует не важно на каком языке программирования вы
- 0:36
пишете они всегда были всегда есть и всегда будут от них никуда не идти и самое главное что нужно знать это что ошибки при этом нужно лишь правильно обрабатывать и нужно это делать по из тех кто писали на других языках программирования думаю знакомы с этим концертом потому что ошибки в программах это всегда нормально ненормально когда ошибки не обрабатываются правильным образом соответственно давайте такие рассмотрим примеры ошибок которые могут возникать когда они обрабатываются в различных
- 1:15
языках программирования то есть если мы говорим про низкоуровневые языки программирования такси ситнова спас это например у толпа интерсекс также это когда вас в каком-то из этих языков программирования у вас происходит утечка данных во время возникновения exception то есть когда у вас ошибка не обработано и скажем ваша программа просто выдается exception в который может содержаться
- 1:44
какой-то чувствительная информация перепады громкости окей постараюсь вроде на одном расстоянии как может происходить утечка данных при эксепшен а ну допустим представьте у вас какой то есть приложения у вас происходит какое-то взаимодействие со базы данных это база данных закрытая при этом вас каком-то из мест нет обработки исключений у вас возникает исключение и к примеру скажем база данных выдает
- 2:22
ошибку не содержится какая-то информация скажем о другом пользователе и и luxe статистики из базы данных ну допустим это был банк какой-то и вы получили информацию что вот вы там клиент с таким там фото иди всего клиентов вот столько то суммарно ресурса вот столик это у вас была вот такое количество ресурсов то есть это очень плохо есть такая такие данные вытекают ну и соответственно злоумышленники и различные
- 2:55
хакеры этими исключениями этими ошибками обязательно воспользуются тогда того чтобы так или иначе получить доступ системе нежелательны служба че smart контрактов это относительно приемлемо скажем так но все равно стоит это учитывать потому что даже несмотря на то что нет утечки данных потому что по сути у вас контракт и почти всегда это публичная информация вы не хотите разглашать эту информацию третьим лицам и конечно же что может возникать
- 3:32
пожалуй это самая худшая если вы не обрабатывать ошибки это какой-то не приданое поведение то есть язык что такое не определенное поведение это непредсказуемое поведение то есть тут зависит от реализации скажем и компилятора и от платформы на которых про это происходит точно каждой платформе может быть сама реакция на такую ошибку и такие ошибки очень сложно следить поэтому они самые плохие ну
- 4:04
например приведу пример вот да какая то ошибка доступа к кому-то участку памяти который не существует в котором не существует данных если это будет не приданое поведение а при этом вы ожидали получить какое-то число из этой памяти то в таком случае ваша программа допустим скомпилирована может просто заменить это число на 0 и у вас допустим было сложение каких-то баланса вместо того чтобы получить ошибку что
- 4:41
невозможно прочитать баланс вас будет со мной и и потом вы допустим будет очень долго добавить такие проблемы потому что очень сложно очень сложно такое отследить ведь у вас просто где-то было до сложение чисел и вы сами не ожидали что где-то может могло появиться случайное число и при этом программа работает вроде как кажется что она вредна это уже всего лучше даже лучше если программа падает чем вот такое не определенное поведение конечно если программа падает это очень плохо но тем
- 5:19
не менее это даст вам проще отследить и где она упала давайте собственно разберемся поговорим про обработку ошибок допустим у вас есть где-то пустой вывод информации пустой результат и вам нужно каким-то образом на него реагировать какие механизмы других языках пропустить вас пустой пустые данные вот та возвращают в принципе одно и то же похоже что ж если касается роста прости обработка ошибок сказать особое искусство вернуть но это очень классно
- 6:06
это очень удобно то есть прости обработка ошибок требуется во время компиляции что это значит это значит если у вас написали какой-то код или вы используете это библиотеку которая которая может возвращать ошибки раз не даст вам скомпилировать программу если вы не учли такой сценарий что у вас может возникнуть та или иная ошибка если вы не обработали эту ошибку если вы не обработали все случае это ошибки то есть исключая все возможный
- 6:43
вариант это очень классная фича языка потому что это позволяет делать ваши приложения ваши библиотеки все что вы делаете такими устойчивыми надежными предсказуемыми потому что если вы даже добавляете какой-то новый модуль ваше приложение или вы расширяете как-то вашу библиотеку и при этом какой-то из придут из старых моделей или старых или взаимодействие старого модуль основы не учитывает все возможные варианты ошибок это также будет у вас ошибка компиляции что значит что вы не сможете
- 7:22
ни как за диплом по ошибке не готового приложения не закончена которая не учитывает все кейсы которые могут произойти вы не сможете такой ход за да просто не скомпилировать также это помогает находить ошибки раньше то есть на ранние стадии вот представьте вы пишете какое-то приложение допустим какой-то сердце и у вас сервер обрабатывает запросы пользователей и при этом в зависимости от различных ситуаций в зависимости от тех данных которыми
- 8:04
приходит может возвращать разные типы ошибок и представьте что вы какой то скажем из типов ошибок не обрабатываете и потом пользователи начинают пользоваться вашим сервером и еще хуже если сторонние приложения используют ваш сервер как зависимость и соответственно потом возникает какая-то ошибка и оно не обрабатывается и это очень плохо это потом это приводит к потере денег финансово племени пользователей и так далее в случае сразу
- 8:39
опять же ваша программа просто низ компилироваться если вы на роду что-то забыли добавить и конце концов это делает намного еще модификацию вашего года то есть в таком случае вы добавляете из пасти новый код вы знаете если он вас компенсировался даже это по вере новому году и так далее это значит что ошибки которые могут возвращать тили-тили не модулей модули они уже обработал опять же если код компилируется простит существует несколько типов ошибок это
- 9:20
рукава бал ошибки . ошибки состояние которых можно восстановить что имеется ввиду это значит что возникла какая-то ошибка которая является не критической а значит что состояние программы которая существовала в моменту возникновения этой ошибки его можно восстановить и можно как-то обработать допустим сделать повторную попытку доступа формации пытались получить например это ошибка
- 9:57
если не найдет файл примеру вы хотите записать какие-то данные в файл ну вы при этом ожидаете что этот файл уже существует систему пользователя но даже если этот файл не существует было бы странно и запрета вопроса завершать выполнения программы то есть получать какие-то x исключения чтобы программа упала данном случае это ошибка который можно записать потому что его создать опять же логика
- 10:34
ваши или например какая ошибка что прервано соединение это ведь тоже восстанавливая ошибка в день можно попробовать подключиться заново к сети подождать какой-то определенный тайм-аут и программа продолжится исполнении это никак не отразится на experience и пользоваться например какой-то контейнер то есть вы запрашиваете из какого-то контейнера но вы заранее проверяет контейнер пустой это не
- 11:15
является ошибкой вы можете написать какую-то логику до обработки допустим подождать пока контейнер заполнится например у вас контейнер да можно привести простой пример вы ожидаете что пользователь там загрузил какой-то изображение в библиотеку если у тех какие-то эти изображения в их выводить из ты их нету то соответственно вы просто не делаете ничего или при этом страхе существует 2 типа ошибок это с другими словами это или те ошибки
- 11:53
которые состояния системы которой можно восстановить до того как вы получили эту ошибку и которая с которой какой программе ест ничего не сделает даже обработки ошибок и поэтому вот можно привести пример таких ошибок это вот например когда вы пытаетесь получить доступ к памяти которая находится за границей мастиф в данном случае это не восстановило и здесь что-то настолько ваша программа не та ну и как это ошибки которая не могут
- 12:34
быть обработаны как и месяцев инженером который это написал такие ошибки начнем и ошибок которая невосстанавливаемые если так русской дословно такие ошибки вызываются брать с помощью с помощью макроса памятник что он выходит сообщение об ошибке на экран потом происходит разворачивание происходит очищение стек а те кто не знаком с этим процессом постараюсь объяснить кран когда вы в программе самой главной функции с точки входа в программу например у вас не происходят какие-то
- 13:26
действия и вас есть какой-то столб если вы помните из предыдущих версий мы обсуждали не происходит которых есть свой спал в своей области или масти у тех функций еще есть своя область видимости и так далее и так далее это процесс такой рекурсивной одни функции вызывают другие это устроиться и строится из этого вызова функции и что происходит если вы вызываете раз panic или какая-то
- 14:04
этого вызывает макрос panic о происходит в рекурсивном порядке рекурсивном это значит начиная с самой последней функции которая вызвана то есть непосредственно стой функция которая возникла ошибка начинаются рекурсивное возвращение предыдущие функции которые вызвали эту функцию и постепенно освобождается память которая была это этими функциями и после того как памятник еще предыдущей функции
- 14:42
памяти так происходит до самого верха функции main которая которая начиналась выполнение вашей программы которая входа в приложение то есть макрос пони он выводит сообщение об ошибке он разворачивает и очищает и потом вашей программы с кодом ошибки определенным кодом ошибки при этом операции врачевание очистки стыка она является стоящие как я объяснил слышали вы должны то есть эта операция она постучит разворачивает дерево вызовов функций и
- 15:35
постепенно постепенно постепенно очищается и это достаточно дорогостоящие операции допустим это может быть нет то что вы хотите делать на какие-то устройства которых ограниченное количество ресурсов ну допустим какой-то там бету спросится какой-то микрочип для этого расти чтобы от этого избавиться программа получила и типа никому не хотите разворачивать нужно сделать что-то более дешевая до этого можно функция она просто завершает выполнение
- 16:17
программы не часто чтобы править такую возможность вы можете конкретно указать что при panic вы хотите получить поведение то есть опять же указал релиз но как мы проходили с вами на лекции про карму можно также указать допустим если у вас есть какой-то кроссплатформенное приложение можно так каждый платформ указать свое конкретное поведение чтобы происходить при вызове функции panic так перейдем дальше
- 16:59
давайте посмотрим на такой пример с макросом по ней как вы видите дальше как вы видите у нас есть вот такой пример кода который содержит вот такую простую строчку макро спальник в нем какая-то какой-то текст то есть ups если мы скомпилируем их программы то мы получим следующий следующий следующий вывод на экран ансальдо что этот main вот таким сообщением и получить строчку которой то есть достаточно продукты моление
- 17:51
паниковала и в такой строчки при этом если вы хотите получить детальную информацию где случилась эта ошибка получить деталь навела как происходил вызов функции что привело к этой ошибки до этого так как вам советуют собственно это который получает этот компилятора что запустите с флагом проводить как запустить это на той же самой команда которого запускаете допустим cormoran но перед карвера
- 18:29
написать распространяется измениться или можно выставить переменную среды окружения конечно же как и советую как и советуют как и свету компилятор раз что такое астана chiquita большинство ошибок которые программисту достаточно просто сделать какую-то логику
- 22:12
так ясно сказали что услуг оказалось что он решил красноте так и напишите пожалуйста в чате что была последняя о чем было слышно что я честно говоря только телеграме увидел про она ковра брс можно сначала но к сожалению нет сначала нет сначала нужно записи про этот слайд текущие рассмотрели или нет а вот этот вот тут ok разбитое состояние было спасибо за информацию а вот что такое
- 23:09
это ошибки опять же который можно достаточно легко обработать которые до которых программист может написать какую-то кастовую логику про то как обработать эти ошибки или то есть можно избежать неожиданного завершения программы можно избежать какого-то не определенного поведения и сделать принципе да users более удобным что вас ничего не падает вас не происходит странных вещей и такие ошибки
- 23:41
обрабатывать 1 до этого до этого прости есть два типа дженерики нам стать таких обобщенных а нам что такое нам вы знаете что-то generic это мы частично рассмотрим на следующих лекциях но в целом один из типов это общее с этим типом вы уже знакомы мы его рассматривали детально когда у нас молодец а пропадал мачин но сегодня мы его рассмотрим чуть чуть более питания и что же внутри этого типа и как он используется и при этом есть и прорезал
- 24:22
и тут кстати ошибка это не разжался и даже бы терзал стиль , вот и мы это исправим а тут ошибка на слайде ядерного пришел уже ошибка что такое общем тесла и давайте посмотрим как он объявлен собственно стандартной библиотеки то есть хочу отметить что вот вот эти оба типа как общем так и резал по сути это не то чтобы да какая то встроена встроенная фичах сам язык программирования в данном случае эта
- 24:56
функция это не помню функция это и на стандартной библиотеки раз то есть если у вас стандартный библиотека подключена она автоматически обычно подключена у вас есть доступ к этим и нам эти и нам собственно реализованы методами языка программе 1 то есть что такое определение у этого общин как его ну на самом деле вот вот так то есть сам код обычный и нам как вы видели на предыдущих примерах у которого есть два значения это и значение новым то есть которая буквально
- 25:38
значит ничего то есть нету значения и сам с типом ти тип те в данном случае это дженерик тип это обобщенный тип если вкратце я чтобы сейчас не даваться до тех кто не знаком с этим понятием это значит что вот это вот и на его месте может стоять в принципе первое значение то есть это может быть какое-то число допустим ue 32 это может быть какой-то буря это может быть какая-то строка это может быть какая-то структура написанная вами это
- 26:19
может быть это могут быть какие-то произвольные данные это также может быть какая-то структура скажем соединение то есть какой-то сроки назначения самое главное ты понимаешь что так как здесь это generic носить это кстати может любой тип любого типа используя нам общем вы можете понять если значение до этого типа если это сам скобочках ti или это значение от но это показатель отсутствия
- 27:01
и при этом этот тип очень обобщенно используется либо там смотри вами несколько лекций назад если кто помнит и возможно кто-то из вас уже делал домашнее задание про которые мы говорили возможно вы уже использовали этот общем но мы рассмотрим его еще чуть чуть более деталь для чего использую общем эти допустим для объявления из начальных значений представьте допустим у вас есть какая-то структура вы ее создали
- 27:38
и при этом часть полей вниз то есть часть переменные которых которых является часть вашей структуры вы не хотите не цель жизни рвать сразу при создании ну допустим у вас есть [музыка] скажем какая-то структурка которая подключается по какой-то ссылки какому-то серверу и потом до скажем загружает какую-то строку ну допустим имя пользовать и вы изначально можете создать создать экземпляр этой структуры
- 28:18
но вы можете указать начали не стал ни какие-то данных то есть вы подразумеваете что изначально вы хотите создать структуру в которой часть значения некоторых полей будет отсутствовать и это удобно что вы можете это сделать с помощью общем ну как вы знаете в расте потому что вы не можете создать структуру значение которых неизвестна ответы на вопросы не значение которых неизвестно вы не можете создать структуру при этом не инициализировать серии по да а в данном случае у вас
- 28:55
инициализация полей будет но у этого поля если вы не хотите вы бросают значения входят значения но какое было задание поднимаю домашнее задание по какой причине и допустим это так называемая если назвать частичной функции что мясо ряду допустим у вас есть какая-то функция которая принимается до 5 параметров и бы допустим точно знаете что если приходит три параметра выполняете такое действие если приходит четыре параметра вы можете выполнять какое-то еще дополнительное действие
- 29:36
если приходит все 5 параметров вы можете выполнять их еще какие то дополнительные действия то есть эта функция которая принципе должна работать с ты там в ней например три аргумента четыре пять аргументов этот 3 это как бы не полноценна и происходит частичное выполнение еще наполняя логике которая назначена переданного количество аргументов то есть в данном случае если у вас некоторые аргументы функция представляет общем те это значит что вы можете
- 30:10
вы можете скажем присваивать изначальное значение этих имен of a и в данном случае значение будет представлять отсутствие отвращения то есть вариант новый также вы можете использовать это простых ошибок что имеется ввиду под пустыми ящиками давайте сначала посмотрим что такое сложно ошибки представьте вы пытаетесь открыть какой-то файл и по какой-то причине у вас какие могут быть варианты почему может быть но допустим файл может
- 30:51
не существовать это одна ошибка с другой стороны файл может быть может существовать но допустим он очень огромные и вы не можете с вашей программы прочитать полностью пауза раз и вас тоже будет определенные ошибках или опять же может быть ошибка например что вы не можете открыть файл потому что он существует но у вашего приложения допустим нет доступа к этому файлу то есть доступ к файлу ограничен и вашего
- 31:24
приложения доступ к этому файлу то есть это еще ошибки это непростое не простые ошибки данном случае это комплексно ошибка потому что вариантов больше тимати что такое простая ошибка представьте вот вы делаете тамошняя стане про фигуры и вы бы там допустим создали структуру с фигурой и изначально поля ну допустим фигуру квадрат вас в этой скажем 64 и вы можете посчитать площадь квадрата после функции новые допустим
- 32:11
сделали что у вас опционально является ну в данном конкретном случае это не имеет смысла но тем не менее мы задекларировали общем те x x в нем опционально содержит review 64 или ничего и потом соответственно вы должны как-то в этой в этом случае написать функцию которая возвращает площади в данном случае вы так не может указать вам раз не даст компилировать программу потому что в данном случае это будет уже
- 32:52
не числа это у вас будут общие общего типа и 64 соответственно допустим если у вас нету значения до этого типа то вы можете возвращать функции общем 4 если у вас на границе релизе rowan ваш квадрат 5 просто новым и чего у вас нету данных соответственно вы посчитать ничего не может знать что вы возвращаете но есть простые ошибки это грубо говоря которых у вас концептуально подразумевается только один вариант
- 33:30
ошибки в данном случае ошибка в чем нет у данных это простая ошибка но в целом часть это ошибок рекомендуется использовать в этих которые мы рассмотрим чуть чуть позже также опциональной вот каким он только что рассказывал примере про квадрат то есть вас вы объявили переменную x которая скажем которая стороны квадрата обозначает новые при этом ее можете привить с помощью типа общем и при этом это будет водить устройство со может
- 34:10
быть значение стороны квадрата а может требовать так это анальные бусы тоже как я до этого рассказал рассказал частичную функцию то есть вы можете часть каких-то параметров передавать часть не передавать и при этом у вас будет обрабатывать такие случаи и конечно участка памяти которые давайте рассмотрим пример кода выглядит работа общем как вы можете создать и в данном случае вот первый пример как раз это общее типа и 64 который вы допустим
- 34:56
могли потом присвоить значение переменных вашего квадрата этом примере который вот я снял начали смотреть об общем то и все четыре которым предстоит при значении сам с определенными число нотки то есть сам значит что есть какое-то значение переменной значение будет 3 4 5 6 как вы помните если что если кто-то забыл вот это вот синтаксический сахар по сути это число 23 миллиона четыреста
- 35:31
пятьдесят шесть тысяч семьсот восемьдесят девять дата чтобы проверить данном случае вам вернет вот этот общем мы используем окрас и пол и в предыдущих миксах моего уже рассматривали грубо говоря этот макрос что делает он сравнивает что первый аргумент функции и второй аргумент функции они равны если они не равны но происходит вызов макроса пони то время с вами только что рассмотрели то есть в данном случае мы вызываем
- 36:05
переменной x функцию из сам что дело это получится эта функция проверяет есть ли какое-то значение переменной x находится сам котором есть какое-то значение то эта функция самбер этом ту и этот код будет валидный папа не не произойдет до следующего случая мы создаем epam общую 64 и которая есть значение но вижу комментарии метод только есть концептуальные отличия ну да еще про раз прям стыдно говорить итак итак потому что вырастили класса в россии структуры поэтому здесь понятие
- 37:01
методы функции расти более актуально если про различие между функциями методом более актуально и боксировать в данном случае большой разницы не если говорить конкретно это метод трейдер что продолжим дальше данном случае мы вызываем тот же метод и сам буду говорить метод если это удобнее в нем его звонит из самых данном случае on tv потому что нас значение одном также есть другие удобные методы взаимодействия с типом общем это такие
- 37:54
как например аналогично этому если этот из новым чтобы понять устоялись структура или или нет но этих методов их достаточно много и посмотреть как использовать это нужно будет самостоятельно в конце лекции у нас будет ссылки на документацию к этим методам и я вам очень рекомендую потренироваться самим по использовать метод этой структуры или достаточно много под все случаи жизни так сказать каких комбинировать но это нужно сделать
- 38:34
самостоятельно этом случае привыкнуть документация она кого-то возникнут сложности с пониманием пожалуйста пишите в чат конкретные случаи какие-то примеры что не получается перес как лучшая да соедини цепочку и проверку вот этих общем и мы вам поможем перейдем теперь к грамматику тут кстати тоже и , должна быть потому что этот тип generic относительно двух типов но это небольшая ошибка это исправим просто не
- 39:19
обращайте dance части на внимание но если из вас generic 100 до вас это не проблема собственно вот такой тип резалт он предназначен в первую очередь разработки рашид давайте посмотрим его определять и опять это это просто и нам относительно двух типов только в данном случае не другие если случаев общем у нас было новый и сам типом те то в данном случае у нас есть два типа это окей с типом тыр с типом и вот это вот это
- 40:05
вот давайте рассмотрим то есть и это общение типы и соответственно в данном случае тип т идти отображает результат из вариантов ok то есть значение которое будет лежать в случае если у вас нет ошибки теперь кей варианте окей и это типа и который отображается тип ошибки которая возникла в результате того что вы получили вариант вариант р это соответственно вариант с ошибкой давайте под
- 40:56
не простой пример данном случае мы импортируем выбор импортируем модуль доступа к файлу и соответственно пытаемся открыть файл таким вот именем сразу кстати например наперёд используется достаточно много примеров которые вы можете найти в 1 куб то есть там вы увидите те же пример и даже намного больше поэтому очень рекомендую посмотреть в данном случае это будет скажу сейчас точно какая глава если не ошибаюсь наверное 9 но примеры очень много примеров там они будут идентичны
- 41:45
данном случае у нас мы пытались открыть файл вот в этой строке таким вот названием так мы можем понять что этот тип отображает ну то есть он получает проезжал жалкий тип данных как результат ну это можно сыграть в документацию документацию модуля и посмотреть как у него объявлена структура файл и опять же если бы вы попробовали скомпилировать эту программу и вас неправильно было бы использования типа вам бы компилятор обязательно
- 42:31
сказал что здесь вообще-то резал до этого файла они просто то есть в данном случае это будет результатом будет резал типом вместо ти будет спать вместо р будет стёр тоже использоваться и как обрабатывать ошибки с зал ну опять же с помощью потрачен то есть сейчас
- 43:39
так обрабатывать результат это конечно с помощью pattern matching который мы рассматривали на предыдущих лекциях в данном случае мы расширяем от предыдущего примера до следующего что мы сначала получаем файлу то есть функцию open и потом мы анализируем значение полученного результата значение переменной f и здесь если нам пришел вариант руке и внутри которого содержится файл то мы возвращаем в
- 44:15
данном случае переменная будет содержать сам этот страх если же мы получили какую-то ошибку то а сама ошибка то мы вызываем panic которым видим сообщение о том что не можем получить не можем открыть файл и непосредственно шип давайте посмотрим какую ошибку нам выдаст если вы скажем просто запустить эту вот у вас вы создали отдельную папку для проекта бы не запустили вот это вот какую бы лучше
- 44:47
а вы получится следующая ошибка что вы не можете открыть файл и в ней как бы описание ошибки смотрим вот смотрим виды ошибки not found и строим сообщение станет такого файлы и директории но атаковали директории конечно нет потому что выкройка стали папку и не садятся со этого про в данном случае можно обратить внимание и заметить что выводить на экран can't open the file по при этом вы
- 45:21
получили с тобой информации который и и это сообщение нас достаточно такая сама описываемая ошибка получилось в результате попытки доступа к но так как мы с вами рассматривали матче мы можем с нами предположить что значит информации на самом деле больше и зависимости от того какую ошибку мы именно получили мы можем реагировать по-разному как я вам говорил допустим могла возникнуть почему что
- 45:59
файла не существует или полу нет доступа или еще другие варианты данном случае мы видим что файл не найден то есть нет давайте решим этот пример чтобы реагировать более подробно в зависимости от типа ошибок и таким образом у нас двойной поднимать то есть мы открываем файл потом мы анализируем значение получает у полученного результата даже если в нем ok из файл мы получаем файл если же там какая то ошибка но тогда мы делаем 2 потом очки в зависимости от типа ошибки
- 46:39
и щетка яндиева если файл не найден то мы создаем этот файл и возвращаем его листа если мы не смогли создать файл допустим у нас нету правда чтобы создать а создавать файл заданным по закону пути то мы возвращаем ошибку с помощью panic мы вызываем невосстанавливаемые тип ошибки потому что уже попытались как-то восстановить эту ошибку файла не было на бы его попытались создать но мы его и создать испоганить и в данном случае мы логика подразумеваем
- 47:18
что говорится на этом наше исполнение все закончено поэтому в данном случае а мы вызываем ошибки потому что мы логика не смотрели что какая-то другая ошибка то мы просто в данном случае выводим эту ошибку на экран с помощью вызова метода по не вызываем не восстанавливаем вашей я вижу комментарии в чате что тут можно ли вкладывать масть блок 1 нужные ветки добавить это можно сделать случае
- 48:07
давайте с вами рассмотрим также можно использовать тот же самый тип и общую для того чтобы не казалось бы открывать и при этом у вас какой то еще а потому происходит вы допустим просто хотите что если не открылся туры просто завершаете исполнения программы чтобы программа подписать с этим делать это конечно не очень хорошо ну допустим вы не знаете что с этим делать не открыли файл программа упало вот и так далее для этого есть какие скажем более простые способы
- 48:55
взаимодействия вот это типами общин и резал один распространяет этот метод понуро и рассмотрим простой пример что делает метод метод она он по сути вот например для общем если у вас есть какое-то значение в этом общем то есть оно не ну то вам возвращено это значение то есть данном случае вот я создал переменную типа f которая вызывает файл если никакой ошибки не произошло под переменная f вас будет содержать результат в данном случае это правда если же
- 49:43
произошла какая-то ошибка перед выполняли этот метод но для структуры общем то у вас произойдет память та работа которая выведет нас транса на экран будет сделает он выйдет стакан binding очистить и у вас программа завершится то есть данном случае вот вы можете посмотреть как вот да типа лапша вот это благодать и порезал потому что мы с вами уже рассмотрели что file open возвращает разок а что
- 50:25
касается общем вот мы создали перемену сам и мы пытаемся вызвать сам она вот вот эта часть кода очевидно что она процентов будет перекрывать потому что данном случае это ну вот эта часть кода ну поэтому пример мы сами не может точно сказать будет она паниковать или этот файл может находиться ведь проект правильно что рассмотрим еще другой метод другой метод это метод expect что делать методы кстати ну на самом деле этот
- 51:02
метод очень похож с за исключением того что вы эксперт допустим передаете какую-то строку к непосредственно которую вы хотите вывести на экран а то есть данном случае вы пытаешься открыть файл по которым передадите имя файла и если возникает какая-то ошибка то будет вызван panic и соответственно в этом панике будет содержаться вот вот это сообще город ну соответственно точно такой же пример да переменной общем мы создали перемену
- 51:47
общего которые значения ну и потом хотим получить значение данным и в случае если данных нету там лежит ну а мы вызываем panic котором будет содержаться вот это сообщение а по примеру того что я вот только что показалось то есть также большое количество других методов про который говорил достаточно удобной до работает с помощью до работы с общей срезал вот если у нас и если допустим он в данном случае бы
- 52:36
вернул бы значение которая содержится в ошибки но если вы ошибки не было и значения окей тогда бы этот вот и таких методов еще много в этих и общем допустим по нраву дефолт то есть вы бы могли здесь написать вот к примеру в этом примере что сам м 5 а приступишь к самым тебя то он рапу дефолт это есть если значения было новым то вы допустим возвращаете скажем 0 или возвращайте 5 вы возвращаете какое-то
- 53:16
значение по умолчанию вот таких методов очень много для вот этих общин мира зал по такому же примеру есть таких много и соответственно чтобы к ним привыкнуть здесь нужно вам самим про попрактиковаться то есть вам придется понять где и как использовать эти методы и как вам удобнее а для этого нужна практика попрактикуйте сами посмотрите пожалуйста вот эти вот ссылка документацию для типов общих и раза лт то есть по сути это будут ваши первые попытки чтение документация по раз для
- 54:04
тех кто этого еще не делал вот вам придется читать вам случае это первые попытки как бы до этого достаточно простой случай если вы не будете понимать где как использовать и комбинировать эти методы общем и до завтра какие методы использовать в них то есть там он раб когда использовать когда использовать expect когда использовать другие методы как контент и так далее не переживайте это все приходит просто от практики
- 54:40
нужно так сказать еще частично мы эти методы экшены разу не методы эти типы общин и ресанта мы рассмотрим с вами подробнее у нас по моему через одну лекцию будет ли к функциональному программированию и на этой лекции мы так или иначе будем много взаимодействовать с типами общины резал поэтому также не переживайте мы там сами детальнее рассмотрим эти методы и будем использовать гораздо больше методов их
- 55:15
чем показали сейчас но на текущий момент попробуйте модифицировать ваши вот например с фигурами попробуйте модифицировать их найти какое-то правильное и удобное применение до вот этих кувшин и резал и опять же проверьте вдруг руб об этом как быстро это что мы начинаем с простого примера и чуть-чуть вода ваше задание разрастается и разрастается то есть надо понять где это место применять где неуместно потому что скажем пример
- 55:45
который рассказывал что у вас есть структура квадраты которой сторона является опциональным полем там может быть новым и это может быть какое-то значение этот пример конечно да они очень удобны то есть было бы странно что вы можете создать квадрат у которого нет стороны в данном случае это было бы уместно только если бы вас вокруг квадрата было еще свертков какую-то другую строку
- 56:09
тогда может быть но к примеру год скажем такой простой пример у вас может быть если говорит пар обертку вокруг структуры и то у вас может быть какой то холст на котором может быть квадрат то есть опциональный будет квадрат или его не будет в данном случае общем это место да то есть в зависимости от того если у вас есть квадрат на более вы можете сказать что он есть и что у него есть
- 56:41
такая вот площадь ли вы какая сторона вот поэтому попробуйте поэкспериментировать со своим домашним заданием опять же почитайте документацию возможно тем кто это кто этого еще не пробовал делать будет тяжеловато но ничего это хоккей если у вас будут какие то конкретные примеры где использовать нужно тот или иной тип где использовать тот или иной метод или как это лучше скомбинировать пишите пожалуйста автором чат но с этим поможем постараемся все как бы
- 57:12
ваши вопросы и обработать вот окей перейдем тогда к вопросам как вопросов нет то это был один вопрос и женил ответил если дженерик до числовых типов такие намбер java же не ответил что в качестве как вы можете использовать любой тип то общий зал алекс задает вопрос а как ограничить аргументы только для числовых значений в данном случае это будет сложен вопрос то есть этот вопрос касается трейдов и generic of trade и мы немного рассмотрим
- 57:51
дженерики тоже мы поверхностно рассмотрим но в данном случае как ограничить когда у вас допустим разжался такого типа то у вас конкретно в данном случае вот образом твой не ограничит потому что раза вот это уже есть этот и нам он уже и реализован вы можете создать свой какой-то развал который которому вы бы только числовые значения и до него указать что тип тьi должен реализовать какой-то trade in the jar и тогда у вас это будет работать но в
- 58:29
целом это outlast коп этого курса потому что это такая более комплексная логика и большинство людей процентов 99 вряд ли будет с ней сталкиваться при написании смарт-контрактах то есть это уже такой продвинутый раз это очень круто что вы задаетесь такими вопросами наносят этого я советую почитать про звуки тему про generics и про ограничивание при этом прокаста ошибки что там она сказать да вы можете преобразовывать один видов ошибок в другой опять же
- 59:25
хотя бы куда посмотреть куда посмотреть сейчас попробую сказать по сути я советую посмотреть в тех же методов рас ал а в нем есть методы вот с типом опора и асмап в котором вы можете преобразовывать один тип ошибок в другую то есть грубо говоря вы можете написать логику используя потрачен вот как например секунду раз покажу примеру вот у вас был этот примерно в данном случае если бы вас это было не
- 1:00:07
функция main да так скажем который возвращает ваш результат скрытый файл или ваш какой-то собственный вид ошибок вы могли бы здесь написать что если file not found the вы возвращаете тип ошибки ну тоже вы опять же брать эти п р и возвращайтесь свой какой-то тип ошибки что file not found данном случае тут пример преобразование из ошибок происходит явное если вы написали логику для преобразования
- 1:00:44
ошибок она будет так советую посмотреть вот на такие методы как map на методы ма-ма вот тогда будет наверное понятно вот как с этим работать и наверное про это есть что-то про звуки но в целом тут логика проста если вы получаете какой-то какую-то ошибку вы точно так же здесь можете написать при что вы при этом возвращаете просто свой тип ошибок от которой огнём уже можете передать
- 1:01:24
какое значение то есть какой содержимое этой ошибки вот я надеюсь ответил ну в целом я бы первый раз используем сами я советую очень задавать в индии там есть секциях горку верхнем правом углу задавать лучше туда это все-таки удобнее чем в чате если вот этим вопросом непонятно то напишите в telegram мы ответим но в целом тут преобразование достаточно такое проявление с помощью потому что вы получили тип ошибки вы проверяете что
- 1:01:55
если определенный тип ошибки как типа вот file not found the вы указываете что если была ошибка то вы не паникуете а возвращать свой тип ошибки а уже в другом месте скажем функции которая вызвала текущую функцию вы обрабатываете опять же снова этот тип ошибок но уже свой тип они не обобщен так еще есть по про что
- 1:02:59
так как есть вопросы ? забыли сюда вот это очень хорошо что напомнили я хотел к знаку вопроса вернуться на лекции когда мы будем говорить про функциональное программирование поэтому мы рассмотрим его там но если вот спасибо большое за напоминание а ?
- 1:03:22
если вы увидите в самом коде когда работаете сейчас по сути ? это тот же то есть в данном случае будет просто опрокидывание ошибки наверх так и flatev лет мы тоже рассмотрим и флэт мы рассматривали во время лекции про потру match in a для примера с разжался из общин больше примеров цикл это мы будем мы будем рассматривать во время функционального функционального программирования нравится так можно
- 1:04:05
и получите нам перемены без использования сторонних библиотек типом string я не совсем понял суть вопроса если можно уточнить я не использовала нам string библиотеку поэтому совсем о чем идет речь и какой стиль программирования предпочтительней в 1 функциональный или нет да псевдо об это вопрос хороший это зависит от ваших предпочтений мое личное предпочтение это скорее функциональный потому что мне меня
- 1:04:44
монета совершал удобно это парадигма и с помощью нее можно писать достаточно лаконично но структурные структурное программирование на расти и это тоже одна из парадигме которая приветствуется соответственно это окей если бы быть из используя структурное программирование но при этом возрасте нету потому что потому что его нет страсти не классовой структуры смарт-контрактах чаще какой смарт контрактах смарт-контрактах я бы сказал
- 1:05:21
что тоже функционал по крайней мере по крайней мере с тем стенку на которой я сталкиваюсь функциональный более удобно ну так или иначе у вас будет ли вам случаи да как в каком-то какой-то степени миг саванне и разных стилей программирования то есть у вас будет частично функциональной частично структурной и это нормально но образ хорошей нет наследования потому что до упада верно потому что в россии нет
- 1:05:52
наследования власти при этом есть реализация множественная реализация trade of который мы сами смотрим боже задания стенам фигур когда по всем аргумент командной строки получаем строку как строку можно при от красиво преобразовать к нам в помощью потом матчем вы можете написать написать какую-то свою структуру in которых которая будет метод который будет получать строку и уже преобразовывать
- 1:06:36
нужно тип фигуры то есть в данном случае это ну да в данном случае если быть обходиться без generics а это рекомендуется да потому что мы это не рассматривали то вы будете возвращать и нам с мужем типом надеюсь ответил но если что то не так ответил то напишите пожалуйста чат продолжим обсуждение там после
- 1:07:52
у меня не было слышно был замечен воду работа оператора я либо не так услышал и пускай что он паникует насколько знание какой-то человек ранние return возвращает ошибку да он будет возвращать ошибку по сути это аналог то есть макрос прости а макрос трой то есть это краткая форма матраса три то есть по сути это тоже самое что что вызвать метод что вызвать макрос трой просто его краткая форма насколько вы за нужно ли не нужно использовать сторонние
- 1:08:37
cray ты смог но это хороший вопрос и и он до немного спорный с одной стороны я бы сказал что странник вид использовать хорошо потому что это хорошо когда вы перри используете уже существующей куда то есть вы до самых простых вещей не изобретать велосипед с другой стороны так как мы сейчас на стадии изучения языка на текущий момент я бы посоветовал сделать следующее я бы посоветовал вам и
- 1:09:09
следующим путём то есть сначала вы ну а также да если у вас есть столько желание возможности времени вы можете сначала написать в персию вашей программы которая будет использовать только ваш код который вы написали функциональность которые нужно реализовывать и своими силами а потом вы можете да и те создать отдельную ветку которая вариант исполнении искать с использованием сторонних crate of и когда вы будете переделать свой пост сторонник рейд и во-первых вы поймете
- 1:09:49
конкретно что вы делали так и что делали не так а потом посмотрите как вам насколько вам интегрировать сторонник рейд ваш код который вы реализовали ну и соответственно когда возможно вы быть интегрировать сторонник вы посмотрите какой интерфейс да какие методы есть у этого стороннего кретара который допустим вы возможно не учти и которые скажем вы сделать для себя какие-то выводы что можно было бы реализовать что не нужно реализовать
- 1:10:52
эти вижу по поводу вопросительного знака да если я сказал что паникует это неправильно тут идет как я сказал по сути макроса трой и ранее восхищения результата или ошибки но опять же если вы используете ? то у вас тип возвращаемого шипки должен совпадать иначе без тип не совпадает вы можете с помощью допустим об конвертировать и по ошибке костанай тип ошибки которые ожидаются и же после
- 1:11:25
него стать вы простите еще тогда жду минуту если будут какие то вопросы если нет то пожалуйста пишите в telegram ответим хотя там организм автоматического приведения я не спрашивал как такового автоматическая перед приведение нету там есть 2 trade афон и in tube но это не автоматическое приведение грубо говоря если вы написали свой тип ошибок да допустим он называется microsoft ну или к примеру если говорить про домашнее задание
- 1:12:12
про фигуры идет речь фигур фигур в нем есть какие то ошибки типы ошибок и допустим у вас есть тип ошибок внутри вашего типа и тогда выдавать до села типа можете написать что если у вас до этой ошибки приходят на вход идей и а not found эра а то тогда вы преобразовывать его в свой тип ошибки а вот это вот так то есть это вы опять не то не автоматическое приведение вы автоматически вы наоборот не автоматически бы явно реализуете что ваш
- 1:12:58
тип ошибок поддерживает приведение к другому типу ошибок это мы посмотрим если хватит временно victis обработка ошибок мы это с вами посмотрим да да я вижу комментарии что вроде через строму едим стрит и да по сути вы сами реализуйте логику что ваш тип ошибок можно привязать и образовывать в другой тип можно получать из другого типа ошибок это делается до того если вас в ходе вы ожидаете часто встречать другой тип ошибок которые вы хотите преобразовать
- 1:13:38
свой тип ошибок то для того чтобы не делать поттер matching каждом случае вы можете написать вот такое преобразование окей вопросов вроде как уже нету поэтому огромное всем спасибо кто присутствовал а кто досидел до конца пишите если у вас какие то есть вопросы проблемы в чат в чате соответственно или другие до участники курса вам помогут и точно также подключимся мы по возможности мы
- 1:14:17
тоже часть телеграма читаем пытаемся обрабатывать ошибки и подсказывать спасибо всем огромное увидимся на лекции в четверг который будет достижение всем спасибо и хорошего вечера ей хороший продуктивная неделя всем пока