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

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

Используйте утвердительные имена булевых переменных Имена, основанные на отрицании (такие как notFound, notdone и notSuccessful), при выполнении над переменной операции отрицания становятся куда менее понятны, например:

if not notFound

Подобные имена следует заменить на found, done и processingComplete, выполняя отрицание переменных в случае надобности. Так что для проверки нужного значения вы использовали бы выражение found, а не not notFound,

Именование перечислений

Принадлежность переменных к тому или иному перечисле-Лерекреетиан тлт О пере- i

тленййх т раздел 12 6 ™ можно пояснить, дополнив их имена префиксами, такими как Со1ог , Planet или Monthj

Пример дополнения элементов перечислений префиксами (Visual Basic)

Public Enum Color

Color Red

Color Green

Color Blue End Enum

Public Enum Planet

Planet Earth

Planet Mars

Planet Venus End Enum

Public Enum Month Month January Month February

Month December End Enum

Кроме того, сами перечисления (Color, Planet или Month) можно идентифицировать разными способами: например, используя в их именах только заглавные буквы или дополняя их имена префиксами (ejColor, eJPlanet или е Month). Кое-кто мог бы сказать, что перечисление по сути является типом, определяемым пользователем, поэтому имена перечислений надо форматировать так же, как имена классов и других пользовательских типов. С другой стороны, члены перечислений являются константами, поэтому имена перечислений следует форматировать как имена констант. В этой книге я придерживаюсь конвенции, предусматривающей применение в именах перечислений букв обоих регистров.

В некоторых языках перечисления рассматриваются скорее как классы, а именам членов перечисления всегда предшествует имя самого перечисления, например, Color.ColorRed или PlanetPlanetJEarth. Если вы используете подобный язык, повторять префикс не имеет смысла, так что вы можете считать префиксом само имя перечисления и сократить имена до ColorRed и Planet£arth.



Именование констант

Имя константы должно характеризовать абстрактную сущ- fipeniaarfiiKaOdiWiwO

ность, представляемую константой, а не конкретное значе- иймх константах т. раздел ние. Имя FIVE - плохое имя константы (независимо от того, имеет ли она значение 5.). CYCLESNEEDED - хорошее имя.

CYCLESNEEDED может иметь значение 5.0, 6.0 и любое другое. Выражение FIVE = 6.0 было бы странным. Аналогично BAKERSDOZEN - плохое имя константы, а DONUTSMAX - вполне подходящее.

11.3. Сила конвенций именования

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

Зачем нужны конвенции?

Конвенции обеспечивают несколько преимуществ.

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

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

Они ускоряют изучение кода нового проекта. Вместо изучения особенностей кода Аниты, Джулии и Кристин вы сможете работать с более согласованным кодом.

Они подавляют «размножение» имен. Не применяя конвенцию именования, вы легко можете присвоить одной сущности два разных имени. Скажем, вы можете назвать общее число баллов и pointTotal, и totalPoints. Возможно, при написании программы вам все будет понятно, но другой программист, который попытается понять такой код позднее, может столкнуться с серьезными проблемами.

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

Они подчеркивают отношения между связанными элементами. Если вы используете данные объектов, компилятор заботится об этом автоматически. Если язык не поддерживает объекты, вы можете свести этот недостаток к минимуму при помощи конвенции именования. Так, имена address, phone и пате не говорят о том, что эти переменные связаны между собой. Но если вы решите дополнять все переменные, хранящие данные о сотрудниках, префиксом Employee, эта связь будет ясно выражена в итоговых именах employeeAddress, employeePbone и employeeName. Конвенции программирования могут устранить недостатки используемого вами языка.



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

Когда следует использовать конвенцию именования?

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

над проектом работают несколько программистов;

программу будут изменять и сопровождать другие программисты (что имеет место почти всегда);

обзор программы выполняют другие программисты из вашей компании;

программа так велика, что вы не можете полностью охватить ее умом, а вынуждены рассматривать по частям;

программа будет использоваться длительное время, из-за чего вам, возможно, придется вернуться к ней через несколько недель или месяцев;

прикладная область имеет необычную терминологию и вы хотите стандартизовать применение терминов или аббревиатур в коде.

Использовать конвенции именования всегда выгодно, а мои советы помогут вам определить оптимальную детальность конвенции для конкретного проекта.

Степень формальности конвенций

Лерткреенш ттш о разш- Конвенциям именования могут соответствовать разные сте-чтх фщнттт при рабо- пени формальности. Неформальная конвенция может быть те нщ Штшщт й крупны- совсем простой: «Используйте выразительные имена». Дру-mit проектами см. главу Z7. гие неформальные конвенции рассматриваются в следующем разделе. В общем, оптимальная степень формальности конвенции определяется числом людей, работающих над программой, размером программы и ожидаемым временем ее использования. При работе над крошечными проектами, подлежащими выбросу, следование строгой конвенции, наверное, окажется пустой тратой сил. В случае более крупных проектов, реализуемых с участием нескольких программистов, формальная конвенция - важнейшее средство улучшения удобочитаемости программы.

11.4. Неформальные конвенции именования

в большинстве проектов используются относительно неформальные конвенции именования, подобные тем, что описываются в этом разделе.

Конвенция, не зависящая от языка

Ниже приведены некоторые советы по созданию конвенции, не зависящей от языка.

Проведите различие между именами переменных и именами методов

Конвенция, используемая в этой книге, подразумевает, что имена переменных и



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.003