連載ASP→ASP.NET移行テクニック第3回 ASP/ASP.NETを支える周辺技術の移行山田 祥寛2004/06/19 |
|
≪今回の内容≫ ・言語上の相違点 ・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環境ではパフォーマンスと安定性への考慮から「高速モード」しか使用できないようになっているのだ。次のページで、「高速モード」における制限事項を挙げることにしよう。
【参考】 |
INDEX | ||
ASP→ASP.NET移行テクニック | ||
第3回 ASP/ASP.NETを支える周辺技術の移行 | ||
1.言語上の相違点 | ||
2.「高速モード」のJScript .NETにおける制限事項 | ||
3.COMコンポーネントの活用(1) | ||
4.COMコンポーネントの活用(2) | ||
「ASP→ASP.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|