Главная - Литература

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 [118] 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

Операторы case

□ Разумно ли отсортированы варианты в операторе сазе?

□ Сделаны ли действия, выполняемые для каждого варианта, простыми, например, с помощью преобразования в методы в случае необходимости?

□ Проверяет ли оператор сазе реальную переменную, а не искусственно созданную, приводящую к неправильному использованию оператора сазе?

□ Корректны ли значения, обрабатываемые в блоке по умолчанию?

□ Используется ли блок по умолчанию для выявления ошибок и сообщения о непредвиденных ситуациях?

□ В языках С, С++ или Java содержит ли каждый блок сазе команды для выхода?

Ключевые моменты

в простых выражениях if-else обращайте внимание на порядок блоков if и else, особенно если они обрабатывают множество ошибок. Убедитесь, что номинальный вариант прослеживается ясно.

Для последовательностей if-then-else и операторов case выбирайте порядок, позволяющий улучшить читабельность.

Для перехвата ошибок используйте блок по умолчанию в операторе case или последний блок else в цепочке операторов if-then-else.

Управляющие конструкции не равнозначны. Выбирайте конструкцию, наиболее подходящую для данного участка кода.



ГЛАВА 16

Циклы

Содержание

16.1. Выбор типа цикла

16.2. Управление циклом

16.3. Простое создание цикла - изнутри наружу

16.4. Соответствие между циклами и массивами

Связанные темы

Укрощение глубокой вложенности: раздел 19.4

Общие вопросы управления: глава 19

Код с условными операторами: глава 15

Последовательный код: глава 14

Отношения между управляющими структурами и типами данных: раздел 10.7

Цикл - это неформальное обозначение любой структуры итеративного типа, т. е. такой, которая заставляет программу повторно выполнять некий блок кода. Наиболее распространенными видами циклов являются for, while и do-while в С++ и Java, For-Next, While-Wend и Do-Loop-While - в Microsoft Visual Basic. Использование циклов - один из наиболее сложных аспектов программирования. Знание, как и когда применять каждый тип цикла, - это решающий фактор в конструировании высококачественного ПО.

16.1. Выбор типа цикла

В большинстве языков можно использовать несколько видов циклов, перечисленных ниже.

Цикл с подсчетом выполняется определенное количество раз, к примеру один раз для каждого работника.

Постоянно вычисляемый цикл не знает заранее, сколько раз он будет выполняться и проверяет необходимость завершения при каждой итерации. Например, он выполняется, пока остаются деньги, пока пользователь не выберет команду завершения или не встретится ошибка.



Бесконечный цикл выполняется все время с момента старта. Такие циклы можно встретить во встроенных системах, таких как кардиостимуляторы, микроволновые печи и автопилоты.

Цикл с итератором выполняет некоторые действия однократно для каждого элемента контейнерного класса.

Первое, чем отличаются эти циклы друг от друга, - это гибкость в определении числа итераций: выполняется ли цикл указанное количество раз или проверяет необходимость завершения на каждом шаге.

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

Гибкость и расположение проверки условия определяют тип цикла, выбираемый в качестве управляющей структуры. В табл. 16-1 показаны разновидности циклов в нескольких языках программирования и характеризуются их гибкость и расположение проверки.

Табл. 16-1. Типы циклов

Язык

Тип цикла

Гибкость

Место проверки

Visual Basic

For-Next

Начало

While-Wend

Начало

Do-Loop-While

Начало или конец

For-Each

Начало

С, С++, С*, Java

Начало

while

Начало

do-while

Конец

foreach

Начало

Когда использовать цикл while

Новички иногда считают, что условие цикла while проверяется постоянно и цикл завершается в тот момент, когда это условие становится ложным, независимо от того, какой оператор в это время выполняется (Curtis et al, 1986). Хотя цикл while и не столь гибок, он все же является гибким вариантом цикла. Если вы заранее не знаете, сколько итераций должен выполнить цикл, используйте while. Вопреки тому что думают новички, проверка выхода из цикла выполняется только раз за итерацию, и главным вопросом в отношении циклов while является выбор места этой проверки - в начале или конце цикла.

Реализован только в С*. На момент написания книги планируется в других языках, включая Java.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 [118] 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294



0.0141