変数と定数を使用する
変数と定数を使用する
"変数" は、コンピュータのメモリ内で数値やテキスト文字列などのデータを格納する記憶領域に名前を付けたものです。変数に格納されているデータは、変数の "値" と呼ばれます。変数を使うと、名前を使って値を格納、取得、または操作できるため、スクリプトが実行する内容をわかりやすくすることができます。
変数を宣言して名前を付ける
変数の宣言と名前付けについては、使用するスクリプト言語の規則とガイドラインに従ってください。変数を使用する前に宣言する必要がない場合でも、必ず変数を宣言するように習慣付けておくと、エラーの発生を未然に防ぐことができます。変数の "宣言" とは、スクリプト内で変数への参照を使用できるように、特定の名前を持つ変数が存在することをスクリプト エンジンに知らせることを意味します。
VBScript
VBScript では変数を宣言する必要はありませんが、使用する前にすべての変数を宣言することをお勧めします。VBScript で変数を宣言するには、Dim、Public、または Private ステートメントを使用します。次に例を示します。
<% Dim UserName %>
.asp ファイルで VBScript の Option Explicit ステートメントを使用すると、Dim、 Private、Public、および ReDim ステートメントを使用した変数の明示的な宣言を強制することができます。Option Explicit ステートメントは、ASP ディレクティブ (存在する場合) の後で、かつ HTML テキストまたはスクリプト コマンドよりも前に記述する必要があります。このステートメントによって影響を受けるのは、VBScript で記述された ASP コマンドのみです。JScript コマンドは、このステートメントの影響を受けません。
<% Option Explicit %>
<HTML>
<%
Dim strUserName
Public lngAccountNumber
%>
.
.
.
コマンドの詳細については、Microsoft Windows Script Technologies の Web サイト https://www.microsoft.com/japan/developer/scripting/default.htm の「VBScript ランゲージ リファレンス」を参照してください。
JScript
通常、JScript では変数を宣言する必要はありませんが、使用する前にすべての変数を宣言することをお勧めします。変数を宣言するには、var ステートメントを使用します。次に例を示します。
<% var UserName %>
通常 JScript で変数を宣言する必要があるのは、関数内の変数と、その関数の外部で使用されている "グローバル" 変数を区別する必要がある場合のみです。この場合、2 つの変数を区別しないと、グローバル変数のみを参照していると JScript は見なします。var ステートメントの詳細については、「JScript ランゲージ リファレンス」を参照してください。このリファレンスは、Microsoft Windows Script Technologies の Web サイト https://www.microsoft.com/japan/developer/scripting/default.htm にあります。
変数のスコープ
どのスクリプト コマンドから変数にアクセスできるかは、変数の "スコープ" (寿命) によって決まります。プロシージャ内部で宣言された変数は "ローカル スコープ" を持ち、プロシージャが実行されるたびに作成されて破棄される変数になります。この変数には、プロシージャの外側からはアクセスできません。プロシージャの外部で宣言された変数は "グローバル スコープ" を持ち、ASP ページ上の任意のスクリプト コマンドからその値にアクセスし、変更することができます。
注 変数のスコープをプロシージャに限定すると、パフォーマンスが向上します。
変数を宣言する場合、ローカル変数とグローバル変数に同じ名前を付けることができます。この場合、一方の変数の値を変更しても、もう一方の値は影響を受けません。しかし、変数の宣言を行っていない場合は、グローバル変数の値を不用意に変更してしまう場合があります。たとえば、次の例では Y という名前の変数が 2 つありますが、このスクリプト コマンドは 1 を返します。
<%
Option Explicit
Dim Y
Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Dim Y
Y = 2
End Sub
%>
一方、次のスクリプト コマンドは、変数が明示的に宣言されていないために 2 を返します。これは、プロシージャ呼び出しで Y に 2 を設定するとき、スクリプト エンジンがグローバル変数の値を変更するものとして処理するためです。
<%
Option Explicit
Dim Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Y = 2
End Sub
%>
このような問題の発生を避けるために、変数は必ず宣言してから使用することをお勧めします。変数の宣言は、#include ステートメントを使って .asp ページにファイルをインクルードするときは特に重要です。インクルードされるスクリプトは別のファイルに含まれていますが、これらのスクリプトはインクルードする側のファイルの一部として扱われます。このため、変数を宣言しておかないと、メイン スクリプトで使用する変数とインクルードされるスクリプトで使用する変数に異なる名前が付いているかどうかを確認することが困難になります。
変数にセッション スコープまたはアプリケーション スコープを与える
グローバル変数は、1 つの .asp ページでのみアクセスできます。複数のページで変数にアクセスできるようにするには、変数にセッション スコープまたはアプリケーション スコープを与える必要があります。セッション スコープを持つ変数は、ある特定のユーザーに要求された 1 つの ASP アプリケーション内のすべてのページで利用できます。アプリケーション スコープを持つ変数は、任意のユーザーに要求された1 つの ASP アプリケーション内のすべてのページで利用できます。セッション変数は、ユーザー設定、ユーザー名、ユーザーの識別など、ユーザーごとの情報を格納する場合に便利です。アプリケーション変数は、アプリケーション固有のメッセージ、アプリケーションで必要になる一般的な値など、あるアプリケーションのすべてのユーザーに共通する情報を格納する場合に便利です。
ASP では、変数を格納できる組み込みオブジェクトとして Session オブジェクトと Application オブジェクトの 2 つのオブジェクトを提供しています。
セッション スコープまたはアプリケーション スコープを持つオブジェクトのインスタンスを作成することもできます。詳細については、「オブジェクトのスコープを設定する」を参照してください。
セッション スコープ
変数にセッション スコープを与えるには、Session オブジェクトの名前付きエントリに値を割り当てて、Session オブジェクトに変数を格納します。たとえば、次のコマンドは、2 つの新しい変数を Session オブジェクトに格納します。
<%
Session("FirstName") = "Jeff"
Session("LastName") = "Smith"
%>
Session オブジェクトから情報を取得するには、出力ディレクティブ (<%=
) または Response.Write を使用して、オブジェクト内の名前付きエントリにアクセスします。次の例は、出力ディレクティブを使用して Session("FirstName") の現在の値を表示します。
Welcome <%= Session("FirstName") %>
ユーザーの設定を Session オブジェクトに格納しておくと、格納した設定に後からアクセスして、どのページをユーザーに返すかを決定することができます。たとえば、アプリケーションの最初のページで、ユーザーがテキスト専用バージョンのコンテンツを指定できるようにしておけば、この設定を、アプリケーション内でユーザーが引き続き利用するすべてのページに対して適用することができます。
<%
strScreenResolution = Session("ScreenResolution")
If strScreenResolution = "Low" Then
%>
This is the text version of the page.
<% Else %>
This is the multimedia version of the page.
<% End If %>
注 スクリプトで繰り返しセッション スコープを持つ変数を参照する場合は、既に例を挙げて説明したように、その変数をローカル変数に割り当てるとパフォーマンスが向上します。
アプリケーション スコープ
変数にアプリケーション スコープを与えるには、Application オブジェクトの名前付きエントリに値を割り当てて、Application オブジェクトに変数を格納します。たとえば、次のコマンドは、アプリケーション固有のメッセージを Application オブジェクトに格納します。
<% Application("Greeting") = "Welcome to the Sales Department!" %>
Application オブジェクトから情報を取得する場合は、ASP の出力ディレクティブ (<%=
) または Response.Write を使用すると、アプリケーション内の後続の任意のページから名前付きエントリにアクセスできます。次の例は、出力ディレクティブを使用して Application("Greeting") の値を表示します。
<%= Application("Greeting") %>
また、スクリプトで繰り返しアプリケーション スコープを持つ変数を参照する場合は、その変数をローカル変数に割り当てるとパフォーマンスが向上します。
定数を使用する
"定数" とは、数値や文字列に代わる役割を果たす名前のことです。ActiveX Data Objects (ADO) など、ASP に付属する一部の基本コンポーネントでは、スクリプトで使用できる定数が定義されています。コンポーネントは、"コンポーネント タイプ ライブラリ" で定数を宣言できます。コンポーネント タイプ ライブラリとは、COM コンポーネントによってサポートされるオブジェクトと型についての情報が格納されているファイルのことです。.asp ファイルでタイプ ライブラリを宣言すると、同じ .asp ファイル内の任意のスクリプトで定義済み定数を使用できます。同様に、Global.asa ファイルの中でタイプ ライブラリを宣言すると、アプリケーション内の任意の .asp ファイルで定義済み定数を使用できます。
タイプ ライブラリを宣言するには、.asp ファイルまたは Global.asa ファイルで <METADATA> タグを使用します。たとえば、ADO タイプ ライブラリを宣言するには、次のステートメントを使用します。
<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
または、タイプ ライブラリの汎用一意識別子 (UUID) を参照せずに、ファイル パスでタイプ ライブラリを参照することもできます。
<!-- METADATA TYPE="typelib" FILE="c:\program files\common files\system\ado\msado15.dll"-->
このように宣言した後は、タイプ ライブラリを宣言した .asp ファイルや、ADO タイプ ライブラリ宣言をした Global.asa ファイルが含まれているアプリケーションに常駐する .asp ファイルで、ADO 定数を使用できます。次の例では、adOpenKeyset
および adLockOptimistic
が ADO 定数です。
<%
'Create and Open Recordset Object.
Set rstCustomerList = Server.CreateObject("ADODB.Recordset")
rstCustomerList.ActiveConnection = cnnPubs
rstCustomerList.CursorType = adOpenKeyset
rstCustomerList.LockType = adLockOptimistic
%>
次の表は、一般に使用されるタイプ ライブラリと UUID の一覧です。
タイプ ライブラリ | UUID |
---|---|
Microsoft ActiveX Data Objects 2.5 Library | {00000205-0000-0010-8000-00AA006D2EA4} |
Microsoft CDO 1.2 Library for Windows 2000 Server | {0E064ADD-9D99-11D0-ABE5-00AA0064D470} |
MSWC Advertisement Rotator Object Library | {090ACFA1-1580-11D1-8AC0-00C0F00910F9} |
MSWC IIS Log Object Library | {B758F2F9-A3D6-11D1-8B9C-080009DCC2FA} |
<METADATA> タグのリファレンス情報については、「TypeLibrary 宣言」を参照してください。
以前のバージョンの ASP では、いくつかのコンポーネントが定数を定義したファイルを提供していました。このファイルは、これらの定数を使用する各 ASP ファイルでインクルードする必要がありました。#include ディレクティブを使用した定数定義のインクルードは引き続きサポートされますが、タイプ ライブラリの方が一般により使いやすく、スクリプトのアップグレードも容易です。ASP の将来のリリースでは、コンポーネントによる定数定義ファイルの提供は行われない可能性があります。
注 #include ディレクティブより <METADATA> タグを使用した方が、Web アプリケーションのパフォーマンスが向上する可能性があります。
独自の定数を定義することもできます。独自の定数を定義するには、VBScript では Const ステートメントを使用します。JScript では var ステートメントを使用し、定数値を変数に割り当てます。複数の .asp ファイルで定数を使用する場合は、定数の定義を別ファイルに記述し、このファイルを、定数を使用する各 .asp ファイルにインクルードします。