読者です 読者をやめる 読者になる 読者になる

浜村拓夫(・∀・)作品集

頭の中にあるイメージを表現できるデザイン力が欲しいです(><)

iOS SDKのプレフィックス一覧表

iOSアプリの作り方を学ぶために、Swiftの入門書を一通り読み終えました。

 

hamamuratakuo.hatenablog.com

 

1巡目を読み終えたところで、理解できた所と、理解できなかった所が明確になりました。

2巡目以降は、理解できなかった所を調べて、不明点を解消していきます。

 

1巡目で出てきた素朴な疑問について、調べたのでメモ。

 

iOS SDKのプレフィックス命名則

iOS SDKで予め用意されているフレームワーク、クラスの名前で、「NS」とか「UI」などのプレフィックス(接頭辞)をよく目にします。

 

NSUserDefaults

UIViewController

 

・これらのプレフィックスの役割は、一体何なのか?(Apple式のハンガリアン記法

・これらのプレフィックスは、どのような規則で組み立てられているのか?(命名則)

という素朴な疑問が生じました。

 

ハンガリアン記法 - Wikipedia

ハンガリアン記法(Hungarian notation)あるいはハンガリー記法(ハンガリーきほう)とは、プログラマがプログラムのソースコードを書く際に変数名やクラス名などの識別子に特別な接頭文字ないし接尾文字をつけることで、他の人がその識別子を見たときに識別子の使用方法・データ型情報・スコープなどが分かるようにするための命名法である。
ハンガリアン記法という名称は考案者チャールズ・シモニーがハンガリー出身であることに由来する。

 

アプリケーションハンガリアン

アプリケーションハンガリアンは、間違えたコードを間違えて見えるようにする記法である。
たとえば、相対座標にRelative Positionのrp、絶対座標にAbsolute Positionのapという接頭辞を付けることにした場合、ウィンドウの位置を設定する window.SetPosition(rpX, apY); のような記述は誤りであることが明確に分かる。
また、ドルの接頭辞を dol、円の接頭辞を yenとした場合、dolIncome + yenDeposit のような計算は間違いであることが明確である。
このように、間違っているコードが間違っていると分かるようにするための記法が本来のハンガリアン記法である。

 

Appleの公式ドキュメントに、疑問の答えがありました。

iOS SDKで提供されている各種フレームワークのプレフィックス一覧表がありました。

 

(参考)英語

developer.apple.com

 

このWebページの「Table A-1 Device frameworks」に、Prefixesの一覧がありました。

 

(参考)日本語

日本語ドキュメント - Apple Developer

iOSテクノロジーの概要」

https://developer.apple.com/jp/documentation/iOSTechOverview.pdf

 

この「iOSテクノロジーの概要」というPDFファイルのp.58に「iOSフレームワーク」という項目があり、その中の「表 A-1 デバイスのフレームワーク」に、「プレフィックス」の一覧がありました。

 

(例)p.60

変数名 CloudKit.framework

最初のリリース 8.0

プレフィックス CK

解説 iCloudデータを取得、保存する、Objective-Cインターフェイスが含まれています。

 

「CK」というプレフィックスがついていたら、「CloudKit」関係の機能だと分かるように名前を付けてあるんですね?

 

iOSテクノロジーの概要」p.58

これらのフレームワークは、iOSプラットフォーム用にソフトウェアを記述するために必要なインターフェイスを提供します。

該当する場合は、フレームワークのクラス、メソッド、関数、型、または定数で使われる主要なプレフィックスを掲載しました。

独自のコードには、ここに指定されているプレフィックスの使用は避ける必要があります。

 

Appleが決めたプレフィックスは「予約語」になるので、開発者が独自にプレフィックスを用意する場合は、重複しないように避ける必要があるんですね。

 

●まとめ

iOSミドルウェアの構造は、

Cocoa Touch」

「Media」

「Core Services」

「Core OS」

という4階層で積み重ねられています。

 

f:id:hamamuratakuo:20161121022125j:plain

 

・各層の機能(フレームワーク)を利用するとき、各層で用意されている既存のクラスを使う。

・各クラスには「UI」「NS」等の接頭辞が付けてある=Objective-Cには名前空間がないため接頭辞で分類している。

 

ynumerator.blogspot.jp

名前空間はない

C++Javaのように名前空間はありません。NSとか接頭語がついているのもそのためです。

 

www.atmarkit.co.jp

 

「NS~」から始まるクラス(NSMutableArray、NSDictionaryなど)は、Foundationフレームワークが提供するクラスであり、「UI~」から始まるクラス(UIViewControllerなど)は、UIKitフレームワークが提供するクラスです。

 

・「NS」=NEXTSTEPに由来(「Cocoa」に含まれる。NEXTSTEPMac用に改変)

・「UI」=UIKitに由来(「Cocoa Touch」に含まれる。CocoaiOS用に改変)