.NET Framework に設計を学ぶ : bool を返すメソッドとプロパティの接頭辞
id:siokoshou:20090817#p1 のつづきです。.NET Framework を調べて、名前付け/設計の参考にしてしまおうというシリーズの2回目です。今回は bool を返すメソッドとプロパティの接頭辞を調べてみました。
Top30
Top は Is で bool を返すメソッドとプロパティ全体の 26.80% を占めています。Is, Can, Contains, Has, Should あたりは納得です。いかにも bool が返ってきそうな疑問文風です。MoveNext が bool 返すのは微妙と思ってたけど、Move?↑と上がり調子で訊いてると思えば、ありに思えてきました。Try は昨日書いたように .NET では bool を返すパターンです(そうじゃないのも混じってるけど)。
ダメなのもありますね。Check はどっちが true かわからないから bool を返すメソッドの名前に使うなってよく言われますよね。実際、メソッド名を見てもさっぱりわかりません。
Get も同じ理由でダメ…と思ったけど、メソッド名を見るとわかりますね。ムム、Get は続く語句しだいではありかも。
Equals, op_Equality, op_Inequality はここに含めたところで自由に使える名前じゃないので参考になりませんが、まあとりあえず。
ほかは参考になるか微妙な感じです。
* Methods (7,918) 2122 : 26.80% : 26.80% : Is 166 : 2.10% : get_IsReadOnly 112 : 1.41% : get_IsSynchronized 48 : 0.61% : get_IsFixedSize 47 : 0.59% : IsDefaultAttribute 37 : 0.47% : get_IsAdditive 600 : 7.58% : 34.38% : Can 110 : 1.39% : CanConvertFrom 107 : 1.35% : CanConvertTo 32 : 0.40% : CanConvertFromString 32 : 0.40% : CanConvertToString 19 : 0.24% : CanBuildChannelListener 392 : 4.95% : 39.33% : Equals 391 : 4.94% : Equals 1 : 0.01% : EqualsExact 368 : 4.65% : 43.98% : Contains 289 : 3.65% : Contains 40 : 0.51% : ContainsKey 6 : 0.08% : ContainsValue 5 : 0.06% : get_ContainsGenericParameters 4 : 0.05% : ContainsAudio 211 : 2.66% : 46.64% : Has 11 : 0.14% : HasBody 10 : 0.13% : get_HasProtectionLevel 9 : 0.11% : get_HasAsymmetricKey 7 : 0.09% : get_HasHeader 6 : 0.08% : get_HasAttributes 197 : 2.49% : 49.13% : Get 24 : 0.30% : GetStandardValuesSupported 19 : 0.24% : GetStandardValuesExclusive 17 : 0.21% : GetPropertiesSupported 12 : 0.15% : GetCreateInstanceSupported 11 : 0.14% : GetBoolean 145 : 1.83% : 50.96% : Allow 15 : 0.19% : AllowWhitespaceLiterals 14 : 0.18% : get_AllowDrop 6 : 0.08% : get_AllowCookies 5 : 0.06% : get_AllowEdit 5 : 0.06% : get_AllowPaging 145 : 1.83% : 52.79% : Should 22 : 0.28% : ShouldSerializeKeyFrames 4 : 0.05% : ShouldTrace 3 : 0.04% : ShouldApplyItemContainerStyle 3 : 0.04% : ShouldSerializeBlocks 3 : 0.04% : ShouldSerializeCommandBindings 122 : 1.54% : 54.33% : Move 59 : 0.75% : MoveNext 6 : 0.08% : MovePrevious 5 : 0.06% : MoveCurrentToPosition 5 : 0.06% : MoveFocus 5 : 0.06% : MoveToAttribute 121 : 1.53% : 55.86% : Equality 121 : 1.53% : op_Equality 121 : 1.53% : 57.39% : Inequality 121 : 1.53% : op_Inequality 113 : 1.43% : 58.82% : Use 10 : 0.13% : get_UseDefaultCredentials 8 : 0.10% : get_UseDefaultWebProxy 6 : 0.08% : get_UseCompatibleTextRendering 4 : 0.05% : get_UseAccessibleHeader 4 : 0.05% : get_UseActiveDirectory 111 : 1.40% : 60.22% : Supports 10 : 0.13% : get_SupportsClientAuthentication 10 : 0.13% : get_SupportsClientWindowsIdentity 10 : 0.13% : get_SupportsServerAuthentication 5 : 0.06% : Supports 4 : 0.05% : get_SupportsEvaluate 108 : 1.36% : 61.58% : Enable 19 : 0.24% : get_EnableTheming 6 : 0.08% : get_EnablePasswordReset 6 : 0.08% : get_EnablePasswordRetrieval 5 : 0.06% : get_EnableViewState 4 : 0.05% : get_EnableCaching 97 : 1.23% : 62.81% : Auto 26 : 0.33% : get_AutoSize 10 : 0.13% : get_AutoScroll 5 : 0.06% : get_AutoFlush 5 : 0.06% : get_AutoPostBack 5 : 0.06% : get_AutoToolTip 96 : 1.21% : 64.02% : Process 18 : 0.23% : ProcessDialogKey 17 : 0.21% : ProcessMnemonic 14 : 0.18% : ProcessCmdKey 6 : 0.08% : ProcessTabKey 5 : 0.06% : ProcessKeyPreview 94 : 1.19% : 65.21% : Show 5 : 0.06% : get_ShowHeader 5 : 0.06% : get_ShowHelp 4 : 0.05% : get_ShowItemToolTips 3 : 0.04% : get_ShowFooter 3 : 0.04% : get_ShowInTaskbar 93 : 1.17% : 66.38% : Remove 67 : 0.85% : Remove 9 : 0.11% : RemoveAccessRule 9 : 0.11% : RemoveAuditRule 1 : 0.01% : get_RemoveFromJournal 1 : 0.01% : get_RemoveFromStore 77 : 0.97% : 67.35% : Try 17 : 0.21% : TryParse 14 : 0.18% : TryGetValue 8 : 0.10% : TryTransform 5 : 0.06% : TryAdd 3 : 0.04% : TryLookup 68 : 0.86% : 68.21% : Freeze 67 : 0.85% : FreezeCore 1 : 0.01% : Freeze 61 : 0.77% : 68.98% : Enabled 61 : 0.77% : get_Enabled 58 : 0.73% : 69.71% : On 30 : 0.38% : OnBubbleEvent 6 : 0.08% : OnDeserializeUnrecognizedElement 4 : 0.05% : OnStyleAttributeRender 3 : 0.04% : OnAttributeRender 3 : 0.04% : OnTagRender 50 : 0.63% : 70.35% : Read 24 : 0.30% : get_ReadOnly 10 : 0.13% : Read 4 : 0.05% : ReadAttributeValue 2 : 0.03% : get_ReadOnlyChecked 2 : 0.03% : ReadElementContentAsBoolean 47 : 0.59% : 70.94% : Check 10 : 0.13% : Check 4 : 0.05% : CheckAccess 3 : 0.04% : get_CheckFileExists 3 : 0.04% : get_CheckOnClick 2 : 0.03% : get_CheckBoxes 44 : 0.56% : 71.50% : Visible 43 : 0.54% : get_Visible 1 : 0.01% : get_VisibleWhenLoggedIn 40 : 0.51% : 72.00% : Requires 6 : 0.08% : get_RequiresQuestionAndAnswer 5 : 0.06% : get_RequiresFormTag 5 : 0.06% : get_RequiresUniqueEmail 4 : 0.05% : get_RequiresDataBinding 2 : 0.03% : get_RequiresNoBreakInFormatting 40 : 0.51% : 72.51% : Stylistic 2 : 0.03% : get_StylisticSet1 2 : 0.03% : get_StylisticSet10 2 : 0.03% : get_StylisticSet11 2 : 0.03% : get_StylisticSet12 2 : 0.03% : get_StylisticSet13 37 : 0.47% : 72.97% : Load 31 : 0.39% : LoadPostData 1 : 0.01% : get_LoadRequired 1 : 0.01% : get_LoadRoles 1 : 0.01% : get_LoadScriptsBeforeUI 1 : 0.01% : get_LoadUserProfile 28 : 0.35% : 73.33% : Include 7 : 0.09% : get_IncludeExceptionDetailInFaults 6 : 0.08% : get_IncludeWindowsGroups 3 : 0.04% : get_IncludeNoneAsStandardValue 2 : 0.03% : get_IncludeHostNameInComparison 2 : 0.03% : get_IncludeInSchema 26 : 0.33% : 73.65% : Mouse 5 : 0.06% : MouseDownUnsharesRow 5 : 0.06% : MouseLeaveUnsharesRow 5 : 0.06% : MouseUpUnsharesRow 4 : 0.05% : MouseEnterUnsharesRow 2 : 0.03% : MouseMoveUnsharesRow
ソースコード
昨日のソースコードの「このあたりをいじるといろいろ分析できる」とコメントがある部分を差し替えただけです。
type.GetMethods( BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic ) .Where( m => !m.IsAssembly && !m.IsPrivate ) // internal, private を取り除く .Where( m => m.ReturnType == typeof( bool ) ) .Select( m => m.Name ) .Distinct()
接頭辞30個だけで全体の7割をカバーするってのはおもしろいですね。昨日のメソッド名でも30個で7割でした。
そして、早くもネタ切れです。あとは小ネタをちょっと思いつくだけだったり。誰か違う視点で参考になりそうな調査をしてくれるとうれしいです。