16. Good Programmer
• 30% Good Habits
• 30% English
• 40% Passion, Talent, Practice,
and Everything Else
Copyright by IISI. All rights reserved 16
17. Duplicated Code (Bad Smell)
DRY
(Don't Repeat Yourself)
Copyright by IISI. All rights reserved 17
18. Duplicated Code (Bad Smell)
DRY
(Don't Repeat Yourself)
vs.
WET
(We Enjoy Typing)
Copyright by IISI. All rights reserved 18
19. Pull Up Method
(Refactoring)
Copyright by IISI. All rights reserved 19
20. Pull Up – 1 (Eclipse)
Copyright by IISI. All rights reserved 20
21. Pull Up – 2 (Eclipse)
Copyright by IISI. All rights reserved 21
22. Pull Up – 3 (Eclipse)
Copyright by IISI. All rights reserved 22
23. Pull Up – 4 (Eclipse)
Copyright by IISI. All rights reserved 23
24. Pull Up – 5 (Eclipse)
Copyright by IISI. All rights reserved 24
25. Long Method (Bad Smell)
• Short methods are good
• Whenever we feel the need to
comment something, we write
a method instead
• Method name explains the
intention
Copyright by IISI. All rights reserved 25
27. Extract Method – 1 (Eclipse)
Copyright by IISI. All rights reserved 27
28. Extract Method – 2 (Eclipse)
Copyright by IISI. All rights reserved 28
29. Extract Method – 3 (Eclipse)
Copyright by IISI. All rights reserved 29
30. Conditionals and loops also give
signs for extractions.
Use Decompose Conditional to deal
with conditional expressions.
With loops, extract the loop and the
code within the loop into its own
method.
Copyright by IISI. All rights reserved 30
31. Large Class (Bad Smell)
• Trying to do too much
• Shows up as too many instance
variables
• Duplicated code cannot be far
behind
Copyright by IISI. All rights reserved 31
33. Extract Class – 1 (Eclipse)
Copyright by IISI. All rights reserved 33
34. Extract Class – 2 (Eclipse)
Copyright by IISI. All rights reserved 34
35. Extract Class – 3 (Eclipse)
Copyright by IISI. All rights reserved 35
36. Long Parameter List
(Bad Smell)
• Hard to understand
• Become inconsistent and
difficult to use
• Forever changing them as you
need more data
Copyright by IISI. All rights reserved 36
48. How about the translation?
Copyright by IISI. All rights reserved 48
49. 中譯
你可以選擇每個 class 和函式的名字,
這給了你一個解釋自己意圖的機會。
class 或函式內部則解釋實現這個意圖
的作法。如果class 和函式內部又以「
更小單元的意圖」來編寫,你所寫的
程式碼就可以「與其結構中的大部分
重要資訊溝通」。 (p.61)
Copyright by IISI. All rights reserved 49
50. 原文
Choosing the name of each class and the name
of each method gives you an opportunity to
explain what you intend. The internals of the
class or method explain how the intention is
realized. If the internals also are written in
terms of intention in yet smaller pieces, you
can write code that communicates most of
the important information about its own
structure.
Copyright by IISI. All rights reserved 50
52. 我的翻譯
你可以選擇每個 class 和函式的名字,
這給了你一個解釋自己意圖的機會。
class 或函式內部則解釋實現這個意圖
的作法。如果class 和函式內部又以「
更小單元的意圖」來編寫,你所寫的
程式碼就可以「表達出它自己結構的
大部分重要資訊」。
Copyright by IISI. All rights reserved 52
55. 琴鍵有限,琴藝無限
Copyright by IISI. All rights reserved 55
56. - Thank You -
Headquarter
6F., No.7, Sec. 2, Xianmin Blvd., Banqiao Dist., New Taipei City 22041, Taiwan(R.O.C.)
TEL : +886-2-8969-1969 FAX : +886-2-8969-3359