.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割でした。

そして、早くもネタ切れです。あとは小ネタをちょっと思いつくだけだったり。誰か違う視点で参考になりそうな調査をしてくれるとうれしいです。