kaisehのブログ このページをアンテナに追加

2008-06-29

Cocoaで最も名前が長いメソッドベスト10

ここのところObjective-Cを勉強中なんですが、まず最初にびっくりしたのがメソッド名の長さです。

Objective-Cでは、メソッドの呼び出し時に引数の名前を明示するので、「このメソッドの2番目の引数は何の意味だっけ?」などと悩む必要がなくなる反面、メソッド名が「動詞+前置詞+名詞1:名詞2:名詞3...」のような構成になって、ものすごく長くなります。

一番長いメソッドは何文字あるのか好奇心が湧いてきたので、Cocoaのリファレンスに載っているクラスを対象に調べてみました。

まず、メソッド全体の長さベスト10です。

第1位

initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:
samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:
bytesPerRow:bitsPerPixel:
文字数: 148
所属クラス: NSBitmapImageRep

※あまりに長いので改行してますが、"initWithBitmapDataPlanes:"から"bitsPerPixel:"までが1つのメソッドです。以降も同様です。

第2位

getLineFragmentRect:usedRect:remainingRect:forStartingGlyphAtIndex:
proposedRect:lineSpacing:paragraphSpacingBefore:paragraphSpacingAfter:
文字数: 137
所属クラス: NSTypesetter

第3位

initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:
samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:
文字数: 135
所属クラス: NSBitmapImageRep

第4位

keyEventWithType:location:modifierFlags:timestamp:windowNumber:
context:characters:charactersIgnoringModifiers:isARepeat:keyCode:
文字数: 128
所属クラス: NSEvent

第5位

drawStrikethroughForGlyphRange:strikethroughType:baselineOffset:
lineFragmentRect:lineFragmentGlyphRange:containerOrigin:
文字数: 120
所属クラス: NSLayoutManager

第6位

decimalNumberHandlerWithRoundingMode:scale:raiseOnExactness:
raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:
文字数: 113
所属クラス: NSDecimalNumberHandler

enterExitEventWithType:location:modifierFlags:timestamp:
windowNumber:context:eventNumber:trackingNumber:userData:
文字数: 113
所属クラス: NSEvent

第8位

drawUnderlineForGlyphRange:underlineType:baselineOffset:
lineFragmentRect:lineFragmentGlyphRange:containerOrigin:
文字数: 112
所属クラス: NSLayoutManager

第9位

getLineFragmentInsertionPointsForCharacterAtIndex:alternatePositions:
inDisplayOrder:positions:characterIndexes:
文字数: 111
所属クラス: NSLayoutManager

第10位

mouseEventWithType:location:modifierFlags:timestamp:windowNumber:
context:eventNumber:clickCount:pressure:
文字数: 105
所属クラス: NSEvent

次に、メソッド名から2番目以降のメッセージキーワードを除いた部分(最初の":"まで)の長さのベスト10を調べてみました。

第1位

shouldBreakLineByHyphenatingBeforeCharacterAtIndex
文字数: 50
所属クラス: NSTypesetter, NSATSTypesetter

第2位

enterQTKitOnThreadDisablingThreadSafetyProtection
文字数: 49
所属クラス: QTMovie

getLineFragmentInsertionPointsForCharacterAtIndex
文字数: 49
所属クラス: NSLayoutManager

invalidateGlyphsOnLayoutInvalidationForGlyphRange
文字数: 49
所属クラス: NSLayoutManager

setCurrentAppleEventAndReplyEventWithSuspensionID
文字数: 49
所属クラス: NSAppleEventManager

第6位

glyphRangeForBoundingRectWithoutAdditionalLayout
文字数: 48
所属クラス: NSLayoutManager

第7位

applicationShouldTerminateAfterLastWindowClosed
文字数: 47
所属クラス: NSApplication

第8位

prepareToPullChangesInBackgroundForEntityNames
文字数: 46
所属クラス: ISyncSession

第9位

acceptConnectionInBackgroundAndNotifyForModes
文字数: 45
所属クラス: NSFileHandle

autorecalculatesContentBorderThicknessForEdge
文字数: 45
所属クラス: NSWindow

clientCommittedAcceptedChangesWithNextAnchors
文字数: 45
所属クラス: ISyncSession

pneumonoultramicroscopicsilicovolcanoconiosis(45文字)も真っ青の長さです。これを暗記できる人がいたらすごい。Xcodeのコード補完が無かった時代はどうやって入力していたんでしょうか…。

ほげほげくんほげほげくん 2008/07/01 09:22 Cocoaもそうですが、WebObjects(WOF、EOF)というJavaのフレームワークもメソッドの長さは他と比較すると長いものが多いです。CocoaやWOFなどApple(もとはNEXTか)のフレームワークは、単語や文脈でそれらを”感じて”プログラミングをしていくというニュータイプ的な素養が必要だなと使っていて思いました(w

kaisehkaiseh 2008/07/01 16:45 コメントありがとうございます。
> 単語や文脈でそれらを”感じて”プログラミングをしていくというニュータイプ的な素養
なるほど、興味深いですね。

mswarmswar 2010/01/26 23:52 確かに長いですが、実際に使う場面ではコード補完(いくつかある候補から選択)のおかげでそれほど困った試しはないですね〜。

むしろ、メソッド名自体がコメント的な役割を果たしてくれる分、リファレンス引く機会は他のフレームワークとかに比べて減ったかも。

あと、引数は省略可能で必要な引数だけ入れていけばいいので、一番長いってされてる例でも実際は↓程度な感じですんだり。。。引数の順序じゃなく、引数名(高さとか幅)で直接指定できるのもコード眺める際には便利。

[nsbmp initWithBitmapDataPlanes: NULL
pixelsWide: 320
pixelsHigh: 240
bitsPerPixel: 24
];

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kaiseh/20080629/1214716829