この記事はUiPathブログ発信チャレンジ2021サマー 7/25の記事です。
UiPathは.NET Frameworkがベースで作られており(そのうち.NET Coreになるようですが)、それ以前のVisualBasic6やVisualBasicForApplicationから言語仕様がかなり変化しました(といっても分岐してから20年以上たっていますが)。ただ、VisualBasic.NETが互換性維持のため、かなり文法的に工夫がされており、またUiPathの業務特性上、オブジェクトを新規につくる需要もあまりないため、VBAの知識だけでもそれなりに組めてしまいます。
ただ、違いについて知っておいてほいたほうがいい部分もありますので、その一部を少しだけ紹介して見ようと思います。
今回はその中でも変数について説明しようと思います。
変数の種類
.NET Framework以前のVisualBasic(Ver6 含むVBA以降VisualBasic)はObject型変数以外はデータを格納する入れ物で、データを格納するしか機能はありませんでした。
.NET Framework以降のVisualBasic(Ver7以降 以降VisualBasic.NET)では、変数を参照するときに、データ領域しか持たないデータであっても、データ型に対応したクラスを経由して参照するように変更になっています。そのため、データを参照する際に、データ型に対応したクラスに実装されているメソッドを呼び出すことができます。
たとえば、文字列を数字型に変換するときは以下の書式になります。
'【VisualBasicの場合】
Dim i As Integer
Dim s As String
i = 10
s = CStr(i)
'【VisualBasic.NETの場合】
Dim i As Integer
Dim s As String
i = 10
s = i.toString 'CStr関数もあるので、 s = CStr(i) でもOK
また、変数の分類も、VisualBasicではデータを格納するプリミティブ型とオブジェクト型に分かれていましたが、Vissualbasic.NETでは、参照型と値型の2つに分類されています。
言語リファレンスには以下のように定義されています。
(詳細はVisual Basic ガイド 言語機能 データの種類値型と参照型参照のこと)
【値型】
すべての数値データ型
Boolean、 Char、および Date
すべての構造体 (メンバーが参照型の場合であっても)
列挙体 (基になる型が常に SByte、Short、Integer、Long、Byte、UShort、UInteger、または ULong であるため
【参照型】
String
すべての配列 (要素が値型であっても)
Form などのクラス型
デリゲート
※上記データと種類より抜粋
値型と参照型の基本的な相違点は以下の通りです
・比較を行うとき
値型は格納されている値同士を比較する
参照型はオブジェクトが一致しているか比較する(参照型はデータとしてオブジェクトのアドレスしか保持していないため)
・値の代入を行うとき
値型は値のコピーを代入先に代入
参照型はオブジェクトとのアドレスを渡す
※細かい動きについては後日追記します
※UiPath.Core.GenericValueは値型に分類されています
String型について
String型についてですが、上記だと参照型として提起されていますが、実際に使ってみると、
・代入時にはオブジェクトのコピーを代入
・参照時には値同士の比較参照を行っている
という値型の動作をしています。これは、String型は参照型として定義されていますが、VsiualBasicとの互換性を意識して、あたかも値型に動くようにメソッドや比較演算子がオーバーライドされているためです。そのため、参照型にもかかわらず、値型のように扱うことができます。
以上簡単に、UiPAthのベース言語であるVisualStudio.NETの変数についてお伝えしました。
次回は実際の動きについて、UiPathを使ってお伝えしようと思います。
それではまた