添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。

添付ファイル一覧

Kind Attachment Name Size Version Date Modified Author Change note
png
custocompany1.png 3.3 kB 1 25-6-2011 03:28 ytp
png
custocompany2.png 4.1 kB 1 25-6-2011 03:28 ytp
png
name.png 8.2 kB 4 31-12-2011 21:46 ytp
png
name2.png 8.3 kB 3 31-12-2011 21:43 ytp
png
supplyer.png 3.4 kB 1 25-6-2011 03:28 ytp

This page (revision-22) was last changed on 25-7-2014 20:50 by ytp

This page was created on 23-5-2011 01:03 by ytp

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Difference between version and

At line 28 changed one line
そして次に、「いずれの氏名を返す時も、姓と名の間のスペースを2つに替えて欲しい。」という要望が挙がったとします。よく見てみると上記二つのメソッドは非常に良く似ています。「スペースを挟んで姓と名を連結する」という仕様だからです。こういう時、privateメソッドを作っておくと変更が一カ所で済んだはずです。次のようなコードです。
そして次に、「いずれの氏名を返す時も、姓と名の間のスペースを2つに替えて欲しい。」という要望が挙がったとします。よく見てみると上記二つのメソッドは非常に良く似ています。「スペースを挟んで姓と名を連結する」という仕様だからです。こういう時、privateメソッドを作っておくと変更が一ヶ所で済んだはずです。次のようなコードです。
At line 45 changed one line
が、果たして本当にそうでしょうか? 例えば「仕入れ先」クラスが別にあったとして、その属性にも「担当者姓」「担当者名」があったとしたらどうでしょう? そしてそのクラスにも「担当者氏名を返す」というメソッドが必要で、「姓と名の間にスペースを2つ挟む」という仕様だったら? そのクラスにも同じようなprivateメソッドが必要になってしまい、仕様変更への対応が1カ所というわけにいかなくなってしまいます。\\
が、果たして本当にそうでしょうか?
例えば「仕入れ先」クラスが別にあったとして、その属性にも「担当者姓」「担当者名」があったとしたらどうでしょう? そしてそのクラスにも「担当者氏名を返す」というメソッドが必要で、「姓と名の間にスペースを2つ挟む」という仕様だったら? そのクラスにも同じようなprivateメソッドが必要になってしまい、仕様変更への対応が1ヶ所というわけにいかなくなってしまいます。\\
At line 48 added 56 lines
!!privateメソッドとは何か?
上記の例で解るように、__some bold text「privateメソッドを作りたくなった時はクラスを見逃している」__のです。\\
privateメソッドはクラス内の共通関数に当たるのですが、共通関数を作ろうとすれば、その関数に渡すパラメータもそもそも共通化する必要があります。そのパラメータをひとかたまりとするクラスを作るべきなんです。
!!パラメータを持たないprivateメソッドは?
この話をした際によくある反論が「パラメータを持たないprivateメソッドだってあるじゃないか!」というものです。\\
パラメータの無い、つまり「共通関数ですらない」privateメソッドがなぜ必要なのでしょうか?\\
彼らの答えは「可読性をあげるため長いコードを分割するんだ。」なのですが、私に言わせると「ちゃんちゃら可笑しいw」です。\\
なぜならコードが長くなるのは、上記のような小物クラスを見逃しまくって、結果的に手続き的な記述になっているからだと断言できます。そもそも一連の処理ならばprivateメソッドなどに分割せず、処理の流れの通りに1ヶ所に書いてある方が、他人が見た時の可読性は高いはずです。下の例を比べてみて下さい。
%%prettify
{{{
public String getSomething() {
doSomething1();
doSomething2();
doSomething3();
}
public String getAnotherthing() {
他の処理が書いてある;
}
private void doSomething1() {
何かの処理1-1が書いてある;
何かの処理1-2が書いてある;
}
private void doSomething2() {
何かの処理2-1が書いてある;
何かの処理2-2が書いてある;
}
private void doSomething3() {
何かの処理3-1が書いてある;
何かの処理3-2が書いてある;
}
}}}
/%
%%prettify
{{{
public String getSomething () {
何かの処理1-1が書いてある;
何かの処理1-2が書いてある;
何かの処理2-1が書いてある;
何かの処理2-2が書いてある;
何かの処理3-1が書いてある;
何かの処理3-2が書いてある;
}
public String getAnotherthing() {
他の処理が書いてある;
}
}}}
/%
Version Date Modified Size Author Changes ... Change note
22 25-7-2014 20:50 7.789 kB ytp to previous
21 31-12-2011 21:42 7.791 kB ytp to previous | to last
« This page (revision-22) was last changed on 25-7-2014 20:50 by ytp