Гудлиф П. - Ремесло программиста. Практика написания...

697
РЕМЕСЛО ПРОГРАММИСТА //практика написания хорошего кода Ïèòåð Ãóäëèô ÏÐÎÔÅ ÈÎÍÀËÜÍÎ

Upload: jason-johnson

Post on 12-Aug-2015

302 views

Category:

Documents


17 download

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 ( )