|
Программирование >> Обработка исключительных ситуаций
if(х>=10) у = 2*t; 2 Console.WriteLineC {0,6} {1.6} . х, у ): 3 Как видите, в этом варианте программы все управление циклом сосредоточь в его заголовке. Это делает программу понятней. Кроме того, областью дейстг служебной переменной х является цикл, а не вся функция, как это было в л тинге 4.3, что предпочтительнее, поскольку переменная х вне цикла не требует СОВЕТ- В общем случае надо стремиться к минимизации области действия перемени Это облегчает поиск ошибок в программе. Любой цикл while может быть приведен к эквивалентному ему циклу for и оборот. Например, два следующих цикла эквивалентны: Цикл for: for ( bl; Ь2:: ЬЗ ) оператор; Цикл whi 1е: while ( Ь2 ) оператор; Цикл перебора foreach Цикл foreach используется для просмотра всех объектов из некоторой труп данных, например массива, списка или другого контейнера. Он будет рассм рен, когда у нас появится в нем необходимость, а именно в разделе Онера1 foreach (см. с. 136). Рекомендации по выбору оператора цикла Операторы цикла взаимозаменяемы, но можно привести некоторые рекомен ции по выбору наилучшего в каждом конкретном случае. Оператор do while обычно используют, когда цикл требуется обязательно вып нить хотя бы раз, например, если в цикле производится ввод данных. Оператором while удобнее пользоваться в тех случаях, когда либо число ите ций заранее неизвестно, либо очевидных параметров цикла нет, либо модифи цию параметров удобнее записывать не в конце тела цикла. Оператор foreach применяют для просмотра элементов различных коллекций объектов. Оператор for предпочтительнее в большинстве остальных случаев. Однозначно - для организации циклов со счетчиками, то есть с целочисленными переменными, которые изменяют свое значение при каждом проходе цикла регулярным образом (например, увеличиваются на 1). Начинающие часто делают ошибки при записи циклов. Чтобы избежать этих ошибок, рекомендуется: проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого правильные начальные значения (а также возможно ли выполнение других операторов); проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла; предусмотреть аварийный выход из цикла по достижении некоторого количества итераций (пример приведен в следующем разделе); и, конечно, не забывать о том, что если в теле цикла требуется выполнить более одного оператора, нужно заключать их в фигурные скобки. Операторы передачи управления В С# есть пять операторов, изменяющих естественный порядок выполнения вычислений: оператор безусловного перехода goto; оператор выхода из цикла break; оператор перехода к следующей итерации цикла continue; оператор возврата из функции return; оператор генерации исключения throw. Эти операторы могут передать управление в пределах блока, в котором они использованы, и за его пределы. Передавать управление внутрь другого блока запрещается. Первые четыре оператора рассматриваются в этом разделе, а оператор throw - далее в этой главе на с. 93. Оператор goto Оператор безусловного перехода goto используется в одной из трех форм: goto метка; goto case константное выражение; goto default; В теле той же функции должна присутствовать ровно одна конструкция вида метка: оператор; Оператор break Оператор break используется внутри операторов цикла или выбора для перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится оператор break. Для примера рассмотрим программу вычисления значения функции ch х (гиперболический косинус) с точностью в = 10~ с помощью бесконечного ряда Тейлора по формуле 2 4 6 2 х х х х у = 1 +-+-+-+.. . +-+.. . 2! 4! 6! 2я! Этот ряд сходится при х\ < со. Для достижения заданной точности требуется суммировать члены ряда, абсолютная величина которых больше е. Для сходящегося ряда модуль члена ряда Сп при увеличении п стремится к нулю. При некотором п неравенство Сп \ > е перестает выполняться и вычисления прекращаются. Алгоритм решения задачи выглядит так: задать начальное значение суммы ряда, а затем многократно вычислять очередной член ряда и добавлять его к ранее найденной сумме. Вычисления заканчиваются, когда абсолютная величина очередного члена ряда станет меньше заданной точности. До выполнения программы предсказать, сколько членов ряда потребуется просуммировать, невозможно. В цикле такого рода есть опасность, что он никогда не завершится - как из-за возможных ошибок в вычислениях, так и из-за ограниченной Оператор goto метка передает управление на помеченный оператор. Метка - этс обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, чтс и оператор перехода. Использование этой формы оператора безусловного перехода оправдано в двух случаях: принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей; переход из нескольких точек функции вниз по тексту в одну точку (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия). В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование оператора goto приводит только к усложнению структуры программы и затруднению отладки. Применение этого оператора нарушает принципы структурного и модульного программирования, по которым все блоки, образующие программу, должны иметь только один вход и один выход. Вторая и третья формы оператора goto используются в теле оператора выбора switch. Оператор goto case константноевтражение передает управление на соответствующую константному выражению ветвь, а оператор goto default - на ветвь default. Надо отметить, что реализация оператора выбора в С# на редкость неудачна, и наличие в нем оператора безусловного перехода затрудняет понимание программы, поэтому лучше обходиться без него.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |