Preface to the Second Edition vii
Introduction x
What Is Programming? . . . . . . . . . . . . . . . . . . . . . . . xii
Programming Languages . . . . . . . . . . . . . . . . . . . . . . xiii
The Art of Programming . . . . . . . . . . . . . . . . . . . . . . xiv
1 Getting Started 1
1.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 Numbers 9
2.1 Did It Work? . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Introduction to puts . . . . . . . . . . . . . . . . . . . . . 10
2.3 Integer and Float . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Simple Arithmetic . . . . . . . . . . . . . . . . . . . . . . 10
2.5 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 12
3 Letters 14
3.1 String Arithmetic . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 12 vs. ’12’ . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3 Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Variables and Assignment 19
5 Mixing It Up 23
5.1 Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2 Another Look at puts . . . . . . . . . . . . . . . . . . . . 25
5.3 The gets Method . . . . . . . . . . . . . . . . . . . . . . . 26
5.4 Did It Work? . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.5 The chomp Method . . . . . . . . . . . . . . . . . . . . . . 27
5.6 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 28
5.7 Mind Your Variables . . . . . . . . . . . . . . . . . . . . . 28
6 More About Methods 30
6.1 Fancy String Methods . . . . . . . . . . . . . . . . . . . . 32
6.2 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 36
6.3 Higher Math . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.4 More Arithmetic . . . . . . . . . . . . . . . . . . . . . . . 37
6.5 Random Numbers . . . . . . . . . . . . . . . . . . . . . . 38
6.6 The Math Object . . . . . . . . . . . . . . . . . . . . . . . 40
7 Flow Control 41
7.1 Comparison Methods . . . . . . . . . . . . . . . . . . . . 41
7.2 Branching . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.3 Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.4 A Little Bit of Logic . . . . . . . . . . . . . . . . . . . . . . 51
7.5 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 57
8 Arrays and Iterators 59
8.1 The Method each . . . . . . . . . . . . . . . . . . . . . . . 61
8.2 More Array Methods . . . . . . . . . . . . . . . . . . . . . 64
8.3 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 65
9 Writing Your Own Methods 67
9.1 Method Parameters . . . . . . . . . . . . . . . . . . . . . 71
9.2 Local Variables . . . . . . . . . . . . . . . . . . . . . . . . 72
9.3 Experiment: Duby . . . . . . . . . . . . . . . . . . . . . . 74
9.4 Return Values . . . . . . . . . . . . . . . . . . . . . . . . 76
9.5 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 80
10 There’s Nothing New to Learn in Chapter 10 82
10.1 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
10.2 Rite of Passage: Sorting . . . . . . . . . . . . . . . . . . . 88
10.3 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 90
10.4 One More Example . . . . . . . . . . . . . . . . . . . . . . 90
10.5 A Few More Things to Try . . . . . . . . . . . . . . . . . . 97
11 Reading and Writing, Saving and Loading, Yin and... 98
11.1 Doing Something . . . . . . . . . . . . . . . . . . . . . . . 98
11.2 The Thing About Computers... . . . . . . . . . . . . . . . 99
11.3 Saving and Loading for Grown-Ups . . . . . . . . . . . . 100
11.4 YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11.5 Diversion: Double-Quoted Strings . . . . . . . . . . . . . 103
11.6 Back to Our Regularly Scheduled Programming . . . . . 105
11.7 Renaming Your Photos . . . . . . . . . . . . . . . . . . . 107
11.8 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 110
12 New Classes of Objects 112
12.1 The Time Class . . . . . . . . . . . . . . . . . . . . . . . . 113
12.2 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 115
12.3 The Hash Class . . . . . . . . . . . . . . . . . . . . . . . . 115
12.4 Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
12.5 Stringy Superpowers . . . . . . . . . . . . . . . . . . . . . 118
12.6 A Few More Things to Try . . . . . . . . . . . . . . . . . . 120
12.7 Classes and the Class Class . . . . . . . . . . . . . . . . 121
13 Creating New Classes, Changing Existing Ones 122
13.1 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 123
13.2 Creating Classes . . . . . . . . . . . . . . . . . . . . . . . 123
13.3 Instance Variables . . . . . . . . . . . . . . . . . . . . . . 124
13.4 new vs. initialize . . . . . . . . . . . . . . . . . . . . . . . 127
13.5 Baby Dragon . . . . . . . . . . . . . . . . . . . . . . . . . 128
13.6 A Few More Things to Try . . . . . . . . . . . . . . . . . . 133
14 Blocks and Procs 134
14.1 Methods That Take Procs . . . . . . . . . . . . . . . . . . 135
14.2 Methods That Return Procs . . . . . . . . . . . . . . . . . 139
14.3 Passing Blocks (Not Procs) into Methods . . . . . . . . . 140
14.4 A Few Things to Try . . . . . . . . . . . . . . . . . . . . . 142
15 Beyond This Fine Book 145
15.1 irb: Interactive Ruby . . . . . . . . . . . . . . . . . . . . . 145
15.2 The PickAxe: Programming Ruby . . . . . . . . . . . . . . 146
15.3 Ruby-Talk: The Ruby Mailing List . . . . . . . . . . . . . 146
15.4 Tim Toady . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
15.5 THE END . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
A Possible Solutions 150
A.1 Exercises from Chapter 2 . . . . . . . . . . . . . . . . . . 151
A.2 Exercises from Chapter 5 . . . . . . . . . . . . . . . . . . 152
A.3 Exercises from Chapter 6 . . . . . . . . . . . . . . . . . . 154
A.4 Exercises from Chapter 7 . . . . . . . . . . . . . . . . . . 155
A.5 Exercises from Chapter 8 . . . . . . . . . . . . . . . . . . 162
A.6 Exercises from Chapter 9 . . . . . . . . . . . . . . . . . . 165
A.7 Exercises from Chapter 10 . . . . . . . . . . . . . . . . . 169
A.8 Exercises from Chapter 11 . . . . . . . . . . . . . . . . . 180
A.9 Exercises from Chapter 12 . . . . . . . . . . . . . . . . . 187
A.10 Exercises from Chapter 13 . . . . . . . . . . . . . . . . . 193
A.11 Exercises from Chapter 14 . . . . . . . . . . . . . . . . . 199
Index 206
· · · · · · (
收起)