質問
(かくお願いします。)
私は好ましく利用機能過負荷といった、すべて同じ名前の両方のゲッター、セッター.
int rate() { return _rate; }
void rate(int value) { _rate = value; }
// instead of
int getRate() { return _rate; }
void setRate(int value) { _rate = value; }
// mainly because it allows me to write the much cleaner
total( period() * rate() );
// instead of
setTotal( getPeriod() * getRate() );
自然にいだいどうなっているのだろう図書館の作家た良いのか?
解決
しっくりくるかもしれませんの取得/設定バージョンであるか、不明確でいるのかもしれません。また率()金(10)、どうやって知率(10)ているだけではなく、利用の10の計算を返します。んでいて検索を開始するに出でいるのかもしれません。単一の機能名称すべき未来のために今できることなく、二つの物です。
また、その他指摘の通り、一部の希望を省略するか、'、'設定'、
int Rate( );
void SetRate( int value );
そのコンベンションは明確になってなかったであろう問題があると読みます。
他のヒント
私は常に先を省略するか、'自分のsetterか、ん、 rate()
の代わりに getRate()
.が過負荷のための、セッターはのように聞こえるかもしれないが非常に良いアイデア私の名前 rate
なに伝えることは、オブジェクトが変更.発生していると考えること
total(period() * rate()); // awesome, very clear
rate(20); // Looks like it computes a rate, using '20'...but for what? And why ignore the return value?
かつ int rate();
や void setRate(int value);
?このことは美徳な機能の同じ名前でやっているものの、まだできる period() * rate()
.
数年前には、同意しています。最近では、間違いを作り始めたそうで、このアドレスのゲッターまたはセッターになりました。とリーディングプロジェクトtr1::結合するとかのリクとかその他もろもろは迷惑なレベルまでさまざまです。
例えば:
struct A
{
void Foo(int);
int Foo()const;
};
std::vector<A> v = ....;
std::vector<int> foos;
// Extract Foo
std::transform(
v.begin(), v.end(),
std::back_inserter(foos),
//Ambiguous
// std::tr1::bind(&A::Foo)
//must write this instead. Yuck!
std::tr1::bind(static_cast<int(Foo::*)()>(&A::Foo));
);
退かくだいして下さい;-)
私は見ていて気分が良いものもこの地域wikiます。
時習い始めたC++ったスタイルガイド、または一部のポイント:
- 方法は大文字というだけで貼).
- setterかの方法をわかりやすく、lowecase(
rate
). - セッターを明示的に、小文字(
setRate
).
ている簡潔で重要なのが不完全または誤解を招きます。そのために。GetFoo()およびSetFoo()をFoo()およびFoo(int foo).
あるレベル"取得"および"設定"
- I Getを使用、セット"快速"。
- ばすのに長い時間を実行し、そのわCalcでは、これらの名前を意味するものあれを取得します。
- り、業務を開始する接頭辞のようにロード/保存、クエリー/店舗、読み取り/書き込み、検索/見等
ぜ/指定頂けませんのでご注意くださ態の有用な意味すると、一貫したネーミング戦略です。
ながらのコメントがtrueい。実物のセッタ/ゲッター antipattern.が1/3の中のメソッドをドメインのグラフはダミー手法によって発生したeclipseが何か間違っています。
なクラスの物件ではないかと思うのantipatternのです。
さらに、このコードが完了します。
obj.set (control shift space)
のための仕掛け人
obj.get (control shift space)
のためのsetterか
そうなるとsetterか、セッターがペアはコの匂いから"視覚"言語学"properties"があります。に"良い"クラスでは、データメンバーがwriteonlyまたは読み取り専用な読み取り/書き出します。
と思いを共有setterか、セッターがないのオブジェクトモデル深いです。おとえば、なぜ計の過去の期間の。いんじゃないの。できる設定の期間におけすることで知られている。
るだろうと考え、それを実例外だ憎悪を見るクラスの発見"getX/setX,getY/setY。等" それだけでいるような思い入れのクラスを使用すると、割としっかりとした著者のクラスや、データントなんてどのようにクラスを使用すること。
自然にいます。
もう一つの問題は、誰が関数の場合の過負荷.この(たり、逆に、不完全な)例:
class Employee {
virtual int salary() { return salary_; }
virtual void salary(int newSalary) { salary_ = newSalary; }
};
class Contractor : public Employee {
virtual void salary(int newSalary) {
validateSalaryCap(newSalary);
Employee::salary(newSalary);
}
using Employee::salary; // Most developers will forget this
};
なし using
条項は、ユーザーの Contractor
できない場合、給与のためる。私は最近追加 -Woverloaded-virtual
の警告のセットプロジェクトに取り組ん、lo、見よ、この場所です。
私の執行の条約の方法は、常に動詞やクラスは、常に名詞を除くfunctors、明白な理由).その場合、取得/設定prefixを使用する必要があの一貫性を追求します。としていくことが重要だと思う全編にSwangren.この金額といったものを用い接頭辞の付かない-同じ系列.
うさ回避の取得および設定ラベルの情報を必要とせずにコンパイラと言われたのですが、これは仕事のためこれらの単純な物件です。
できる課題
class Stuff {
void widget( int something ); // 'special' setter
const Widget& widget( int somethingelse ) const; // getter
}
Stuff a;
a.widget(1); // compiler won't know which widget you mean, not enough info
場合は、単にゲッター rate()
, は、コンパイラのように文句のスタートをきること再定義のその他の rate
シンボル、またお野良い意味のある名前をするようです。その場合は必要ないかのような名会員 _rate
その他の類似す。私は個人的には嫌いを見/タイピングの方頻繁に行う傾向があるの getRate()
ます。
これは主観的なことだけが私の個人的好みです。