プロジェクトなので複数人でプログラムを組んでいるのだが
他人が組んだプログラムに関してどうも違和感がある。
コーディング規約に違反している訳ではないのだがどうも気持ち悪い。
何かと言うとやたらgetXXXXって関数(メソッド)が多い。
作成者に尋ねたら「だって値取得するじゃないですか」って答える。
うーん。それだと値を返却する関数は全部getってついちゃうじゃん。
で、全体のソースを眺めると概ね次のようにわかれる。
・getHogeHoge()
・makeHogeHoge()
・buildHogeHoge()
うーん、一般的にありそうな関数(メソッド)名だ。
一見すると問題ないが、それぞれどんな処理内容の時に
「get」「make」「build」を使うかはっきりしていない。
プログラムを組んでいる人に依存しているし、
それぞれに聞いてみたら明確な判断基準はなくて感覚論の様だ。
そして私もはっきり説明できなので、感覚論^^;。
オブジェクト指向でクラスなどなら、getについてプロパティから取得する時、
などと説明できるかもしれないが、構造化プログラムではどうだろう?
更にどちらでもかまわないが、idに対して名称を取得する場合など、
「getHogeHogeName(id)」としても違和感は感じない。
それぞれ辞書(goo.ne.jp)で引くと
get
得る, 取る, 手に入れる
make
作る, 製造する, 建設する
build
建てる, 造る
getは、はっきり違うのがわかる。
makeとbuildは微妙~
ますます区別が付かなくなった。これは個人個人で認識違うのも仕方がない気がしてきた。
皆様はどのようにget、make、buildを使い分けていますか。
引数があったらなかったらとか、中で加工するとかしないとか、
引数だけで値を生成できるとかできないとか、なんでもよいので教えて下さい。
たぶんメソッド名(オブジェクト指向)と関数名(構造化プログラム)でも
違ってきそう。
何処だったか、get は「オブジェクト内の状態を変えない」場合に使う。という決まり事が書いてありました。なので、ざっくり言うと、下のような違いかなと。
class foo {
private:
int m_value;
public:
int getValue() { retrun m_value; }
int make10Times( int v ) { return m_value = v*10; }
void buildValue() { m_value = 0; }
};
make の場合は、処理を行った後にオブジェクトを返す。
build の場合は、複数の処理を行うので、基本は void 型
のような感じ。
t.masudaさんコメントありがとうございます。
コードのおかげでとてもわかりやすいです。
オブジェクト指向の場合、メソッド名は状態と関係が深いですね。
状態が意識し難い構造化プログラムではどうなるんでしょう?>kataさん
あれ?なんか指名されてた…。
僕の場合、あまりコーディング理論に基づいたコーディングはしていないので感覚論でしかないのを前提に。
僕は get または make は使うけど build は使ったことない。
何でかというと本当の意味を知らなかったからw
というよりは make のほうが分かりやすいからかな。
で、get と make の使い分けは、get は単に値を返す、make は処理をして何か生成したものを返す(返さないときもある)。
でも計算した結果を返すときなんかは get にしてしまうかなぁ。
いや、たぶん calcHogeHoge とかつけちゃうかな。
結局は何をしているのかわかりやすい名前にしてしまうだけだな。
kataさんコメントありがとうございます。
わかりやすいのが一番ですね。
この感覚をチーム内で共有して個人差をなくしたいですね。
ちなみに補足しておくと、名前の付け方はオブジェクト指向でも構造化でも違いはないと思う。