Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tidy First? 読んだ共有

Avatar for shunsuke6 shunsuke6
March 05, 2024
16

Tidy First? 読んだ共有

Tidy First? を読んだ共有
翻訳される前に、原書を読んで日本語に訳している部分があるので、日本語訳と違う部分があると思います。
こういう内容書いてるから読んでねという共有なので1章の技法部分の要約になっています。

Avatar for shunsuke6

shunsuke6

March 05, 2024

Transcript

  1. Tidiyings ガード節 マジックナンバー デッドコード 明示的なパラメータ Normalize Symmetries( 正規化) 適宜改行を入れる Reading

    Order( コードの順番) Extract Method Cohesion Order( 凝縮の整理) One Pile( 分散しすぎない) 宣言と初期化を一緒に わかりやすいコメントを 変数の説明 不要なコメントは削除 8
  2. ガード節 いわゆるealry return if(str != null){ if(!str.isEmpty()){ System.out.println(str); } }

    if(str != null) return; if(!str.isEmpty()) return; System.out.println(str); 9
  3. Normalize Symmetries( 正規化) 同じ処理でも書き方が複数ある 書き方をそろえよう public String formatMessage(String name, int

    age) { return "Name: " + name + ", Age: " + age; } public String formatMessage(String name, int age) { return String.format("Name: %s, Age: %d", name, age); } public String formatMessage(String name, int age) { StringBuilder sb = new StringBuilder(); sb.append("Name: ").append(name).append(", Age: ").append(age); return sb.toString(); } public String formatMessage(String name, int age) { return MessageFormat.format("Name: {0}, Age: {1}", name, age); } 11
  4. 宣言と初期化を一緒に よく言われるやつ int a // some code that doesn't use

    a a = ... int b // some more code, maybe it uses a but doesn't use b b = ...a... // some code that uses b int a = ... // some code that doesn't use a // some more code, maybe it uses a but doesn't use b int b = ...a... // some code that uses b 14
  5. 変数での説明 これもよく言われる return new Point( (int) (Math.random() * 100 +

    Math.sin(Math.toRadians(45))), (int) (Math.random() * 100 + Math.cos(Math.toRadians(45))) ); int randomFactor = 100; double angle = Math.toRadians(45); int xCoordinate = (int) (Math.random() * randomFactor + Math.sin(angle)); int yCoordinate = (int) (Math.random() * randomFactor + Math.cos(angle)); return new Point(xCoordinate, yCoordinate); 15
  6. 明示的なパラメータ 配列や連想配列をそのまま渡すのは良くない params = {a: 1, b: 2} foo(params) function

    foo(params) function foo(params){ foo_body(params.a, params.b) } function foo_body(a, b) 17
  7. Extract Helper 再利用性が高いものは、独立した処理として切り出す リファクタリングでよく言われるもの。 public void process(){ // ... 変わらないもの

    ... // ... 変わるべきもの ... // ... 変わらないもの ... } public void process(){ // ... 変わらないもの ... helper(); // ... 変わらないもの ... } private void helper(){ // ... 変わるべきもの ... } 19
  8. 例 sender(){ senderFeild1(); senderFeild2(); } receiver(){ receiverFeild1(); receiverFeild2(); } format

    = [ {field: "1" type: "string"}, {field: "2" type: "int"}, ] sender(){ writeFeild(format); } receiver(){ readFeild(format); 26
  9. chain ガード節 -> 説明ヘルパー、説明変数 デッドコード -> コードの並び変え( 読む順、結束順) Normilze Symmetries

    -> コードの順番、凝縮の整理 読む順番 -> Normize Symmetries 凝縮の順序 -> ヘルパーオブジェクトの作成(Tidy の範囲外) 変数の説明 -> 説明ヘルパー、冗長なコメントの削除 etc... 33