- ペアのGet / Setメソッドを何と呼びますか? それらを非対称にすることはできますか? そして、動詞Isがプロパティに使用されている場合は? Canのようなモーダル動詞があるとどうなりますか?
- Get / Setの代わりにIs / Setペアを使用できますか?
- そして、制限がある場合、これはあなたの意識的な選択または企業標準ですか?
当社では、これについて次のように記述されています(プログラマーの指示からの抜粋、「名前の形成に関する推奨事項」の一部)。
バイナリ属性メソッド
バイナリ属性を取得するメソッドの名前は、述語(はいまたはいいえで答えられる質問)でなければなりません。 ほとんどの場合、メソッド名は動詞IsまたはHasで始まる必要があります。
非バイナリ属性を取得および設定するためのメソッド
Get動詞の属性を取得するメソッドの名前に追加できます。 クラス内の属性を取得するメソッドに加えて、属性を設定するメソッドもある場合、これらのメソッドの名前はそれぞれ動詞GetとSetで始まる必要があります。
次に、主に製品シェルに関連し、約5,000のヘッダーファイルを含む約50のプロジェクトで構成される、私が開いている「任意の」ソリューションを取り上げましょう。 そして、どんな名前があるのか見てみましょう:
円グラフは、さまざまな「get」メソッドの相対的な分布を示しています。 セマンティック動詞による残りの部分:Is、Can、Has、Need、Should。 注意してください、いくつかの図は有能なPMによって作成されました。
見つかったものの分析は、Setメソッドがパラメーターを受け入れないIs / Setメソッドのペアが少数あることを示しました。 つまり デフォルト値はfalseであり、setメソッドはそれをコックします。この遷移をキャンセルすることはできません。 これは、IsFailed()/ SetFailed()にとって意味があります。 しかし、多くの場合、この制限は、プロパティロジックよりもUIの制限(ユーザーが現在実行できない)に多く従っています。
また、他の人のソリューションを検索すると、根本的に異なる分布が示されたことにも注意してください。 したがって、特定のモーダル動詞の使用は、組織の規則よりもチームの人々に関連している可能性が最も高いです。
メソッドの正しい名前は何ですか? NeedDoSomethingまたはShouldDoSomething? どのモーダル動詞を選択しますか? この質問に答えてみましょう。 そのようなメソッドが6つあることが明らかであり、それらの使用方法を以下に示します。
bool Do( Tction type, IObject* obj ) { // if( !detector.ShouldDo( type, obj ) ) { return false; } // if( !callback.MayDo( type, obj ) && !DareToDo( type ) ) { // // – , check( !detector.MustDo( type, obj ), ERR_MUST_NOT_MAY ); return false; } // foreach( executor in executors ) { if( executor.OughtToDo( type, obj ) ) { if( executor.CanDo( obj ) ) { executor.Do( obj ); } check( !detector.MustDo( type, obj ), ERR_MUST_NOT_CAN ); return false; } }; // executor check( false, ERR_EXEC_NOT_FOUND ); }