Оператор выбора - Язык Паскаль и начала программирования

Программирование: введение в профессию. 1: Азы программирования - 2016 год

Оператор выбора - Язык Паскаль и начала программирования

Оператор выбора представляет собой в определённом смысле обобщение оператора ветвления (if): в отличие от ветвления, где предусмотрено всего два варианта исполнения, оператор выбора позволяет задать таких вариантов сколько угодно. Во время выполнения программы вычисляется заданное выражение, которое может иметь любой порядковый тип (см. § 2.8.3); в зависимости от получившегося значения выбирается одна из предусмотренных в теле оператора ветвей выполнения.

В Паскале оператор выбора начинается с ключевого слова case, после которого ставится произвольное арифметическое выражение, имеющее порядковый тип. Завершение выражения отмечается ключевым словом °f; после него следует некоторое количество (не меньше одной) ветвей, причём каждая состоит из двух частей: набора значений, для которых данная ветвь должна выполняться (то есть ветвь будет выполняться, если результатом вычисления выражения, стоящего после case, стало одно из заданных значений) и оператора (возможно, составного, хотя не обязательно). Значения от оператора отделяются двоеточием. В конце тела оператора case можно (но не обязательно) поставить ветку else, которая состоит из ключевого слова else и оператора; этот оператор выполняется, если значение выражения в заголовке case не соответствует ни одной из ветвей.

Значение для ветви можно задать одно, можно перечислить несколько значений через запятую; наконец, можно задать диапазон значений через две точки. Следует помнить, что значения в операторе выбора должны задаваться константами времени компиляции (см. § 2.5.2).

Приведём пример. Следующая программа читает с клавиатуры один символ и классифицирует его как относящийся к одной из категорий:

Оператор выбора часто провоцирует очень серьёзную проблему, связанную со стилем написания программы. В исходниках начинающих программистов можно найти примерно такие фрагменты:

Определяющим тут является то, что case-выражение имеет обыкновенный целый тип, а варианты обозначены числами 1, 2, 3 и так далее, иногда вплоть до достаточно больших чисел (автору этих строк доводилось видеть подобные конструкции на 30 и больше вариантов). Так вот, за такое программирование увольняют с работы, и правильно делают. В самом деле, как прикажете это читать? Вот что такое, к примеру, 3, то есть что оно в данном случае обозначает? Найти ответ на такой вопрос можно, перелопатив программу вдоль и поперёк, выяснив, откуда берётся значение этой переменной nv, в каких случаях она принимает одни значения, в каких другие; у читателя программы уйдёт на это прорва времени. Но это ещё не самое страшное. Перепутать между собой значения такого рода может и сам автор программы, вернув по ошибке из какой-нибудь функции, скажем, число 7 вместо числа 5. В целом программа, внутренняя логика которой основана на “номерах вариантов”, на удивление быстро и лихо “отбивается от рук”.

Правильно в таком случае будет применять для обозначения разных возможных вариантов не номера этих вариантов, которые никому ничего не говорят, а значения специально введённого для этой цели перечислимого типа (см. § 2.8.2), при этом выбрав осмысленные идентификаторы.

Необходимо отметить влияние оператора выбора на размер подпрограмм. Как уже говорилось, идеальная подпрограмма имеет длину не более 25 строк; если в вашей подпрограмме встретился оператор выбора, в большинстве случаев вы в это ограничение не уложитесь. В принципе, это как раз тот случай, когда вполне допустимо чуть превысить указанный размер, но ненамного. Операторы выбора, вложенные друг в друга, практически всегда недопустимы. Если в вашем операторе выбора реализация всех или некоторых альтернатив оказалась настолько сложной, следует выделить каждую альтернативу в отдельную подпрограмму, а сам оператор выбора тогда будет состоять из их вызовов.






Для любых предложений по сайту: [email protected]