私は次の一般的なガイダンスでコーナーケース問題に遭遇しました:
具体的には、Wordがあいまいな場合があります。動詞またはのいずれかです。名詞。また、アプリケーションについて説明する場合、同じ文で両方使用されます。
私の意図は、数か月後にコードのセクションに戻ったときに、プログラムが将来の開発者だけでなく私自身にも読みやすくなるようにすることです。
例の1つはbattery
です。 battery
にはcharge
があり、バッテリーをcharge()
することもできます。
_Battery.Charge
_とBattery.Charge(value)
の両方を持つことは、将来の開発者を混乱させると思います。
現在の解決策は、これらのケースの1つまたは両方(変数と関数)に対して別のWordを選択することです。このアプローチの私の問題は、Battery
オブジェクトの変数とcharge
の関数がBattery
を含む設計の議論と整合しないことです。
私の質問は、命名規則のこの競合を処理する別の/より良い方法があるかどうかです
主題に関するいくつかの追加の読書。私の質問の特定に実際に取り組んだ人はいません。
同様の状況で、私は同義語を見つけようとします。この場合、動詞には「recharge」を使用します。 「re-」は少し冗長ですが、意味は明らかです。物理的な単位を指定していないため、バッテリーの残量に単純な「充電」を使用することはあいまいです。 「availableAmpHours」、「hoursUntilRecharge」、または類似したものを使用します。単位は、アプリケーションに便利なものに依存します。
私の個人的な好みは、状態を変更する関数に対してのみ動詞を使用することです。非変異関数には名詞を使用します。それはあなたの視点によると思います。マシンレベルでは、非変異関数は何かを行いますが、モデルレベルでは行いません。
これを捨てるだけですが、この名前のあいまいさのインスタンスに対する解決策は、バッテリーからその機能を完全に削除することです。自己充電バッテリーを見たことがないので、BatteryChargerクラスを用意するほうが理にかなっています。これは、懸念をより分離し、アクションをより明確にするのに役立ちます。
battery.Charge(50)
vs batteryCharger.Charge(battery, 50)
私にとって、2番目のフォームはより理解しやすく、すべての「充電」コードをすべてのバッテリークラス全体に散らばるのではなく、1つの場所に保持します。
複数の意味を持つ単語を意図的に選択しましたが、その最初の決定が問題です。プログラマにとって問題となる単語がたくさんあります。別の例は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
の有効なメソッドには、Charging
、Discharging
、setCharge
、getCharge
、hasCharge
、Discharge
およびCharged
。
単純な1つのWordメソッドは、多くの場合、アクションを明示的に明示していませんが、open
やclose
のように、説明がほとんど必要ない場合があります。
したがって、これらのタイプのプロパティ/メソッドに名前を付ける方法については、正解はありません。ただし、混乱を避けるために、上記の手法を賢く使用する必要があります。
それらを動詞または名詞にする動詞を前に付けます。
Battery.doCharge()
Battery.getCharge()
動詞の場合、Charge
は問題ないと思います。名詞の場合、getCurrentChargeLevel
は役に立ちますか?
ほとんどの場合、補助動詞、副詞、または形容詞を追加することで、それらを区別するのに十分であり、実際に理解を助けることができます。バッテリのChargeおよびCharge()の場合、DeltaCharge()は、それが充電または放電のいずれかを処理できる関数であることを示すことができます。
デルタ(変更があるがあいまいな場合)は、状態の変更を処理するために常に使用し、他の人に推奨する修飾子です(動詞が半自明であっても)。
救助へのハンガリー記法。 intCharge
とfcnCharge(value)
を使用できるので、混乱を避け、3文字がうまく機能する場合に狂った長い名前を追加しないでください。
または、同じ名前を使用して、IDEで処理することもできます。長い名前や異なる名前を作成することは、長期的には混乱を招く可能性があります。