「良いコードを書く技術」(コードの分割〜

長くなったので二つに分割して記述( ..)φ
ここからは読みながらメモしてた部分を補足する形で記述。

□コードの分割
○コードの長さ
100行(1センテンスで)を超えるとどんどん読みづらくなる。→分割を考える目安。
出来れば30行以内に収めたいところだけど、バランスが難しい。
リファクタリングなどを行いながら経験して学んでいくしかない。

方式として、2種類の分割方法がある。
トップダウン方式・・・必要なクラスやメソッドを洗い出して分割。
            先に分割考えてからコーディング。なれないと難しい。
ボトムアップ方式・・・コーディングして分割できそうな単位を見つけて
            分割を行なっていく。よくやるのはこっち。

種類はどうあれ(トップダウン方式は難しい(-_-;)
先に作ってみて色々改善して修正やっていけば良い。

○状態を持つ処理をクラスに抽出して分割
「状態を表すローカル変数(statesとか)は、まずその処理自体をクラスに抽出。
「状態を表すローカル変数」をフィールド変数に移動することで、メソッド間の状態の引継ぎをなくす
 ことが出来てあとのリファクタリングを行いやすく出来る(・∀・)イイネ!!


そういえばインナークラスを作ったことがない(-_-;)
メリットあるのに←設計考える必要あるかな(・ω・ )
使いどころは、外部向けにクラスを作るほどではないけれど、状態を保存する自分都合のクラスを作りたいときなど( ..)φ


static(クラス変数、クラスメソッド)として記述するとオブジェクトに依存しない。
付けないとインスタンス変数、メソッドとなりオブジェクトに依存する。

フィールド変数として保存したほうが良いものって(・ω・ )?
→フラグや状態を表す変数、複数のインスタンスメソッドで使用するデータ、いくつかの値をセットで扱う必要がある変数。

積極的に共通化できる部分は、メソッドとして抽出するなり
親クラス生成して継承させるなりして分割していくようにしよう。

ループでは、
ループの制御構造と「1件の要素を処理するメソッド」に分割出来るので出来ればやったら捗る。


if分の条件でもそう。
条件部分をメソッドにすることで条件がわかりやすくなるし捗る。

例えば、
if( loginCheck(); ){
}
else{
}
とかするとわかりやすい。


□コードの集約
Eclipseリファクタリング機能でメソッドの抽出が出来るみたいΣ(゚д゚lll)
 知らなかったです。。。恥ずかしながら。。。是非使いたい。

まず、メソッドに抽出してまとめる。(コードの重複あったら抽出出来ないかすぐ検討!)
継承でも子クラス同士でコードが重複してる部分あったらメソッドとして抽出して親クラスへ。

※ただし、親クラスに追加するのは本当に必要な共通的な振る舞いのみにするよう心がけるようにしないと親クラスが変にでかくなるので注意。

ちょっと長くなったので後でまとめる( ..)φ
詳細はノートにまとめてあるので参照。