CodingGuideLine for Cocoa
               を(なんとなく)読んでみた

                      沖田@tmokita




12年11月17日土曜日
参考
               •   原文
                   http://developer.apple.com/mac/library/
                   documentation/Cocoa/Conceptual/
                   CodingGuidelines/CodingGuidelines.html
                   (またはCodingGuidelines.pdf)

               •   日本語訳を公開してくれているサイト
                   http://park15.wakwak.com/~concordia/
                   cocoa_break/
                   http://potting.syuriken.jp/



12年11月17日土曜日
C/C++の命名規則例
               •   メンバ変数に「m」や「_」

               •   global変数に「g」

               •   static変数に「s」

               •   static関数に「_」

               •   Boolを返すのは「is∼」「can∼」

               •   動詞で始まる

               •   アクセサは「set∼」「get∼」

               •   クラス名は「C∼」

               •   ポインタは「p」




12年11月17日土曜日
前まとめ
               •   8割位
                   「あぁそうですか」
                   「まぁそうだよね」

               •   1割くらい
                   「あぁ、そういうことでしたか」

               •   1割くらい
                   すいません、よくわかりませんでした
                   (For Framework Developer とかそのへん)


12年11月17日土曜日
以上



12年11月17日土曜日
だとあんまりなので



12年11月17日土曜日
Code Naming Basics



12年11月17日土曜日
General Principal
               • Clarity
                 曖昧にしないではっきりと

               • Consistency
                 一貫性をもって

               • No Self Reference
                 余計な説明はいらない


12年11月17日土曜日
Prefix

               • 2∼3文字で
               • クラス、プロトコル、関数、定数、
                 typedef、につける

               • ClasssMethod, InstanceMethod
                 にはいらない



12年11月17日土曜日
Typographic
                    Conventions

               • キャメルケースで
               • 関連するPrefixをつける


12年11月17日土曜日
Class and Protocol
                      Names

               • 目的が明らかな名前をつける
               • プロトコルは
                「動名詞」(~ing)をつかう




12年11月17日土曜日
Header Files
               • ごちゃまぜにしない
               • 関連クラスやプロトコルはまとめる
               • Frameworkは同名の.hを含める
               • 拡張する場合は元の名前に追加する
               • 関連するデータ型はまとめておく
12年11月17日土曜日
Naming Methods



12年11月17日土曜日
General Rules
               •   キャメルケースで

               •   余計なことは書かない

               •   引数の宣言をちゃんと書く

               •   引数の前に引数の説明がくるように

               •   拡張する場合は元の引数の後ろに追加

               •   「and」はつかわない

               •   if the method describe two separate actions , use “and” to link
                   them.



12年11月17日土曜日
Accessor Methods
               •   setter
                   -(void)setColor:(NSColor*)aColor;
               •   getter
                   -(NSColor*)color;
                   -(BOOL)is~~~
               •   動詞を形容詞的につかわない

               •   is,can,should,をつかう
                   do,doesをつかわない

               •   複数の要素をReferenceで返すときだけ”get”をつかう



12年11月17日土曜日
Delegate Methods
               •   メッセージを
                   送っているモノの名前からはじめる

               •   引数がヒトツの場合はsenderが基本

               •   処理の結果を返す場合も引数がヒトツ
                   (の場合もある)

               •   「did」「will」で通知する

               •   確認的なものは「should」


12年11月17日土曜日
Collection Methods

               • 順番ものはNSArrayを
                 バラバラものはNSSetを返す

               • insertでretain, removeでrelease


12年11月17日土曜日
Method Arguments

               • 小文字で始まるキャメルケース
               • ポインタでもptrとか使わない
               • 1,2文字の短すぎるのも使わない
               • あまり省略しすぎない

12年11月17日土曜日
Private Methods
               • _ を頭につけないで
               • わかりやすくしたいなら
                会社名とかプロジェクト名とかつける

               • 不注意にオーバーライドしないように
                気をつけてね


12年11月17日土曜日
Naming Functions



12年11月17日土曜日
•   他の規則+α

               •   Prefixをつけるよ

               •   Prefixの後は大文字だよ

               •   動詞ではじめるよ

               •   最初の引数のPropertyを返すときは動詞は省略するよ

               •   Referenceで戻り値を受け取るときはGetだよ

               •   Bool返すときは、Isとか



12年11月17日土曜日
Naming Instance
               Variables and Data


12年11月17日土曜日
Instance Variables

               • publicなinstance変数はつくらない
               • @private @public @protected を
                 ちゃんとつける

               • わかりやすい名前をつける

12年11月17日土曜日
Constants
               •   整数で関連するグループ
                   → enum
               •   浮動小数点
                   → const
               •   その他
                   → define
               •   コンパイラは__を使ってるから注意

               •   辞書のキーとかには定数がオススメ


12年11月17日土曜日
Exceptions and
                      Notifications
               • Exception
                 [Prefix] + [UniquePartOfName] +
                 Exception
                 例外よりもエラーコードが多いよ

               • Notification
                 [Name of associated class] + [Did | Will] +
                 [UniquePartOfName] + Notification


12年11月17日土曜日
Acceptable
               Abbreviations and
                  Acronyms
                     P.25 参照




12年11月17日土曜日
Tips and Techniques for
          Framework Developers


12年11月17日土曜日
Initialization
               •   Class Initialization
                   ごめんなさい
                   これもよくわかりません

               •   Designated Initializers
                   基底クラスのinitを呼ぶイニシャライザを作ろ
                   うね

               •   Error Detection During Initialization
                   ちゃんとエラー返そうね


12年11月17日土曜日
Versioning and
                         Compatibility
               •   Framework Version
                   ドキュメントをちゃんと作ろう
                   バージョンを取得できる方法を

               •   Keyed Archiving
                   ごめんなさい
                   言ってる意味がよくわかりません

               •   互換性を保ちたかったら
                   オブジェクトのサイズにもきをつけてね


12年11月17日土曜日
Exception and Errors


               • 例外処理は強制じゃないよ
               • っつか例外はテストで潰しておいて


12年11月17日土曜日
Framework Data
               •   Constant Data
                   なるべく定数を使って小さくしようね

               •   Bitfields
                   unsignedを使った方がいいよ
                   エンディアンとか気をつけてね

               •   Memory Allocation
                   (フレームワークでは)
                   できるだけスタック使うのがいいんじゃない?


12年11月17日土曜日
Language Issues
               •   nilにメッセージを送ってもOK nilが返る

               •   必要な場合は isEqualを使う(作る)

               •   プロトコルを後から返るのは大変だから慎重に

               •   new, alloc, copy 以外はauoreleaseだよ

               •   autoreease使わない方が
                   パフォーマンスが良い場合もあるよ

               •   autorelease回避のために
                   NSDictionaryやNSArrayをつかうのもありだよ



12年11月17日土曜日
後まとめ

               • キャメルケース
               • 無駄な事は省きつつ
               • 言いたいことははっきりと


12年11月17日土曜日
• ご利用は計画的に



12年11月17日土曜日
• ありがとうございました



12年11月17日土曜日

第3回yidev coding guideline読み

  • 1.
    CodingGuideLine for Cocoa を(なんとなく)読んでみた 沖田@tmokita 12年11月17日土曜日
  • 2.
    参考 • 原文 http://developer.apple.com/mac/library/ documentation/Cocoa/Conceptual/ CodingGuidelines/CodingGuidelines.html (またはCodingGuidelines.pdf) • 日本語訳を公開してくれているサイト http://park15.wakwak.com/~concordia/ cocoa_break/ http://potting.syuriken.jp/ 12年11月17日土曜日
  • 3.
    C/C++の命名規則例 • メンバ変数に「m」や「_」 • global変数に「g」 • static変数に「s」 • static関数に「_」 • Boolを返すのは「is∼」「can∼」 • 動詞で始まる • アクセサは「set∼」「get∼」 • クラス名は「C∼」 • ポインタは「p」 12年11月17日土曜日
  • 4.
    前まとめ • 8割位 「あぁそうですか」 「まぁそうだよね」 • 1割くらい 「あぁ、そういうことでしたか」 • 1割くらい すいません、よくわかりませんでした (For Framework Developer とかそのへん) 12年11月17日土曜日
  • 5.
  • 6.
  • 7.
  • 8.
    General Principal • Clarity 曖昧にしないではっきりと • Consistency 一貫性をもって • No Self Reference 余計な説明はいらない 12年11月17日土曜日
  • 9.
    Prefix • 2∼3文字で • クラス、プロトコル、関数、定数、 typedef、につける • ClasssMethod, InstanceMethod にはいらない 12年11月17日土曜日
  • 10.
    Typographic Conventions • キャメルケースで • 関連するPrefixをつける 12年11月17日土曜日
  • 11.
    Class and Protocol Names • 目的が明らかな名前をつける • プロトコルは 「動名詞」(~ing)をつかう 12年11月17日土曜日
  • 12.
    Header Files • ごちゃまぜにしない • 関連クラスやプロトコルはまとめる • Frameworkは同名の.hを含める • 拡張する場合は元の名前に追加する • 関連するデータ型はまとめておく 12年11月17日土曜日
  • 13.
  • 14.
    General Rules • キャメルケースで • 余計なことは書かない • 引数の宣言をちゃんと書く • 引数の前に引数の説明がくるように • 拡張する場合は元の引数の後ろに追加 • 「and」はつかわない • if the method describe two separate actions , use “and” to link them. 12年11月17日土曜日
  • 15.
    Accessor Methods • setter -(void)setColor:(NSColor*)aColor; • getter -(NSColor*)color; -(BOOL)is~~~ • 動詞を形容詞的につかわない • is,can,should,をつかう do,doesをつかわない • 複数の要素をReferenceで返すときだけ”get”をつかう 12年11月17日土曜日
  • 16.
    Delegate Methods • メッセージを 送っているモノの名前からはじめる • 引数がヒトツの場合はsenderが基本 • 処理の結果を返す場合も引数がヒトツ (の場合もある) • 「did」「will」で通知する • 確認的なものは「should」 12年11月17日土曜日
  • 17.
    Collection Methods • 順番ものはNSArrayを バラバラものはNSSetを返す • insertでretain, removeでrelease 12年11月17日土曜日
  • 18.
    Method Arguments • 小文字で始まるキャメルケース • ポインタでもptrとか使わない • 1,2文字の短すぎるのも使わない • あまり省略しすぎない 12年11月17日土曜日
  • 19.
    Private Methods • _ を頭につけないで • わかりやすくしたいなら 会社名とかプロジェクト名とかつける • 不注意にオーバーライドしないように 気をつけてね 12年11月17日土曜日
  • 20.
  • 21.
    他の規則+α • Prefixをつけるよ • Prefixの後は大文字だよ • 動詞ではじめるよ • 最初の引数のPropertyを返すときは動詞は省略するよ • Referenceで戻り値を受け取るときはGetだよ • Bool返すときは、Isとか 12年11月17日土曜日
  • 22.
    Naming Instance Variables and Data 12年11月17日土曜日
  • 23.
    Instance Variables • publicなinstance変数はつくらない • @private @public @protected を ちゃんとつける • わかりやすい名前をつける 12年11月17日土曜日
  • 24.
    Constants • 整数で関連するグループ → enum • 浮動小数点 → const • その他 → define • コンパイラは__を使ってるから注意 • 辞書のキーとかには定数がオススメ 12年11月17日土曜日
  • 25.
    Exceptions and Notifications • Exception [Prefix] + [UniquePartOfName] + Exception 例外よりもエラーコードが多いよ • Notification [Name of associated class] + [Did | Will] + [UniquePartOfName] + Notification 12年11月17日土曜日
  • 26.
    Acceptable Abbreviations and Acronyms P.25 参照 12年11月17日土曜日
  • 27.
    Tips and Techniquesfor Framework Developers 12年11月17日土曜日
  • 28.
    Initialization • Class Initialization ごめんなさい これもよくわかりません • Designated Initializers 基底クラスのinitを呼ぶイニシャライザを作ろ うね • Error Detection During Initialization ちゃんとエラー返そうね 12年11月17日土曜日
  • 29.
    Versioning and Compatibility • Framework Version ドキュメントをちゃんと作ろう バージョンを取得できる方法を • Keyed Archiving ごめんなさい 言ってる意味がよくわかりません • 互換性を保ちたかったら オブジェクトのサイズにもきをつけてね 12年11月17日土曜日
  • 30.
    Exception and Errors • 例外処理は強制じゃないよ • っつか例外はテストで潰しておいて 12年11月17日土曜日
  • 31.
    Framework Data • Constant Data なるべく定数を使って小さくしようね • Bitfields unsignedを使った方がいいよ エンディアンとか気をつけてね • Memory Allocation (フレームワークでは) できるだけスタック使うのがいいんじゃない? 12年11月17日土曜日
  • 32.
    Language Issues • nilにメッセージを送ってもOK nilが返る • 必要な場合は isEqualを使う(作る) • プロトコルを後から返るのは大変だから慎重に • new, alloc, copy 以外はauoreleaseだよ • autoreease使わない方が パフォーマンスが良い場合もあるよ • autorelease回避のために NSDictionaryやNSArrayをつかうのもありだよ 12年11月17日土曜日
  • 33.
    後まとめ • キャメルケース • 無駄な事は省きつつ • 言いたいことははっきりと 12年11月17日土曜日
  • 34.
  • 35.