SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
Register your product to gain access to bonus material or receive a coupon.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
The First Hands-On, Practical, All-Ruby Refactoring Workbook!
Refactoring–the art of improving the design of existing code–has taken the world by storm. So has Ruby. Now, for the first time, there’s a refactoring workbook designed from the ground up for the dynamic Ruby language.
Refactoring in Ruby gives you all the realistic, hands-on practice you need to refactor Ruby code quickly and effectively. You’ll discover how to recognize “code smells,” which signal opportunities for improvement, and then perfect your program’s design one small, safe step at a time.
The book shows you when and how to refactor with both legacy code and during new test-driven development, and walks you through real-world refactoring in detail. The workbook concludes with several applications designed to help practice refactoring in realistic domains, plus a handy code review checklist you’ll refer to again and again. Along the way, you’ll learn powerful lessons about designing higher quality Ruby software–lessons that will enable you to experience the joy of writing consistently great code.
Refactoring in Ruby will help you
Foreword xvii
Preface xix
About the Authors xxiii
Part I: The Art of Refactoring 1
Chapter 1: A Refactoring Example 3
Sparkline Script 3
Consistency 6
Testability 8
Greedy Methods 8
Greedy Module 9
Comments 10
Whole Objects 11
Feature Envy 12
Uncommunicative Names 14
Derived Values 15
Wabi-Sabi 17
Summing Up 18
What’s Next 18
Chapter 2: The Refactoring Cycle 19
What Is Refactoring? 19
Smells Are Problems 20
The Refactoring Cycle 21
When Are We Done? 21
Test-Driven/Behavior-Driven Development 22
Exercise 23
What’s Next 23
Chapter 3: Refactoring Step by Step 25
The Refactoring Environment 25
Inside a Refactoring 26
The Generic Refactoring Micro-Process 30
Exercises 33
What’s Next 33
Chapter 4: Refactoring Practice 35
Read Other Books 35
Practice Refactoring 35
Exercises to Try 36
Participate in the Community 37
Exercise 38
What’s Next 38
Part II: Code Smells 39
Chapter 5: Measurable Smells 41
Comments 42
Long Method 44
Large Module 46
Long Parameter List 48
Exercises 49
Chapter 6: Names 57
Type Embedded in Name 59
Uncommunicative Name 60
Inconsistent Names 61
Exercises 62
Chapter 7: Unnecessary Complexity 65
Dead Code 66
Speculative Generality 68
Greedy Method 70
Procedural Code 72
Dynamic Code Creation 74
Exercises 76
Chapter 8: Duplication 79
Derived Value 80
Repeated Value 81
Duplicated Code 83
Alternative Modules with Different Interfaces 85
Exercises 86
Chapter 9: Conditional Logic 93
Nil Check 94
Special Case 96
Complicated Boolean Expression 98
Control Coupling 100
Simulated Polymorphism 101
Exercises 103
Chapter 10: Data 107
Open Secret 108
Data Class 110
Data Clump 112
Temporary Field 114
Exercises 115
Chapter 11: Inheritance 125
Implementation Inheritance 126
Refused Bequest 128
Inappropriate Intimacy (Subclass Form) 130
Lazy Class 131
Exercises 133
Chapter 12: Responsibility 135
Feature Envy 136
Utility Function 138
Global Variable 140
Inappropriate Intimacy (General Form) 141
Message Chain 143
Middle Man 145
Greedy Module 146
Exercises 148
Chapter 13: Accommodating Change 153
Divergent Change 154
Shotgun Surgery 156
Parallel Inheritance Hierarchies 158
Combinatorial Explosion 159
Exercises 160
Chapter 14: Libraries 163
Incomplete Library Module 164
Reinvented Wheel 166
Runaway Dependencies 167
Exercises 168
Part III: Programs to Refactor 171
Chapter 15: A Simple Game 173
Code 173
Refactoring 175
Development Episodes 180
Chapter 16: Time Recording 183
Preparing the Soil 187
Substitute Algorithm 191
Optional Extras 194
Chapter 17: Calculator 197
Code 198
Refactoring 209
Thank You 211
Part IV: Appendices 213
Appendix A: Answers to Selected Questions 215
The Refactoring Cycle 215
Refactoring Step by Step 216
Refactoring Practice 216
Measurable Smells 217
Names 220
Unnecessary Complexity 222
Duplication 225
Conditional Logic 230
Data 233
Inheritance 237
Responsibility 239
Accommodating Change 241
Libraries 244
A Simple Game 246
Time Recording 247
Appendix B: Ruby Refactoring Tools 251
Code Smell Detectors 251
Environments with Refactoring Support 252
Bibliography 253
Index 255