---
# System prepended metadata

title: 読みやすく変更に強いコードのために

---

# 読みやすく変更に強いコードのために
追記してください😇

## 全体
- nest を減らす　=> 早期リターンするなど
- 結合度を下げる
- なんでも長くしすぎない(切れるところは切る)
- simpleに書く(not easy)
- loopの中は絶対に長くしない、多重loopは可能な限り避ける
- スコープをできるだけ小さくする
- テストを意識してコードを書く
- dry
- import文を書く
- IDEが理解できるcodeにする(view usage, code jumpできるように)
- schemaを書く// http requestで何が飛んでくることを期待しているのか
- classに複数の役割を与えない(現状DBのtable自体とrow/entityが同一のclass)
- data class的なものを使いたい
- typoどうにかしたい
- 巨大な連想配列を使わない
- code formatterを使う
- linterを使う
- methodの順番を考える(code fomatterがやってくれそう)
- 1fn 30line 1class300line（テキトー）超えたらかなり怪しい

## やめたいもの
- evel 、reflection
- stringでclassやmethodを指定
- コピペコード
- 無理やりすぎる共通化
- staticやめよう
- 大量のwarning
- magic number


## variable
- 変数に適切な名前をつける
- ~flagはNG　is~とか
- 変数は使う直前に宣言する
- 変数はなるべく少なく、無駄な変数は使わない
- mutableを可能な限り使わない
- なるべくmutationしない
- 型を明確にする
- nullableか明示する

## function
- 適切な名前をつける（後から読んだ人がここは読まなくてよさそうと思えるようにfnを切る）
    ```
        if(is_career_deleted($career)) {
            do_something();
        }
    ```
    is_career_delete()の内容は読まなくてもなんとなくわかる
    関係なければdo_somethingも読まなくても良さそう
    とか出来るだけ読み飛ばせるようにする。
- 名前以上のことをやらない
- なるべくstateless
- 出来るだけ副作用を起こさない
- 1function1機能、複数のことをしない
- １機能内でもその機能に本質的に関係ないものは分ける


