ユニット スコープ名
RAD Studio 入門 への移動
ユニット スコープ名は、RAD Studio ライブラリ群(VCL-FMX-RTL)に含まれているユニット名の先頭に付けられる接頭辞です。
つまり、ユニット、関数、クラス、メンバの名前では、以下のように、ユニット名の先頭にユニット スコープ名が付きます。
構文と説明
次のように、ユニット名の前にユニット スコープ名が付くようになりました。
<unitscope>.<unitname>. ...
たとえば、以下のように、SysUtils ユニットは System ユニット スコープの一部になりました。
System.SysUtils
また、次のように、Controls ユニットは Vcl やFMX ユニット スコープの一部になっています。Vcl.Controls
FMX.Controls
目次
ユニット スコープ名の特徴は以下のとおりです。
- ユニットを、Vcl、System、FMX などの基本グループに分類します(ユニット スコープはこの後の「ユニット スコープ」セクションで分類されています)。
- IDE を使って作成するコードの互換性を確保します。
- あいまい(複数の解釈が可能)な名前のメンバを識別します(つまり、メンバの名前が別のユニットのメンバの名前と一致したときでも、名前の解決を必ず正しく行えるようにします)。
- 通常、大文字の 1 文字で始まり、その後に小文字の文字列が続きます(たとえば、Data など)。
- 通常は 1 つの要素(たとえば DataSnap など)で構成されますが、2 つの要素で構成されるものもあります(たとえば System.Generics など)。
コンポーネント開発者は、ユニット スコープ名を追加することができます(「独自作成したコンポーネントへのユニット スコープ名の追加」で説明)。
完全修飾名にはユニット スコープ名が必要
1 つの注目すべき例外を除き、従来のコードは変更しなくても引き続き動作するはずです。1 つの例外というのは、コードそのものに含まれているスコープ付き識別子つまり修飾識別子です。完全修飾識別子名には、ユニット スコープ設定が必要になりました。つまり、(ユニット スコープを設定していない)既存のコードで修飾識別子を使用した場合は、コンパイルするのに変更が必要です。ユニット名にユニット スコープ名を付加する必要があります。
たとえば、TStream クラスの完全修飾識別子は、以前の製品リリースであれば次のように指定しました。
Classes.TStream
Classes.TStream という名前は完全修飾クラス名とは見なされません。完全修飾名はユニット スコープ設定されている、つまり、ユニット スコープ名を含んでいる必要があるからです。この場合、ユニット スコープ設定された名前つまり完全修飾名にするには、次のように、ユニット スコープ名 System を Classes ユニット名に付加する必要があります。
- Delphi では、TStream の完全修飾識別子名は次のようになります。
System.Classes.TStream
- C++ では、C++ スコープ演算子(
::
)がユニット スコープ名で使用されます。TStream クラスの完全修飾名は、C++ コードでは次のようになります。System::Classes::TStream
考えられるコードの変更: 既存のコードに修飾識別子(Classes.TStream.Seek
など)が含まれている場合は、その名前を修正して、識別子がユニット スコープ設定され完全修飾されたもの(System.Classes.TStream.Seek
など)になるようにする必要があります。
ユニット スコープ設定されたユニット名をコードで指定する方法
新規開発の場合は、アプリケーション内のユニットにユニット スコープを指定する必要があります。それには、以下のいずれかの方法を選択します。
- あらゆる場所で:
- コード全体を通して、すべてのメンバの名前を完全修飾します。アプリケーション全体を通して完全修飾名を使用しユニット スコープ名を名前に含めることで、コンパイル時間は確実に短縮されます。
- uses 句または #include 指令で:
uses
句または#include
指令で、(ユニット スコープ名とユニット名を使って)ユニット名を完全修飾します。そうすれば、コードでは、uses
句または#include
指令で(ユニット スコープを使って)完全修飾したユニットのメンバの名前については、部分修飾で済ませることができます。
- [<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスで:
- [<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスの[Delphi コンパイラ]ページの[ユニット スコープ名]オプションにユニット スコープ名を追加します。
注意: 部分修飾名を使用すると、コンパイル中にコンパイラがすべての部分修飾名を解決する必要があるため、コンパイルが著しく遅くなるおそれがあります。
RAD Studio ではユニット スコープを使用しヘルプでもユニット スコープ名を使用
RAD Studio に用意されているウィザードやテンプレートでは、適切にユニット スコープ設定されたユニット名を使用し組み込んでいます。ヘルプでは、一部のユニット名、クラス名、メンバ名に、まだユニット スコープ名が付加されていません。ただし、ライブラリのドキュメントでは、完全なユニット スコープ名がページ タイトルに示されています。
例
コードに以下が記述されている場合
uses
System.SysUtils, System.Types, System.Classes, FMX.Controls;
または
#include <System.SysUtils.hpp>
#include <System.Types.hpp>
#include <System.Classes.hpp>
#include <FMX.Controls.hpp>
コードでは、たとえば次のような修飾されていないメンバ名を指定することができます。
GetPackageInfo // referring to System.SysUtils.GetPackageInfo TRect // referring to System.Types.TRect TNotifyEvent // referring to System.Classes.TNotifyEvent TTrackBar // referring to FMX.Controls.TTrackBar
ユニット スコープ
かなりの数のユニット スコープがありますが、それらの大半はいくつかの一般的なカテゴリに分類することができます。これらの一般的なカテゴリとそれぞれのカテゴリに属するユニット スコープ名の一覧を次の表に示します。
一般的なカテゴリ | そのカテゴリに属するユニット スコープ名 |
---|---|
データベース関連 |
Bde、Data、Data.Bind、Data.Cloud、Datasnap、Datasnap.Win、IB(さらに System.Bindings) |
FireMonkey |
FMX、FMX.ASE、FMX.Bind、FMX.Canvas、FMX.DAE、FMX.Filter、FMX.Platform、FMX.Printer |
iOS |
iOSapi(RTL) |
OS X |
Macapi、Posix、System.Mac(RTL) |
システム関連(ランタイム ライブラリ) |
System、System.Bindings、System.Generics、System.Math、System.Sensors、System.Tether、System.Win |
VCL(ビジュアル コンポーネント ライブラリ) |
Vcl、Vcl.Imaging、Vcl.Samples、Vcl.Shell、Vcl.Touch |
SOAP、COM |
|
Web 関連 |
|
Windows API |
Winapi(RTL) |
XML 処理 |
Xml、Xml.Internal、Xml.Win |
- 10 個のユニット スコープが FireMonkey 関連です(FMX、FMX.ASE、FMX.Bind、FMX.Canvas、FMX.DAE、FMX.DateTimeControls、FMX.EmbeddedControls、FMX.Filter、FMX.ListView、FMX.MediaLibrary)。
- Soap ユニット スコープには COM 関連のユニットが含まれています。
- System ユニット スコープにはいくつかのユニット スコープが含まれています(System.Bindings、System.Generics、System.Math、System.Sensors、System.Tether など)。
- 4 つのユニット スコープが VCL 関連です(Vcl、Vcl.Imaging、Vcl.Samples、Vcl.Touch)。
- Xml ユニット スコープには、XML 処理に関係する 4 つのユニット(Xml.Win.msxmldom など)が含まれています。
ユニット スコープおよび各ユニット スコープに属するユニット
以下の表には次の情報が示されています。
- ヘルプに記載されているユニットの場合は、ユニット スコープへのハイパーリンクが記載されており、それをたどれば、そのユニット スコープに属するユニットを参照できます。
- ヘルプに記載されていない外部ユニットの場合は、そのユニット スコープに属するユニットの一覧が示されています。
ユニット スコープ名 | ユニット |
---|---|
Androidapi(RTL) |
AppGlue、AssetManager、AssetManagaerIni、Bitmap、Configuration、Consts、Egl、Eglext、EglPlatformGles、Gles2、Gles2ext、Glesext、Input、IOUtils、JNI.Analytics、JNI.ApkExpansion、JNI.App、JNI.Dalvik、JNI.Embarcadero、JNI.GraphicsContentViewText、JNI.Hardware、JNI.InputMethodService、JNI.JavaTypes、JNI.Licensing、JNI.Location、JNI.Media、JNI.Net、JNI.OpenGL、JNI.Os、Jni、JNI.PlayServices、JNI.Provider、JNI.Support、JNI.Telephony、JNI.Util、JNI.VideoView、JNI.WebKit、JNI.Widget、JNIBridge、JNIMarshal、Keycodes、KhrPlatform、Log、Looper、NativeActivity、NativeWindow、NativeWindowJni、Obb、OpenSles、Rect、Sensor、StorageManager |
「Data」を参照 | |
「Data.Bind」を参照 | |
「Data.Cloud」を参照 | |
「Datasnap」を参照 | |
「FMX」を参照 | |
「IBX」を参照 | |
iOSapi(RTL) |
AssetsLibrary、AVFoundation、CocoaTypes、CoreAudio、CoreData、CoreGraphics、CoreImage、CoreLocation、CoreMedia、CoreMotion、CoreTelephony、CoreText、CoreVideo、Foundation、GLKit、MediaPlayer、OpenGLES、QuartzCore、UIKit |
Macapi(RTL)(Mac Objective-C フレームワーク) |
AppKit、CocoaTypes、CoreFoundation、CoreServices、Foundation、Mach、ObjCRuntime、ObjectiveC、OCMarshal、OpenGL、QuartzCore、Security、SystemConfiguration、VarObjC |
Posix |
ArpaInet、Base、Dirent、Dlfcn、Errno、Fcntl、Fnmatch、Grp、Iconv、Langinfo、Limits、Locale、NetDB、NetIf、NetinetIcmp6、NetinetIn、NetinetIp6、Posix、Pthread、Pwd、Sched、Semaphore、Signal、StdDef、Stdio、Stdlib、String_、StrOpts、SysMman、SysSelect、SysSocket、SysStat、SysStatvfs、SysSysctl、SysTime、SysTimes、Systypes、SysUio、SysWait、Termios、Time、Unistd、Utime、Wchar、Wctype、Wordexp |
「Soap」を参照 | |
「SysInit」を参照 | |
「System」を参照 | |
「System.Win」を参照 | |
「Vcl」を参照 | |
Web featurerow="radstudio" |
「Web」を参照 |
「Winapi」を参照 | |
「Xml」を参照 |