Гудлиф П. - Ремесло программиста. Практика написания...
TRANSCRIPT
//
Books.Ru ISBN 978 5 93286 127 1, . Books.Ru . , . , ([email protected]), .
Code CraftThe Practice of Writing Excellent Code
Pete Goodliffe
2009
. . . . . . . . . .
. . . . . .: , 2009. 704 ., . ISBN 978 5 93286 127 1 . , . , , . , , ? ? ? . . , : . , , , , , , , . , . , . ISBN 978 5 93286 127 1 ISBN 978 1 59327 119 0 () , 2009Authorized translation of the English edition 2007 No Starch Press, Inc. This trans lation is published and sold by permission of No Starch Press, Inc., the owner of all rights to publish and sell the same. , . , , .
. 199034, , 16 , 7, . (812) 324 5353, www.symbol.ru. N 000054 25.12.98. 26.12.2008. 701001/16 . . 44 . . 1500 . N 199034, , 9 , 12.
, . , . , . , . 150
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 I. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 ? . . . . . . . . . . . . . . . . . . . . . . . . . 32 , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 . . . . . . . . . . . . . . . . . . . . . . . 36 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 ( ) . . . . . . . . . . . . 63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 . . . . . . . . . . . . . . . . . . 98 . . . . . . . . . . . . . . 103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
II. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 ? . . . . . . . . . . . . . . . . . . . . . . 160 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
9
, , , ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 . . . . . . . . 200 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 , , . . . . . . . . . . . . . . . . . . . . . . 231 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
10. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 ? . . . . . . . . . . . . . . . . . . . . . 249 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 ? . . . . . . . . . . . . . . . . . . . . . . . . . . 270 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
10
12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 . . . . . . . . . . . . . . . . . 318 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 . . . . . . . . . . . . . . . . . . . . . . . 321 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 ? . . . . . . . . . . . . . . 350 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
15. ? . . . . . . 363 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
IV. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
11
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 , . . . . . . . . . . . . . . . . . . . . . . . . 413 , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
V. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 , ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 ? . . . . . . . . . . . . . . . . . . . . . . . . . 478 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 ? . . . . . . . . . . . . . . . . . . . . . . . . . . 484 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
21. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
VI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 , ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 . . . . . . . . . . . . . . . . . . . . . 566 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 . . . . . . . . . . . . . . . . . . . . . . 571 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
24. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
13
3. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 6. . . . . . . . . . . . . . . . . . . . . . . . . . 607 7. . . . . . . . . . . . . . . . . . . . . . . . . 612 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622 10. , . . . . . . . . . . . . . . . . . . . . . . . . . 624 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 15. ? . . 652 16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657 17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 21. ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
; . , , . , . (Kevlin Henney),
, , , , , , . (Steve Love),
, . (Tim Penhey), C VU
. ! , , . (Lois Goldthwaite), C++ POSIX BSI
, . , , . (Jon Jagger), , , ,
15
. (Andrew Burrows),
. , ( ), . (Greg Law), CEO, UNDO Ltd.
, , . , . (Andrew Bennett), , B.ENG., Ph.D., MIET, MIEEE
, , . , , . . (Robert D. Schofield), M.SC., MIET, SCIENTIFIC SOFTWARE SERVICES Ltd.
, , , . , , . (Chris Reed),
. , , . (Rob Voisey), , AKAI DIGITAL Ltd.
. , 4 1/2
(Pete Goodliffe) , ; . , . Professionalism in Programming C Vu, ACCU (www.accu.org). , , .
, .
. , . , . 1,3. , (David Brookes), . , ! . . ACCU (www.accu.org), . cthree.org (Andy Burrows), (Andrew Bennett) (Chris Reed), , (Steve Love) #ant.org. (Jon Jag ger) , . , . , , , . , ! , . , No Starch Press, XML . .
, .
. , , , , . , , . , .
? . , . . , , , : , . , ! , . ( ), , , , . , . , , . . ! . , : . , , .
20
: , . ? : , , . . ( ) , . : , . : . : , , , ( , ). . , , , , , , , . . , , . . , , . , . , , . . . . , , , .
? ? , C++, , . , , .
21
? . , . , . . , .
, , . (attitude) : attitude (at.ti.tude) 1. ; . 2. . , . : , . : . . , , , . , , . , . , . , , . , . , . , .
22
. , , . , . . , .
?, , . . , . , . , , , . . ; . , . : C, C++ Java. , , C++. , . , , .
, . :
23
, , . ? , , . , . , .
. , . . , , . , , . , , . . : . . , . , . . , , . : . !
. . , . , . , , , .
24
; , ! . , . . , , . , , . : . . . , , . ! (, ), . . , . . , .
. , . , . . . , , , . , . : I. .
25
. . . II. : . , , , . , . III. . , ( ) . , , . , . IV. ? . ( .) . , . V. : , , . VI. , , .
, , . , , . , , , .
26
, , , . . , . , , , . , , . , .
, . , . . , . , .
I . , . : . . , , , . ? . , , , . . , . . : , , , . , . . , , . , , . , , .
28
I. . , . , , . : 1. : , . 2. : . 3. ? . 4. . , . 5. . 6. : , , . ; , . , , , , , , , , .
1
: ?
. .
10 , . , . , . . , . , . , ; , . ,
30
1. , , .
, , . . . (M. A. Jackson) : , , , , . (Jackson 75) : , . . , . . . , . , , , . , . , , , . , . , , . , , . , , , . , ! ? . ( , , , , . .) . , . , .
31
, , , . . , . , . . , , . , , , , . . : . . , . , , . . , . , , . , : . . : , . , .1 , , , . ? , . . , . 1
, , , , . . , .
32
1. , ( . 15). , , . , . . . , .
, , : , . . , , . . , . , , . , , , , . , . , , .
? , , . , , . , . , . , , . , , , . 33. , . , .
?
33
!
!
!
, , , :
!
, , , . , , , , . , . , . . , . . ? : . : . ,
34
1.
, . : , . . . . . ; , , , . , , . , , . , ( , , ). , 100 000 , . . ? ? . , , .
. . : , . , , , , , .
,
35
, , . , , . , . .
, , , . ( ) .
, , , .1 , . , , . , . , . , , , . , , , , . , , , . . , . , . 12.1
. , , .
36
1.
. ? . , , , . . , . , , . , . . , , . . . : , . , . ? ?
, . . , , . , . . (Kernighan Plaugher 78) , API, , .
. ,
37
, , , . . : . ? ? , . , . , .
, , C, = ==. , . ( ) , , . , , . , , , , , . , . , , , . ( , .) , . , , , . , , . , , , !
, ? , . ; , . : .
38
1. . , . . , .
, , , , . , . , . . . , , . , , .
, ( ) ( ) , , , . , , . , . , , , . , . . , , . , . . .
, , , . . . , ,
39
? ? ? , ? , . . ; , . , . , . , , , . . , . , . .
, , . . . C++ ( pimpl) , . (Meyers 97) , . ; , . , . , .
, . , , , C C++ ,
40
1. .1 . , . , . . , , , . , . . , , , , . . . , .
, . , lint C FxCop .NET. . , .
, , , . , . . , , . , C++:char *unsafe_copy(const char *source) { char *buffer = new char[10];1
(, Java C#) .
strcpy(buffer, source); return buffer; }
41
(source) 10 , , (buffer). . , . , . ; . . ! , , string C++. . C++ , strcpy strncpy, :char *safer_copy(const char *source) { char *buffer = new char[10]; strncpy(buffer, source, 10); return buffer; }
, . . , . ; . , . , . , (, errno C). .
( ) , . , . ,
42
1. , . . , , , . , , . , . , , , . . . ; , . . .
Java .NET , , . , . , . . , , ; , . , (, A B, B A, ). , .
, . , . : , , . . . C C++ . , , . , , , . , , . . , .
43
( Java C#) . , .
. , , . , : . , . . , , .
C C++ . , . , . , . , . ( ), . , , (, C char , ). . ? , ? , , .
, , . ? ,
44
1. , , . , . , ; .
() . . 64 , 8 , 56 ? , , . , . , . : , . . : , , : . ( , Java C#) , . C C++ , . , int long , . , .
, . : switch (), default ( ). default , . , , . , if else, , .
45
, , . . . . . , . . , , . C/C++. const , . : const . , .
, . , ? . , .1 , . ? ( ) , , . : , , . ( , ). ; (, ).1
, .
46
1. , C strlen , , . . , , . : . , , . . , , . , , . . , . . ,1 . Eiffel . , , . , .
, . , : , .1
, , .
47
. . , . . , . . C/C++. Java, C# , . ? . , . ? . : , , , ; , , , . (Kernighan Plaugher 76) .
. , (, ) , , . . C C++ assert. assert , . , . , . , . , . :bugged.cpp:10: int main(): Assertion "1 == 0" failed.
assert C, C++. , C++. assert, #include . assert(ptr != 0);.
48
1. NDEBUG. assert . , . . , , .1 , . ( , ?) , . , , :int i = (); assert(i = 6); // ... ! printf("i is %d\n", i);
, : = 6 ( C ). assert , printf . . , ! , . , assert(invariants());, invari ants() , . , , . , , . ? ( ) , . Java .2 JVM (java.lang.As1
2
, . , . , . JDK 1.4 .
49
sertionError), . .NET Debug. , . . , , . C++/Java bool invariant(). (, .) assert, . ( .) , circle radius != 0; , (, ).
? .
, : ? , ! , . , . , , . , , . . , , , ? . 187, . . .
50
1.
; ; , , . 3:14
, . . . , , . . . (, , . . 195), , , , . , .
, , ,
, , , , , ,
. 8. . 9. , .
51
12. . 19. ; ? , , .
. 581.
1. ?
52
1. 2. , ? 3. ? , ? 4. C? 5. ? 6. ? ? 7. ? a. , ? ? b. , C C++ , ? 8. ?
1. , ? , , ? 2. ? a. ? b. , ? 3. . ? ? ? ? 4. ? , ? ? , ? a. ? ? b. , ?
2
:
, . 7:24
, (, ), , , : , , !. , , . , , . ,
54
2. C. , , . ? , , , . , : , . , . , .
? . , , 1960 : Fortran . . , , , .1 , , , ( , goto ), , . . , . . . . . , : . , , , . , . C:1
{ }, C.
int error = doSomeMagicOperation(); if (error) fprintf(stderr, "Error: exiting...\n"); exit(error);
55
, , . , . , .
, , . , , . , : , . , . . , . , ( ) COBOL, , Y2K? , , . , . , , , , . , . , . , , . . . ? , ? , . , . . , , .
56
2. , . , . () , . , . . ? , . , . , . , . , , ., : . .
? , . , , , . ; , . , . ( , , .) , . . . . , , . . . . . . , C, : , .
57
. , , . (Ker nighan Ritchie 88) , . , . , . ? . , , , X; , , . , ?
, , , , , C. , , . , . , 80 . . . , , , . , , (. . 59). , , K&R, .
K&R K&R , C, , C (Kernighan Ritchie 88).
58
2. . . , Java.int k_and_r() { int a = 0, b = 0; while (a != 10) { b++; a++; } return b; }
, . , , , , . , . , . .
(ex dented) , . .int exdented() { int a = 0, b = 0; while (a != 10) { b++; a++; } return b; }
, . , . .
59
. , . Pascal.
, . , . , , . : . , . , . . : , , . , . , . . . , . , , . : , . , , . , , , .
60
2.
, . , . , , , , ( ). , , . . , ? ( ), . , .
( ) , . , . , Whitesmiths C .int indented() { int a = 0, b = 0; while (a != 10) { b++; a++; } return b; }
, . .
61
. , GNU : . : Linux K&R, . C# . :int my_worst_nightmare() { int a = 0, b = 0; while (a != 10) { b++; a++; } return b; }
, ., , . .
, , , . . , . , . , , , . . , . .
, , . , . , . , . , ?
62
2. , . , , ? . . : , , . . , , .
, . Indian Hill Indian Hill Recommended C Style and Coding Standards. , ; Indian Hill AT&T Bell. GNU GNU , . GNU (www.gnu.org). MISRA (Motor Industry Soft ware Reliability Association MISRA) C . 127 , , . , . foo . , . , Linux , Mozilla.
( )
63
( ) , , , . , , , ? , ? . , . ? . : , , , . . , , . , . : IDE , . ( ). , , . , , . , . , , , . . . , , , .
64
2. . , . , . .
. , , , . , , ? . ( , .) , .
?
?
?
?
?
...
,
65
, . , , . : . ? ,
. ! , , , . . , , . ? , . , . : , , . , . , , , , . , . : ? . , ? .
66
2. : , , . , , , , . , . , . ? : , . , . , , . , . , . , . , , . . , . , , . , . . , . , . , . , , .
67
, . C, C++ Java, C. , , . if , , . : . . . ! , ; . , , . , . . , . : , switch , , , . . . . . , , . , . . , , ? , . , .
68
2.
? .
; , . : . , , , 1 . . . . . , . ( ) , . , , . , . . ( .) : . . , , . . . .
, .
, . , . , .1
C/C++, . , Pascal C ( ), C++. !
69
? . , , . , : , . , , , . , , . , , , 400 , 10 . , , , 128 . , , , , . , , . , , .
, . , . . , . : . ( ,
70
2. ). , , , , .
, , ,
: ;
. 3. ? . 4. . 5. ; .
71
. 585.
1. , ? ? 2. , . ? ? 3. ? a. ? ? b. , . ? 4. , ? ? . 5. ? ?
1. ? a. , ? b. , ? ? 2. ? . a. ? ? ? b. , . ? c. ? 3. ? a. . , switch .
72
2. b. ? ? c. ? d. , ? ? ? i. : ? . ii. : ? ( .) , ? , ? e. , ? , ? 4. ? a. ? b. ? c. ?
3 ?
: ? , , , ,
, , , , .
, , . . , , . . , . : .
74
3. ? , , . , , , , , , . , . , , . . , , : ,1 , . . . . . , , , . , , . , , , : Izena duen guzia omen da , , . (Kurlansky 99) , ( ) , , . . . , . , . . C++:void checkForContinue(bool weShouldContinue) { if (weShouldContinue) abort(); }
1
.
?
75
(weShouldContinue ) , , , . , . , . .
? . . , . , . . , 1 ( , ). , . . ; , . , .
? , . , , : (, , , ) C++ Java ; , , 1
, (Miller 56).
76
3. ?, , , , . . .
? , . , , , . , , . , , , , ? . , , . . , , .
, , . , .
, . , . , , . . . . , , , . . , .
. ,
77
(, , ) , (, ). .1 Unicode, ISO8859 1 (ASCII). . C/C++ : str, , std. , .
, , . , . , . ; Java , , C C++ . : , Windows Win32 API. , . . ? .
: , . , . , . a apple_count .1
, C , . , , .
78
3. ?
.
, ( ) . , loop_counter . , .
. , . , . , blah wibble, foo bar. , . ( , , .) , .
foo bar? . . , , : foo : ++foo;. . , foo, bar baz. , . . FUBAR (Mucked Up Beyond All Repair). , .
.
79
, . , .
, . , , . , GUI ok_button main_window. , , , elapsed_time (_) exchan ge_rate (_). , , , , count (). , , widget_length (_). , , . , , , ( ) . , .1 , C++ , m_. , .2 , , . _ptr, _ref. . , , . , , , , !
1
2
, API , ? , . C .
80
3. ? , . , : SomeTypeWithMe aningfulNaming stwmn(10); (). , , . , . , . : Window window;. , .
, , . 1980 Microsoft Win32 API MFC, . , . , , : Windows lpszFile, rdParam hwndItem. , , .
, , : . , , ( ) . , , . apples()? , ? be, do perform (, , ). , ( XXX). , .
81
, , , . ( .) , , . , , , countApples(). , , . , .
.
, , . , . : camelCase camelCase Java C++. , , , Smalltalk 1970 . ProperCase camelCase, . Pascal Case. . , Java ProperCase , camelCase . Windows API .NET ProperCase. _ C++ ( std) GNU. . , ProperCase .
82
3. ? , , . ( . 597) 9 . ee ( ). , . void a()? !
, , . C typedef, . . , ty pedef . typedef , . Java, C++ OO (). C , structs. , . , : , . . () , . , , . (Gamma et al. 94) , , , , . (, C++ Java .NET) . , Printable Serializable. .NET I , , IPrintable. , ; . , DataObject , ; . . , , class, data, object type.
83
. , . Window, , , State. , . , Strategy, . . , .
, , . , .
, ? C++ C#, Java . , . , . . . . , . ; utils , utils. . Java , , : . . , . , , . , , . , , ; UI, filesystem controls
84
3. ?. , , controls_group . , .
C/C++. , . . , . , . . , , , . , , . . . , PROJECTFOO_MY_MACRO , MY_MACRO. C/C++ , , , . .
. Java . , C C++ , .1 , . . ; , .
1
, .
85
C/C++, widget, widget.h, widget_interface.h, widget_decls.h . widget.h widget.cpp widget.c (. , . 86), , widget.h. . , . , : . . , , , . , ; , , . (, Java, PascalCase.) , foo.h Foo.h , . , , , . , foo.c, foo.cpp foo.java. : foo.o, foo? , . , . , , #include "foo.h". . . . , library_one/version.h library_two/version.h, . . C++, : Daffodil Daffodil.h ( , ). , , HerbaciousBorder HerbBdr.h. #include . , Daffodil
86
3. ? Daffodil.cpp, FlowerStuff.cpp, Yogurt.cpp . , . , .
, , . ? , :
, . Java , .java. C C++ , .h , . ; C++, .C, .cc, .cpp, .cxx .c++. C++ .hpp. , / . : . , . .
, . , . , :class badly_named : public MyBaseClass {
public: void doTheFirstThing(); void DoThe2ndThing(); void do_the_third_thing(); };
87
, . , , . . , . . . . .
, , . , .
, , . , , , . . : , , , . , . , , . Tree (), countApplesInTree(). : Tree::countApples(). ( ) .
88
3. ? , , 2 : tu vous. , . , , , . : . , . . ( , .) , , address_string. _string? , . . , .
, . , , . , , , .
, 52:9
, : . . , . , , , , . . . . , , .
89
, , . , : . , . , , ________. , . , , . widget_list , . widget, widget. . ignoramus . , ignoramous. . , . data val ue, , . temp tmp, . , . , . , . , , , . i18n internationalization . , , , , , . . . (Gamma et al. 94)
90
3. ?
: , , . . ( )
,
. 2. , . , , , . 4. .
. 594.
91
1. ? ( ), ( ) ( ). a. int apple_count b. char foo c. bool apple_count d. char *string e. int loop_counter 2. ? ? ? a. doIt(...) b. value(...) c. sponge(...) d. d. isApple(...) 3. ? ? a. ? ( .) ? . b. ? , C++ camelCase STL (_ ). ? 4. ? 5. C assert , ? ? 6. ? 7. ? ? , ( ) ? ? 8. . ? ? 9. , . ?
92
3. ?
1. ? ? ? ? 2. ? a. ? ? ? b. ? 3. ? , ? , ? 4. ? , ?
4
:
. , , .
( ) , . , , . , , . . , , .
94
4. , , . . , , , COBOL. , , , , , . . , , , . , . , . , . , , , . . . . . , , , , . , . , , , . , . : . , . . . . , ( ), . . , . , , .
95
, , . , . , . . , .
, , . . , . ? .
. ? :10 PRINT " " 20 GOTO 10
, , . . , , . , Perl, : . , Perl . , . , . , , , , . , , , . , , . . . , ( ), . . . . , , .
96
4.
. , , . , . . . , , . , , . , , . . (IDE) ( , , ) . . , , . . ASCII, . , . , . , , . (, , , .) . .
97
. , ( , C). , . . , IDE . . , ? . , . , . . , .
, , . .
, . , , ?int fval(int i) { int ret=2; for (int n1=1, n2=1, i2=i 3; i2>=0; { n1=n2; n2=ret; ret=n2+n1; } return (i= 2) { int previousButOne = 1; int previous = 1; for (int n = 2; n < position; ++n) { previousButOne = previous; previous = answer; answer = previous + previousButOne; } } return answer; }
return . return , . , . , , . .
, , . , . , , . . , , . , , . .
100
4.
, , . , . . , , . . , . , . , . . . . , , .
, . : , , ( const C). , ( ). . . C/C++ size_t, ptrdiff_t.
if (counter == 76) . 76? ? . . :const size_t bananas_per_cake = 76; ... if (count == bananas_per_cake) { // }
76 (, bananas_per_cake), :
101
, , / 76, . . .
, . , , . ?
. . . : . , . , . . . C++ pimpl, . (Meyers 97) . . for, , . . . if . . , .
. , ESP. API . , , .
102
4. . C++ C# . Java . . . .
, . , . , , , . : , . :/********************************************************* * File: Foo.java * Purpose: Foo class implementation * Notice: (c) 1066 Foo industries. All rights reserved. ********************************************************/
. / , , . ( ), . , . , , . , , . . .
, .
103
? , . : , . , , . . , , . . , . . , . , . , , .
, , . , . ? , .
. , , , , .
. , , , . , , . (Kernighan Plaugher 78)
104
4.
, , (literate program ming) , . , (Knuth 92). , , . . , . : , . . , , . , , . , . , . , : . . TEX ( ) C WEB. , , . , , . . , , . , , . . . : . , .
105
, , . . , , ; . , . : , , .
. : , . , . . , . . , . , , C , #include . . , . , , . , . , . . , , . , , . . , , , . , . ,
106
4. , . . ? , . . .
, . , . , Sun Javadoc Java. Java API Javadoc. , , . , Widget :/** * Widget. * * '/**' . * * @author * @version */ class Widget { public: /** * . */ void method(); };
, , . , : , , , , , ,
107
, . . , : , . Javadoc; NDoc C# Doxygen (www.doxygen.org). , . , , . : , . , . . , . , . , , , : API, . . , , , . , . , . .
108
4. , . : . . , . . , . , . , . , . , , . , . , , .
, .
, . . . : , . . , . ; . , . ( ) . . API, .
109
,
, , ,
. 3. ? . 5. , . 19. , .
. 599.
110
4.
1. . ? ? 2. . ? , ? 3. . , . 4. , , , ? 5. , ? 6. , , ? 7. C . ? , .void bsrt(int a[], int n) { for (int i = 0; i < n 1; i++) for (int j = n 1; j > i; j ) if (a[j 1] > a[j]) { int tmp = a[j 1]; a[j 1] = a[j]; a[j] = tmp; } }
8. . : a. , , , ? b. API ? c. / ? C/C++, ?
111
d. , API ? ? 9. , , , ? 10. ?
1. ? ? a. ? ? , , ? b. , , , , ? 2. , ? 3. , ? ? 4. , ? ?
5
: ? ?
, .
. , , . . , . , , . , , . , . , , . . , .
114
5. , . , . , . , . . , , , . . , .
? ! . , ? , . , . , ; , .1 . . , , . , , ( ), , . , . , . . 1
, , , . C/C++ , . . , .
?
115
, , . . . . API.1 , ( ). , . . .
? , , . C /* */ . C++, C99, C# Java , , , //. , . , . . . , , .
? . .
, , , . . , , , . . , , . . , , 1
, . 104.
116
5. . , . . , . , . , , . . , . , . , .
, , , , . . . , . , f() g(), , someGoodExample() . , , . , .
, .
? , !
, . ? , .
, , . . , . . , , , .
?
117
, ? , , , . , : /* WidgetList GlbWLRegistry */ /* */. , , . , , . , .
, . , , , .
: ++i; // i. : , , . , , . , , . . .
, , (, // foo), . , , . . , , . , , . , , . ,
118
5. , , ! , , , . ( ) ., , , . , ?
, . : , , . , , , . , , , . , . : ! ? . , , . . . 126 . , . . , , , . , , , . . . ( ). ,
?
119
, , , . . . , ., ; . . ?
: , . , ( ). , . , .
, . . , : , . . . . . ( , printfs), , . C #ifdef 0 . . . #endif . , ( , ).
120
5. ASCII . :aBadExample(n, // // // foo(wibble)); ^^^
. ! , // end if (a < 1) if. ; , . , , , . .
. C++. , .for (int i = 0; i < wlst.sz(); ++i) k(wlst[i]);
, , . , :// for (int i = 0; i < wlst.sz(); ++i) { // k(wlst[i]); }
! , . . , , .for (int i = 0; i < widgets.size(); ++i) { printWidget(widgets[i]); }
121
, i . . loopCounter , , . , . : , . (Kernighan Plaugher 78)
, , . ( ), , . , , .
. . , , . , , . . , ? , .
, , . . , . . , . (. . /* */ C C++) . , , :/* *
122* * */
5.
, :/* , . */
, .
, . , . . , :void strangeCommentStyle() { for (int n = 0; n < JUST_ENOUGH_TIMES; ++n) { // . doSomethingMeaningful(n); // , . anotherUsefulOperation(n); } }
( ) . , . .
, . , . :class HandyExample { public: ... ... private: int appleCount; //
bool isFatherADustman; int favoriteNumber; }; // //
123
, . , , .
, , . . , . . , , , , . , , , . . , .
, , , . , C, , . , , , . , . : , , . , , . . . , .
124
5.
, . : , ( ) ( ). , , :/******************************************************** * foo *********************************************************/
. . . , , . , . . , . .
. . , , //XXX, //FIXME () //TODO (). . XXX . TODO , .1 FIXME , .
, . , , , , . , ; 1
TODO . , TODO, . , , .
125
, , . .
, , , . ., . : . , ( , foo) , . , , ( ) . , , .
, . : . , . , , , , . , . , . : ( ) ( , ) ( , diff) , , . , , , .
126
5.
, . . : . README , , . , . , , ; . README , . README, , . README , ; , .
, , , . , . . , . , . , , 10 , . , , .
. .
, . , , , ,
127
. . . , . , , , . . , . , TODO, . . , .
, , . :// blah.foo2() // blah.foo() // blah.foo2();
( ), , . , , , . , , , . , . , , . , . , . , , , .
. ;
128
5.
, , , A B . , . , B , A , B . , .
. , , , . , . . : , , , , . . , . : , , . , , . , , .
. , . , , . ? , ? ? ? , , , . , , , .
, , . ,
129
(, ). , , . , , . XXX, . , . , ; ! . , foo.c, , . .
, .
. , . , . ; . , .
, ,
, , ( . .)
130
5.
. 2. . 3. ? : . 4. , . , . 18. , .
. 605.
1. : a. ( ) b. c. d. C/C++
131
2. . ? ? 3. , //, ? ? ? 4. C/C++ API, , , , ? ?
1. , . . , ? (, !) 2. , , , , , ? 3. , , ? a. ? ? ? ? b. , , ? 4. ? : a. ? , ? ? b. ? ? ? 5. , ? ? ? ?
6
:
, . . .
: , . , , . . : . ? ? . , , . . , , .
134
6. , . , . , , . , , , . , , , . , . : . , .
.
. . , , , . , , , , , . , ; , . , ! () 9. , : . , . . . , . , ,
135
( ). . : . . . , . , , . , . . , . : , . . .
, . , . , : , , . , ( ). , , , , . , . .
. ,
136
6. , . . . () , . () , . , ( , ). , (, ). . , , , .
. , , . , , . , , , , , , . . , , . , .
. , , !
, / . /. . ; . ,
137
. , . , ; . int count() , ? : ( , tuple), , . C . . C++ .NET . C . ; , . . , ; . . , ( NULL). Java C# . . , . , ; .1
, . , . , . , . 1
unsigned int, signed int.
138
6. , . . C errno. : errno. ; . , . C errno, . , , . .
( ) ; . , . , , , . , . , . , : , . C++, .NET Java. , . , . ( , ), ( ). . , , , . ,
139
. . .1 , . , , . , , , , . , . ( ) ( ). . . , , . , ; !
. ( , ), , . , . , , ; . , C++; , , .
1
, , . . , .
140
6.
. , . : ( ), . (. . ), . : 10 , . ; , , 10, . , . , . , . . : . , , . . , . , . , .1 . . .1
, , C++ Java. C# ~X(), , . C# .
141
, . , , . , , . , . , . . , UNIX, ( ISO C [ISO99]). , , , . . , C, , / . .
, , , , . : , . ; , , , , . . . errno C . errno, . errno. , , . , , .
142
6. , , . , , . ( ). Java , . , , . Java , . , , , .1 : . . . , , . , : . , , .
: , . , , , . , . . . , : try/catch, , , 1
C++ , . , . Java, .
143
, ? .
, .
. , . : ? . , . : . , . . , : , . ? . ? ? . , , . ? , , . ? , , . . , ? , , .
144
6. , . (, ) (, , ). . . , , .
? . . , . , , . . , . , . , . , , , , . . , , . , . ; , , . , . , , , , , . . , ,
145
. : , , / , . : , . ; , . , , , , . , , .
, . . ? , , . , : . , . , , . ; . , . , , , . . , .
146
6. . , . , . , . , , . , . , , . , , . , , ; , ! . . , , , . , , . , , . , . . , . , , . . , , . , , , . ? . , , . , , . . , .
147
, , , , , . . . : , ( ). , ( ). , . , . , , , . .
! . , , , . . , . , , , . , :void nastyErrorHandling() { if (operationOne()) { ... ... if (operationTwo()) { ... ... if (operationThree()) { ... ... } } } }
148
6. ; . . , . . ; , , , . ? , . . , , ok, :void flattenedErrorHandling() { bool ok = operationOne(); if (ok) { ... ... ok = operationTwo(); } if (ok) { ... ... ok = operationThree(); } if (ok) { ... ... } if (!ok) { ... ... } }
, . ? , . , , , , . : , , . . , , , . ,
149
, . , . , .
, . : ! ( , .) , : , , , . , : 10K. , OK , , , . . , , . ( .) . , , 707E. . . ( Error:) . ( : Yes/No?), . , , , . , , , , . , , .
150
6. , , , . , , .
(SESE), , , .1 . , : void shortCircuitErrorHandling() { if (!operationOne()) return; ... ... if (!operationTwo()) return; ... ... if (!operationThree()) return; ... ... } , . , goto. .void gotoHell() { if (!operationOne()) goto error; ... ... if (!operationTwo()) goto error; ... ... if (!operationThree()) goto error; ... ... return; error: ... ... }
C++ Resource Acquisition Is Initialization (RAII) (Stroustrup 97). 1
, SESE, , . , , , . , SESE , .
151
: , . , , . , , , , ( C++, Java C#):void exceptionalHandling() { try { operationOne(); ... ... operationTwo(); ... ... operationThree(); ... ... } catch (...) { ... ... } }
, , . try/catch , , . , , .
, . : . , , . . , , , . , , . ? : .
152
6. , , , , . Java C# ; . C++ , , C. , . , , . , : , ? , . . , . . . , . . , , . , . , (, ). , , . . , assert (. . 45). : , . , . , . , . , . : , . ? , , . , :
153
. , . , . ( ?) . . . .
. . . , while , . , . : . , . .
, . , , : , . , . , , . , . ,
154
6. , , , . . , . , , , GIGO?1 . . , , . : ? ; . , . , , . . , , .
, ? , , . ; , .
, , .
( ). . . . , .1
Garbage In, Garbage Out , .
155
. . . 90% (Bentley 82). , , , , , .
, , , ,
. 1. . 4. , .
156
6. 9. . . ( .)
. 607.
1. , ? . 2. ? . ? 3. ? 4. UNIX. , ? 5. ? 6. , ?
1. ? ? 2. , ? 3. ( ) . . ? . ! ? ? , ? 4. ? , , ?
II . , . , , ; . : 7. . 8. , , ; . . 9. : , . 10. , : .
158
II. 11. , . , , . 12. . . , . , : , .
7
: ,
, . . . .
, . , , , , , . , ; , . , , . , . . , ,
160
7. . , , . . , , , ; . , , . . . . , , . , . . , . , , , . (, ), , . , .
? , , . , , . . . , . , . , , , . . , . :
?
161
, . , . : , . , , . , . : (, ), ( ). ; . , . (GUI). (CLI) . , . Windows . UNIX , . , . , (IDE). , , . GUI , . , , , , , . , UNIX, .
162
7. .1 . , . . . , . , . . . . , : , . , . , . , . , , , . Windows UNIX, UNIX , Windows , , . . , . , , .
? ; . , ,
1
Free : free ( ) free ( open source, ). , . . . 461.
?
163
. , , , , , . , , . , . . , , .
, . , . , . , . , ! . , . : ; , ; , . , : , , , ; , , , . ? . , , . , ; , , . , C , . . , . , , .
164
7. , . , . ; , .
, , , . ? , , . , . , : . , . , . . , ; , , . , , . , ; ., . , , .
, ; . , , , . , , . ! , .
165
, .
, , , . , ( ), . , ? , , . , , , .
, , , . , , . ? . , UNIX , .1 , . , GUI. ? , .
, , . , , . , sed.2 1
2
, . UNIX man bash, pipelines. sed , .
166
7. . , , yacc,1 , . . .
, . , , . . , . . . . , . , , . .
, . , , ! , . ? ? , , , (man). , . ?
, .
1
; , .
?
167
. widgeti zer, . , , . . ! , . , . , . , .
? . , , , , . , , . . . . , . , , IDE . , , ; , IDE. IDE , , . IDE.
, , . , ,
168
7. , .
, , . , . . , . . ; , .
, . , . IDE , , . , , , . : ( , . . ) (, ) ( , ) , , , . , . . , , . ( ) , XML. Vim Emacs UNIX, , . , IDE.
?
169
UNIX . GUI , . GUI . UNIX : diff . diff , . , , . diff . sed stream editor . sed . sed , . awk sed . awk , . , awk . grep , . . find/locate . , . ; . , wc /. : sort, paste, join cut.
. , , . , .
170
7. . , . , , , , . , , . , , . . . LXR, Doxygen ctags.
, . 449. : , .
. , . yacc, LALR(1).1 , , , . C , . Bison. , , . . GUI MFC. , , , ( ). ! , , , . , , .1
( ) .
?
171
, , , . , . , . . Perl , . , . , .
, . , , , .
, . . , , .
. , , . , . ? , , . , ? . ? , ( , ). , , .
172
7. ? C++ (ISO 98), 1999 C (ISO 98), Java (Gosling et al. 00)) ISO C# (ISO 05)? , ? CPU? 386 , , Intel? , .
, , . ( Visual C++ !).
. . : , . ? , , ? , , . , , , , . . , . . 178 . : , . . . , , . , . ? ? ? ?
?
173
, , , , . gcc, Microsoft Visual C++ Borlands C++ builder.
(linker, ) . , , . C C++ , . Java C# . : ? ? , . ? ? ?
. , UNIX make , IDE. . UNIX, autoconf automake. , . 10.
, , ! , . , , , . .
174
7. , , . , , . , . , . , ( , . .).
, . . 231 , , .
, . , , , . , printf! gdb GNU , . ddd . IDE .
, . . , , , .
. , . lint ,
?
175
C. , . , . / .1 . , , : , .
( ). . , . . . , . , , . , . , .
, . , .
, , . , ,1
, Java, .
176
7. , , , . , ; , . , .
. , .
. , , . , . , C ; . ( C++), . . , , . . . . , .
. ( ), . . , , . JVM ( Java) . C++ , . C# .NET .
?
177
! . . , , . , . , . . C++ STL. Java .NET . , .
. . . . 179 , . .
. , , , ( . 103). . , . ( ).
, . , , , . .
178
7.
, , ? , . . , , , . , . , , . , : UNIX, . ( , Windows), . . , Perl. , , . . , . . : ? ? , . , , . ( ?)
179
, .
. . , . ? , ? , ? . . , . , . .
, , , , , ,
, , , ,
. 10. , . ?
180
7. 13. , . 18. .
. 612.
1. IDE ? ? 2. ? 3. GUI? 4. , ? 5. ? a. b. c.
d. e.
181
1. ? ? ? ? a. ? b. ? c. ? ? d. ? 2. ? , ? 3. ( ) ? ? ? 4. ? ? 5. , ? , ?
8
: ? ? ?
, . 5:21
: . , ; . , . , . , . ? . , , , . , ,
184
8. , . , , ; . , . . , , . , . . , , , . ? , ?
bug ( ) . , , . . IEEE (IEEE 84): (error) , . , . , (, C, ), . (fault) , . , . . , . , , , , . . , ; , .
185
, , . (failure) . . , . , , . . . , ? , ? . , (bug) , (fault). (). 1947 . , Mark II Aiken Relay Calculator, .
? ? . . . , ; . (Kernighan Pike 99). , , . . , . , , ( ). . . . , .
186
8. , , . , . : ( ). , , , , , . . , , . : , , . , . ( ) , . , .1 . , . ( ) . (QA). , , , , . . , .
, , , ? , , , , .
1
, ?
, , , ?
187
QA: . , ? ? , . QA, . QA , . , . QA . , . QA, . , , ( ). , . ? , ( QA), , . , , . , . , , ; , . , . , .
, , : , . , . , , ; .
188
8. . . , .
. , . . , . (validation) .
, , . 10 . , , , , . . , . , . , , , , . , . , , . . , .
, , , . , , . , , , .
, , , ?
189
, , . : . , ; . . , (. . 195). . , . , ? . , ; , . (. 20). , . . ; , . .
, . , . . , ,1 ( )