web-dev-qa-db-ja.com

Wordが名詞と動詞の両方である場合に変数に名前を付ける方法

私は次の一般的なガイダンスでコーナーケース問題に遭遇しました:

  • 変数の名詞
  • 関数の動詞

具体的には、Wordがあいまいな場合があります。動詞またはのいずれかです。名詞。また、アプリケーションについて説明する場合、同じ文で両方使用されます。

私の意図は、数か月後にコードのセクションに戻ったときに、プログラムが将来の開発者だけでなく私自身にも読みやすくなるようにすることです。

例の1つはbatteryです。 batteryにはchargeがあり、バッテリーをcharge()することもできます。

_Battery.Charge_とBattery.Charge(value)の両方を持つことは、将来の開発者を混乱させると思います。

現在の解決策は、これらのケースの1つまたは両方(変数と関数)に対して別のWordを選択することです。このアプローチの私の問題は、Batteryオブジェクトの変数とchargeの関数がBatteryを含む設計の議論と整合しないことです。

私の質問は、命名規則のこの競合を処理する別の/より良い方法があるかどうかです


主題に関するいくつかの追加の読書。私の質問の特定に実際に取り組んだ人はいません。

48
user53019

同様の状況で、私は同義語を見つけようとします。この場合、動詞には「recharge」を使用します。 「re-」は少し冗長ですが、意味は明らかです。物理的な単位を指定していないため、バッテリーの残量に単純な「充電」を使用することはあいまいです。 「availableAmpHours」、「hoursUntilRecharge」、または類似したものを使用します。単位は、アプリケーションに便利なものに依存します。

私の個人的な好みは、状態を変更する関数に対してのみ動詞を使用することです。非変異関数には名詞を使用します。それはあなたの視点によると思います。マシンレベルでは、非変異関数は何かを行いますが、モデルレベルでは行いません。

38
kevin cline

これを捨てるだけですが、この名前のあいまいさのインスタンスに対する解決策は、バッテリーからその機能を完全に削除することです。自己充電バッテリーを見たことがないので、BatteryChargerクラスを用意するほうが理にかなっています。これは、懸念をより分離し、アクションをより明確にするのに役立ちます。

battery.Charge(50) vs batteryCharger.Charge(battery, 50)

私にとって、2番目のフォームはより理解しやすく、すべての「充電」コードをすべてのバッテリークラス全体に散らばるのではなく、1つの場所に保持します。

20
mortalapeman

二重の意味を避ける

複数の意味を持つ単語を意図的に選択しましたが、その最初の決定が問題です。プログラマにとって問題となる単語がたくさんあります。別の例はphoneです。誰かがphoneできるし、ポケットにphoneを入れてもよい。

ゲッターとセッターを使用する

ほとんどのオブジェクトの標準的な名前は、プロパティのゲッター/設定メソッドです。

_Battery.Charge            // would be a property
Battery.setCharge(value)  // would set the property
Battery.getCharge()       // would get the property
_

プロパティは名詞ではなく状態です

オブジェクトのプロパティを名詞として分類することは間違いだと思います。変数は状態と考えることもできます。それらは、その存在のローカルな範囲に関連する州です。

彼らが持つ価値を名詞として説明することもできますが、それがすべての場合に当てはまるかどうかはわかりません。

OOP用語では、オブジェクトのプロパティはそのオブジェクトの状態を説明しています。あなたの場合、Batteryはオブジェクトであり、Chargeは状態です。したがって、オブジェクトのプロパティであるが、これはそれがどのように使用されるかのコンテキストに依存する。

バッテリーをChargeできるようにする必要があり、それが現在のChargeであることがわかっている場合は、問題があります。

スコープを使用してコンテキストを適用する

コンテキストとは、メソッドまたはプロパティで伝えたいWordの意味を明確にするものです。スコープは、オブジェクトの外部からのプロパティ/メソッドのアクセシビリティの設定です。

_Batter._charge            // a hidden private property
Battery.setCharge(value)  // would set the private property
Battery.getCharge()       // would get the private property
Battery.Charge()          // would perform the Charge action
_

メソッドは動詞

オブジェクトのメソッドを動詞として説明できますが、Wordアクションの方が適しています。 OOP用語では、メソッドを使用してオブジェクトに対してアクションを実行します。オブジェクトのプロパティをオブジェクトの外部から変更するのは不適切です。状態を変化させるために必要なアクションを実行するメソッドを呼び出すことをお勧めします変化する。

単語Chargeは動詞ですが、名詞でもあります。アクションのメソッドの呼び出しに使用すると、動詞が使用されていることが明確になりますBattery.Charge(....)

しかし、コンテキストは非常に重要です。 Word Charge()は動詞ですが、startCharging()ほど意味がありません。

Batteryの有効なメソッドには、ChargingDischargingsetChargegetChargehasChargeDischargeおよびCharged

単純な1つのWordメソッドは、多くの場合、アクションを明示的に明示していませんが、opencloseのように、説明がほとんど必要ない場合があります。

したがって、これらのタイプのプロパティ/メソッドに名前を付ける方法については、正解はありません。ただし、混乱を避けるために、上記の手法を賢く使用する必要があります。

9
Reactgular

それらを動詞または名詞にする動詞を前に付けます。

Battery.doCharge()

Battery.getCharge()
6
Jürgen Paul

動詞の場合、Chargeは問題ないと思います。名詞の場合、getCurrentChargeLevelは役に立ちますか?

ほとんどの場合、補助動詞、副詞、または形容詞を追加することで、それらを区別するのに十分であり、実際に理解を助けることができます。バッテリのChargeおよびCharge()の場合、DeltaCharge()は、それが充電または放電のいずれかを処理できる関数であることを示すことができます。

デルタ(変更があるがあいまいな場合)は、状態の変更を処理するために常に使用し、他の人に推奨する修飾子です(動詞が半自明であっても)。

0
Jeff Langemeier

救助へのハンガリー記法。 intChargefcnCharge(value)を使用できるので、混乱を避け、3文字がうまく機能する場合に狂った長い名前を追加しないでください。

または、同じ名前を使用して、IDEで処理することもできます。長い名前や異なる名前を作成することは、長期的には混乱を招く可能性があります。

0
Ryathal