|
Программирование >> Обработка исключительных ситуаций
Глава 4. Операторы static void GO { throw new Exception( G ); моделирование исключительной ситуации static void MainO { try { catch ( Exception e ) { Console.WriteLineC Exception in Main: + e.Message ); В методе F выполняется промежуточная обработка исключения, которая заключается в том, что на консоль выводится поле Message перехваченного объекта е (об элементах класса Exception рассказывается в следующем разделе). После этого исключение генерируется заново. Несмотря на то что в обработчике исключения создается новый объект класса Exception с измененной строкой информации, передаваемой в исключении, выбрасывается не этот объект, а тот, который был перехвачен обработчиком, поэтому результат работы программы следующий: Exception in F: G Exception in Main: G Заменим оператор throw таким оператором: throw e; В этом случае в обработчике будет выброшено исключение, созданное в предыдущем операторе, и вывод программы изменится: Exception in F: G Exception in Main: F С обработкой исключений мы еще не раз встретимся в примерах программ, приведенных в следующих главах. Класс Exception Класс Exception содержит несколько полезных свойств, с помощью которых можно получить информацию об исключении. Они перечислены в табл. 4.2. Таблица 4.2. Свойства класса System.Exception Свойство Описание HelpLink URL файла справки с описанием ошибки Message Текстовое описание ошибки. Устанавливается при создании объекта. Свойство доступно только для чтения Source Имя объекта или приложения, которое сгенерировало ошибку Свойство Описание STаскTrace Последовательность вызовов, которые привели к возникновению ошибки. Свойство доступно только для чтения не r Except ion Содержит ссылку на исключение, послужившее причиной генерации текущего исключения ~r.rget.Site Метод, выбросивший исключение Операторы checked и unchecked Как уже упоминалось в главе 3 , процессом генерации исключений, возникающих при переполнении, можно управлять с помощью ключевых слов checked и unchecked, которые употребляются как операции, если они используются в выражениях, и как операторы, если они предваряют блок, например: з - checked (b + с); для выражения (проверка включена) ,checked { для блока операторов (проверка выключена) а - b + с: П поверка не распространяется на функции, вызванные в блоке. Рекомендации по программированию К настоящему моменту вы изучили основные операторы С# и можете писать на этом языке простые программы, используя класс, состоящий из одного метода. Даже на этом уровне важно придерживаться определенных правил, следование которым поможет вам избежать многих распространенных ошибок. Конечно, на все случаи жизни советы дать невозможно, ведь не зря многие считают программирование искусством. С приобретением опыта вы добавите к приведенным далее правилам множество своих, выстраданных в результате долгих бдений над последней ошибкой. ВНИМАНИЕ--Глазная цель, к которой нужно стремиться, - получить понятную программу как можно более простой структуры. В конечном счете, все технологии программирования направлены на достижение именно этой цели, поскольку только так можно добиться надежности программы и легкости ее модификации. Создание программы надо начинать с определения ее исходных данных и результатов. При этом задумываются не только о смысле каждой величины, но и о том, какое множество значений она может принимать. В соответствии с этим выбираются типы переменных. Следующий шаг - записать на естественном языке (возможно, с применением обобщенных блок-схем), что именно и как должна делать программа. Если вы не можете сформулировать алгоритм по-русски, велика вероятность того, что он плохо продуман (естественно, я не имею в виду, что надо проговаривать все на уровне отдельных операторов, например, изменяя индекс от 0 до 100 с шагом 1.. ). Описание алгоритма полезно по нескольким причинам: оно помогает в деталях продумать алгоритм, найти на самой ранней стадии некоторые ошибки, разбить программу на логическую последовательность блоков, а также обеспечить комментарии к программе. При кодировании1 программы необходимо помнить о принципах структурного программирования: программа должна состоять из четкой последовательности блоков - базовых конструкций, каждая из которых имеет один вход и один выход. Конструкции могут вкладываться, но не пересекаться. Программа должна быть прозрачна . Если какое-либо действие можно запрограммировать разными способами, то предпочтение должно отдаваться не наиболее компактному и даже не наиболее эффективному, а более понятному. Особенно это важно тогда, когда пишут программу одни, а сопровождают другие, что является широко распространенной практикой. Непрозрачное программирование может повлечь за собой огромные издержки, связанные с поиском ошибок при отладке. Для записи каждого фрагмента алгоритма необходимо использовать наиболее подходящие средства языка. Например, ветвление на насколько направлений по значению целой или строковой переменной эффектнее записать с помощью одного оператора switch, а не нескольких операторов if. Для просмотра массива лучше пользоваться циклом for или foreach. Оператор goto применяют весьма редко, например, в операторе выбора switch или для принудительного выхода из нескольких вложенных циклов, а в большинстве других ситуаций лучше использовать другие средства языка, такие как break или return. Для организации циклов пользуйтесь наиболее подходящим оператором. Цикл do применяется только в тех случаях, когда тело в любом случае потребуется выполнить хотя бы один раз, например, при проверке ввода. При использовании циклов надо стремиться объединять инициализацию, проверку условия выхода и приращение в одном месте. Рекомендации по выбору наиболее подходящего оператора цикла были приведены на с. 82. При записи итеративных циклов (в которых для проверки условия выхода используются соотношения переменных, формирующихся в теле цикла), необходимо предусматривать аварийный выход по достижении заранее заданного максимального количества итераций. Это повышает надежность программы. Более короткую ветвь if лучше поместить сначала, иначе вся структура может не поместиться на экране, что затруднит отладку. Бессмысленно использовать проверку на равенство true или false: bool busy: if ( busy == true ) { ... } плохо! Лучше if ( busy ) if ( busy == false ) { ... } плохо! Лучше if ( !busy ) 1 Кодированием называют процесс написания текста программы, чтобы отличить его о более общего понятия программирование , включающего также этапы проектирование и отладки программы.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |