各言語のキーワードの比較
更新 : 2007 年 11 月
ここでは、言語のキーワードにまとめることができる共通のプログラミング タスクを示します。コード例の必要なタスクの詳細については、「コード例による各言語のプログラミング概念の比較」を参照してください。
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
変数の宣言 |
宣言子 (概念であり、キーワードではありません) |
declarators (ユーザー定義型と組み込み型を含むキーワード) |
var |
[暗黙の宣言] PUBLIC LOCAL PRIVATE |
|
名前付き定数の宣言 |
const |
#DEFINE |
|||
クラスの新規インスタンスの作成 |
new |
NEWOBJECT( ) 関数 |
|||
新規オブジェクトの作成 |
CreateObject() (COM オブジェクトの場合) |
CoCreateInstance() (COM オブジェクトの場合) |
new ActiveXObject() |
CREATEOBJECT( ) 関数 |
|
オブジェクト変数へのオブジェクト割り当て |
= |
= |
= |
= STORE |
|
関数またはメソッド (値を返さない) |
Sub2 |
void |
Void (COM サーバーのみ) |
||
関数またはメソッドのオーバーロード (Visual Basic : プロシージャまたはメソッドのオーバーロード) |
(言語のキーワードは必要ありません。) |
(言語のキーワードは必要ありません。) |
(言語のキーワードは必要ありません。) |
(言語のキーワードは必要ありません。) |
|
現在のオブジェクトへの参照 |
Me3 |
this |
this thisform |
||
現在のオブジェクトにおける仮想メソッドの非仮想呼び出し |
MyClass::Func1()、ここで MyClass はメンバ関数 Func1 を持つ C++ クラス |
適用なし |
適用なし |
適用なし |
|
文字列からの文字の取得 |
*(p + 10) または p[10]、ここで p は char* または wchar_t* |
str[10]、ここで str は文字列 文字列型4 |
str[10]、ここで str はstring charAt substring substr |
SUBSTR( ) |
|
複合データ型の宣言 (構造体) |
class, interface |
適用なし |
|||
オブジェクトの初期化 (コンストラクタ) |
コンストラクタ (キーワードではなく概念) |
コンストラクタ、またはシステム既定のタイプのコンストラクタ |
コンストラクタ (キーワードではなく概念)6 |
Init イベント |
|
オブジェクトの直接終了 |
適用なし |
~ClassName |
適用なし |
適用なし |
適用なし |
ガベージ コレクションがオブジェクトをクリアする直前の、システムによるメソッドの呼び出し 7 |
Finalize (Visual Basic 6.0 では、Class_Terminate) |
Destructors (C++) (キーワードではなく概念) |
適用なし |
Destroy イベント |
|
変数の宣言時の初期化 |
Dim x As Long = 5 Dim c As New Car(FuelTypeEnum.Gas) |
// 値の初期化 : int x=5; // 適切なコンストラクタを使用 : C c(10); |
// 値の初期化 : int x = 123; // または既定のコンストラクタ : int x = new int(); |
var x = 5 var y : car = new car() |
LOCAL x x = 5 |
関数のアドレスの取得 |
AddressOf (この演算子はデリゲート インスタンスとして関数への参照を返します) |
かっこなしで関数名を使用 |
適用なし |
||
コールバック |
呼び出し元をコールバックする関数に、関数のアドレスを渡します。例については、「方法 : Visual Basic でプロシージャを別のプロシージャに渡す」を参照してください。 |
CALLBACK (標準データ型) callback (IDL 属性) |
適用なし |
適用なし |
|
オブジェクトが非同期で修正できることの宣言 |
適用なし |
適用なし |
適用なし |
||
変数の明示的な宣言の強制 |
n/a (すべての変数は使用前に宣言する必要あり) |
n/a (すべての変数は使用前に宣言する必要あり) |
高速モード (既定値) |
_VFP.LanguageOptions NEW |
|
ローカル型の推論の有効化 |
|||||
オブジェクトを参照していないオブジェクト変数のテスト |
pobj == NULL |
obj == null |
obj == undefined obj == null |
VARTYPE(obj)=="0" |
|
オブジェクトを参照していないオブジェクト変数の値 |
nullptr |
null undefined |
.F. |
||
データベースの Null 式のテスト |
適用なし |
適用なし |
x == null |
ISNULL( ) |
|
バリアント変数が初期化されたかどうかのテスト |
適用なし |
適用なし |
適用なし |
x == undefined |
EMPTY( ) |
既定のプロパティの定義 |
property: マネージ コードを参照する property キーワードです。 |
適用なし |
適用なし |
オブジェクト指向プログラミング
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
基本クラスの参照 |
super |
BaseClass プロパティ ParentClass プロパティ DODEFAULT() Class::member |
|||
インターフェイスの宣言 |
interface |
DEFINE CLASS |
|||
実装されるインターフェイスの指定 |
(インターフェイスより派生) class C1 : public I1 |
class C1 : I1 インターフェイス |
IMPLEMENTS |
IMPLEMENTS NEW |
|
クラスの宣言 |
class |
DEFINE CLASSMyClassAS <ParentClass> |
|||
モジュールの宣言 |
static class |
static class |
適用なし |
適用なし |
|
クラスまたは構造体の部分定義 |
適用なし |
適用なし |
適用なし |
||
クラスが継承だけできることの指定。クラスのインスタンスは作成できない。 |
abstract |
適用なし |
|||
クラスが継承できないことの指定 |
final |
適用なし |
|||
列挙型の宣言 |
enum |
適用なし |
|||
クラス定数の宣言 |
const (フィールド宣言に適用) |
const |
#DEFINE |
||
基本クラスからのクラスの派生 |
Class C1 : public Base (言語のキーワードは必要ありません。) |
class C1 : C2 |
Class c1 extends c2 |
DEFINE CLASS MyClass AS ParentClass |
|
メソッドやプロパティのオーバーライド |
(/clr コンパイルの override を除き、言語のキーワードは必要ありません。Derived Classes を参照してください。) |
(言語のキーワードは必要ありません。) |
(言語のキーワードは必要ありません。) |
||
派生クラスに実装しなければならないメソッドの宣言 |
宣言の最後に = 0 を置く (純粋仮想メソッド) |
abstract |
(言語のキーワードは必要ありません。) |
||
オーバーライドできないメソッドの宣言 |
NotOverridable (メソッドは既定で NotOverridable) |
final |
適用なし |
||
仮想メソッド/プロパティ、またはプロパティ アクセサの宣言 |
(メソッドは既定で仮想) |
適用なし |
|||
派生クラスにおける基本クラスのメンバの隠ぺい |
適用なし |
||||
クラス メソッドへのタイプセーフな参照の宣言 |
かっこなしで関数名を使用 |
適用なし |
|||
処理するイベントを持つオブジェクトを含むことができる変数の指定 |
適用なし |
(コードを記述。固有のキーワードはなし) |
(コードを記述。固有のキーワードはなし) |
EVENTHANDLER( ) NEW |
|
イベント プロシージャが呼び出されるイベントの指定 |
Handles (名前付けパターンにより、WithEvents 変数とイベントのプロシージャを関連付けることもできます。) |
適用なし |
event += eventHandler; |
適用なし |
BINDEVENTS( ) |
複数メンバがアクセスするためのオブジェクト式の評価 |
適用なし |
with9 |
WITH ... ENDWITH |
例外処理
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
構造化例外処理 |
try catch finally throw |
TRY [ tryCommands ] [ CATCH [ To VarName ] [ WHEN IExpression ] ] [ catchCommands ] ] [ THROW [ eUserExpression ] ] [ EXIT ] [ FINALLY [ finallyCommands ] ] ENDTRY |
|||
C++ 例外処理 |
適用なし |
適用なし |
適用なし |
適用なし |
条件判断構造
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
条件判断構造 (選択) |
case |
switch case break |
CASE ICASE |
||
条件判断構造 (if ... then) |
if else |
IF ... ENDIF IIF( ) |
|||
ループ構造 (条件) |
do、while break、continue |
DO、WHILE (句) |
|||
ループ構造 (反復処理) |
for (x=0;x<10;x++){...} for (prop in obj) { print (obj[prop]);} |
FOR (句) FOR ... ENDFOR Continue NEXT FOR EACH (句)、FOR ... ENDFOR、Continue、Next |
配列
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
配列の宣言 |
int[] x = new int[5]; |
var x : int[] var arr = Array() |
DIMENSION DECLARE |
||
配列の初期化 |
var x : int[] = [1, 2, 3, 4, 5] var arr = new Array(1, 2, 3, 4, 5)] |
x[1] = 1 x[2] = 2 |
|||
配列の再割り当て |
適用なし |
適用なし |
arr.length=newSize (JScript の配列のみ) 10 |
DIMENSION DECLARE |
クラス スコープ
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
プロジェクトやアセンブリの外部からの参照 |
public |
適用なし |
|||
宣言元のアセンブリ内でのみアクセス可能 |
internal |
適用なし |
|||
現在のクラスまたは派生クラスでのみ参照 |
適用なし |
適用なし |
適用なし |
||
現在のアセンブリ、またはコンテナ クラスから派生した型に制限されるアクセス |
protected internal |
適用なし |
適用なし |
||
プロジェクト内部だけで参照 (入れ子になった外側のクラス内のクラス) |
private |
適用なし |
メンバ スコープ
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
クラス、プロジェクト、およびモジュールの外部からアクセス可能 |
public |
(言語のキーワードは必要ありません。) |
|||
クラスの外部 (ただし、プロジェクトまたはパッケージ内) からアクセス可能 |
public private: |
internal |
適用なし |
||
現在のクラスおよび派生クラスからのみアクセス可能 |
protected |
PROTECTED |
|||
クラスまたはモジュール内でのみアクセス可能 |
private |
HIDDEN |
|||
関数またはほかのクラスが派生クラスのプライベート メンバへアクセスできることの指定 |
適用なし |
friend (C++ では使用できません) |
friend |
適用なし |
適用なし |
アセンブリ内部ではプロテクト、ほかのアセンブリにはプライベート |
適用なし |
protected private |
適用なし |
適用なし |
適用なし |
現在のアセンブリ、またはコンテナ クラスから派生した型のみアクセス可能 |
protected internal |
適用なし |
適用なし |
変数の有効期間
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
プロシージャのローカル変数として予約 |
Static11 |
適用なし |
適用なし |
||
クラスの全インスタンスで共有 |
static |
適用なし |
その他
目的 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
コメント コード |
//、複数行にわたるコメントの場合は /* */ |
* && NOTE |
|||
大文字と小文字の区別 |
× |
○ |
○ |
○ |
× |
Windows API の呼び出し |
適用なし |
適用なし |
DECLARE - DLL |
||
イベントの宣言と発生 |
適用なし |
適用なし |
RAISEEVENT( ) 関数 |
||
プリミティブのスレッド処理 |
適用なし |
適用なし |
適用なし |
||
Go to (分岐) |
適用なし |
適用なし |
1Visual Basic では、Static を変数の宣言として使用できるのは、プロシージャ内部だけです。たとえば、Static x As Long をプロシージャの外部で宣言することはできません。
2Visual Basic では、Sub キーワードで宣言されたプロシージャは値を返すことができません。プロシージャが値を返すようにするには、Function キーワードで宣言する必要があります。
3Visual Basic では、Me はコンパイル時に解決されないため、プロパティやメソッドの戻り値として使用できます。
4 JScript では、substr 関数はサポートされていますが、文字列内の文字にアクセスする方法としては、現在は推奨されていません。文字列の特定の位置から文字にアクセスする最も効率的な方法は、角かっこを使うことです。たとえば、文字列 str の 10 番目の文字にアクセスするには、str[10] を使用します。
5Visual Basic では、.NET Framework の System.Object から派生するクラスのコンストラクタは、常に New という名前になります。
6 JScript では、コンストラクタのオーバーロードは使用できません。
7 通常、このようなメソッドのコードは、ガベージ コレクタによって自動的に解放されないシステム リソースを解放します。
8 C++ では、抽象クラスに 1 つ以上の純粋な仮想メンバを含めます。
9 JScript では、Visual Basic と異なり、先行するピリオドは使用されません。変数とプロパティは互いに間違えられることがあるので、この機能は混乱を招きやすいと考えられます。また、with ステートメントを使うとコードの実行速度が低下することにも注意してください。
10 JScript では、これによって配列が再配置されることも、"増加" することもありません。JScript の配列 (Array 型として宣言) は、常に疎であり、また動的です。ネイティブ配列 (System.Array または type[] として宣言) は動的ではありません。
11 非共有のクラス メソッドにおける静的なローカル変数は、Visual Basic ではクラス インスタンスごとに格納され、その他の言語では単一のコピーを共有します。Static を変数の宣言に使用したとき、変数が解放されてから再度スコープを入手しても、その変数の値は予約されています。
参照
参照
各言語およびライブラリにおける、コントロールとプログラミング可能オブジェクトの比較