連載

ASP→ASP.NET移行テクニック

第3回 ASP/ASP.NETを支える周辺技術の移行

山田 祥寛
2004/06/19
Page1 Page2 Page3 Page4

 
≪今回の内容≫
 ・言語上の相違点
 ・COMコンポーネントの活用

 前回は、組み込みオブジェクトをはじめとしたレガシーASPアプリケーションの主要な構成要素に焦点を置いて、レガシーASP→ASP.NET移行におけるポイントを詳説した。これで、移行の全体像がかなり見えてきたのではないかと思う。

 連載最終回となる今回は、レガシーASP/ASP .NETで使用される言語上の相違点、そして、レガシーASPにおいてビジネス・ロジック抽象化の主体的な役割を担っていたCOM(Component Object Model)の移行について説明していくことにしよう。

言語上の相違点

 ASP.NETでは、レガシーASPにおいてデフォルトの言語であったVBScript(Visual Basic Script)や主要なスクリプト言語であるJScriptをもはやサポートしない。

 インタプリタ型であるこれらの言語は、パフォーマンスの向上を意図して、それぞれコンパイル型の言語であるVB.NET(Visual Basic .NET)とJScript .NETに置き換えられている。これはレガシーASPからASP.NETへの移行に際しての最大の変更点の1つといってよい。

 それでは、以下にそれぞれの言語仕様における相違点について見ていくことにしよう。

○Visual Basic .NET

 もともとがVB(Visual Basic)のサブセットという位置付けで登場したVBScriptは、VBの後継であるVB.NETとも極めて類似した構文規則を持つ。恐らくVBScriptをある程度使いこなしてきた開発者ならば、VB.NETでコードを記述することにさほど抵抗を覚えることはないはずだ。しかし、後述するJScriptとJScript .NETの関係と異なり、

VBScriptとVB.NETはあくまで異なる言語

である。レガシーASPからASP .NETへの移行に当たっては、いくつかの点で変更を施す必要がある。

 ただし、VB.NETにおける変更点については、別稿「プロフェッショナルVB.NETプログラミング」に詳しいため、本稿では主要な変更点のみをリストアップするにとどめる。レガシーASPからASP.NETへコードを移行する際のチェックリストとして利用してほしい。

分類 概要
データ型 デフォルトで変数の宣言は必須。
Variant型は廃止され、Object型で代替される。厳密な型指定を有効(Option Strict On)にしている場合、Object型はCTypeキーワードで明示的な型変更を行わなければならない。
制御構造 変数宣言時に初期値の設定が可能となった。「Dim A As String="Value"」のような記述は、VBScriptでは2文に分けて記述しなければならなかったものである。
変数のスコープに、ブロック・レベルが追加された。つまり、IfステートメントやForステートメントなどのブロック内で宣言された変数はブロック内でのみ有効である。
オブジェクト生成のタイミングが変更となった。VBScriptでは「Set A = New MyClass()」のタイミングでは実際のオブジェクトは生成されず、オブジェクト変数が初めて使用されるタイミングでメモリを確保していた。しかし、VB.NETでは「Dim A As New MyClass()」を実行したタイミングでオブジェクトが生成される。
すべてのIfステートメントは、If〜End Ifで囲まれたブロック構造として記述しなければならない。「If A = 1 Then B = 1」のような単一行構文はもはや認められていない。
オブジェクト構造 オブジェクト参照を代入するためのSetステートメントが廃止された。オブジェクト参照はもはや単なる=演算子によって設定することができる。
Property Get/Let/Setステートメントが廃止され、Propertyステートメントに統合された。新しいPropertyステートメントでは、ReadOnly/WriteOnlyキーワードを利用することでプロパティ値の読み書きを制限することができる。
参照先のあいまいさを排除するために、ほとんどのオブジェクトから既定のプロパティが廃止された。例えば、これまでテキスト・ボックスの値を取得するために、単に「TextBox1」と記述していた場合、今後は「TextBox1.Text」と記述しなければならない。
メソッド呼び出し パラメータを必要としないメソッドを含む、すべてのメソッド呼び出しにおいて、パラメータ・リストをカッコで囲まなければならない。
パラメータの引き渡しのデフォルトはVBScriptとは異なり、値渡し(ByVal)となる。従来どおりの参照渡しを行いたい場合には、仮引数の前にByRefキーワードを付与しなければならない。
VBScriptからVB.NETへの主要な変更点

 そのほか、VB.NETでは共通言語ランタイム(CLR)との相互運用を念頭に、いくつかの関数が.NET Frameworkクラス・ライブラリ上の関数に整理・統合されている。結果、VBScriptでは使用できていた以下の関数がVB.NETではクラス・ライブラリのメソッドなどに置き換えられているので、注意が必要だ。次の表に、整理統合された関数と言語構造をまとめた。

VBScript VB.NET
Abs関数 System.Math.Absメソッド
Atn関数 System.Math.Atanメソッド
Cos関数 System.Math.Cosメソッド
Emptyキーワード Nothingキーワード
Eqv演算子 =演算子
Exp関数 System.Math.Expメソッド
Imp演算子 該当なし
InStrB関数 InStr関数
IsEmpty 関数 IsNothing関数
IsNull関数 IsDbNull関数
IsObject 関数 IsReference関数
LeftB関数 Left関数
LenB関数 Len関数
Log関数 System.Math.Logメソッド
MidB関数 Mid 関数
Now関数 Nowプロパティ
Nullキーワード Nothingキーワード
RightB関数 Right関数
Round関数 System.Math.Roundメソッド
Sgn関数 System.Math.Signメソッド
Sin関数 System.Math.Sinメソッド
Sqr関数 System.Math.Sqrtメソッド
Terminateイベント Sub Dispose/Sub Finalize
Time関数 TimeOfDayプロパティ
Timer関数 Timerプロパティ
Wendステートメント While……End Whileステートメント
VB.NETでCLRに整理統合された関数・言語構造

○JScript .NET

 JScript .NETは旧来のJScriptとほとんど完全な下位互換性を保証しており、既存のJScriptコードの大部分は、JScript .NETでも問題なく動作する。JScript .NETの新しい機能は既存のJScriptに対する追加的なものであるといってよい。

 ただし、JScript .NETには「高速モード」と「低速モード」とが存在するので、注意が必要だ。高速モードでは処理パフォーマンスを最適化するために旧来のJScriptで利用できたいくつかの機能が利用できなくなっている。

 一方の「低速モード」は旧バージョンとの互換性を保証するものの、処理パフォーマンスと安定性に劣る。そして、ASP.NET環境ではパフォーマンスと安定性への考慮から「高速モード」しか使用できないようになっているのだ。次のページで、「高速モード」における制限事項を挙げることにしよう。

【参考】
 コンソール・アプリケーションなどにおいて低速モードを有効にするには、JScript .NETコンパイラ・オプション「/fast」において、「/fast-」を指定すればよい。ただし、上にも述べたような理由から「低速モード」は下位互換のためにのみ採用されるべきであり、通常はデフォルトである「高速モード」の利用をお勧めする。

 

 INDEX
  ASP→ASP.NET移行テクニック
  第3回 ASP/ASP.NETを支える周辺技術の移行
  1.言語上の相違点
    2.「高速モード」のJScript .NETにおける制限事項
    3.COMコンポーネントの活用(1)
    4.COMコンポーネントの活用(2)

インデックス・ページヘ  「ASP→ASP.NET移行テクニック」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間