S-JIS[2005-01-16/2009-02-25] 変更履歴

プログラミング言語比較

変数・型

  • MSX-BASIC [2005-01-16/2006-07-26]
  • VisualBasic for Application [2005-01-16/2008-09-25]
  • VBScript [2007-04-06]
  • VB.NET [2006-04-15/2007-11-27]
  • PASCAL [2005-02-10]
  • PL/I [2005-01-16]
  • Perl [2005-03-12/2006-07-11]
  • C言語(gcc, WIN32) [2005-01-16/2007-11-27]
  • Visual C++(MFC) [2005-01-16/2006-08-23]
  • Java [2005-01-16/2009-02-25]
  • JavaScript [2006-01-08/2006-07-02]
  • C# [2006-03-04/2007-11-27]
  • SQL(Oracle[2005-02-07/2006-07-08]
  • PL/SQL(Oracle) [2005-02-27/2006-07-08]
  • Common Lisp [2005-04-04]
 
変数宣言要否 不要(変数名の後ろに記号を付けて明示することも可能) 不要 不要
Option Explicitを付ければ必須
必須 必須   ローカル変数は必要 必須(ブロックの先頭) 必須 必須 不要(いきなり使うのはエラー。宣言か代入をしておけば可) 必須 なし 必須 不要
変数名 英大文字+英数字
(2文字以内)
英字+英数字
全角文字
英字+英数字
(255文字以内)
  英字+英数字 英大文字+英数字 $英字+英数字
@英字+英数字
%英字+英数字
英字+英数字 英字+英数字 英字+英数字
全角文字
英小文字+英数字
全角文字
英字+英数字 なし 英字+英数字 英字+英数字
|英数字|
型(整数) DEFINT(又は変数名の末尾に「%」) Byte・Integer・Long Byte・Integer・Long Byte・Short・Integer・Long
System.Byte・Int16・Int32・Int64
integer BIN FIXED・BIT 型という概念は無い。演算子によって文字か数値として扱われる。 char・short・int・long char・short・int・long・BYTE・WORD・DWORD byte・short・int・long なし   NUMBER
INTEGER
BINARY_INTEGER
PLS_INTEGER
INTEGER
 
型(浮動小数) DEFSNG(又は変数名の末尾に「!」)
DEFDBL(変数名の末尾に「#」)
Float・Double Single・Double Single・Double
System.Single・Double
real DEC FLOAT float・double float・double float・double なし       real
short-float
single-float
double-float
long-float
型(固定整数・小数) なし Currency Currency Decimal
System.Decimal
  DEC FIXED・PIC なし   BigDecimal なし   NUMBER NUMBER integer
型(分数) なし   なし             なし       ratio
例→3/2
型(複素数) なし   なし             なし       complex
例→#C(5 3)
型(1文字) なし   なし Char
System.Char
定数は「"字"c」
char
定数は「'」で囲む
  char(1byte)
定数は「'」で囲む
char(1byte)
定数は「'」で囲む
char(2byte)
定数は「'」で囲む
なし       character
定数は「#\」を前に付ける
型(文字列) DEFSTR(又は変数名の末尾に「$」)
定数は「"」で囲む
String
定数は「"」で囲む
String
定数は「"」で囲む
String
System.String

定数は「"」で囲む
(charの配列)
定数は「'」で囲む
CHAR
定数は「'」で囲む
(charの配列)
定数は「"」で囲む
CString
定数は「"」で囲む
String
定数は「"」で囲む
なし string
定数は「"」で囲む
CHAR
VARCHAR2
CLOB

定数は「'」で囲む
CHAR
VARCHAR2
CLOB

定数は「'」で囲む
string
定数は「"」で囲む
型(真偽値) なし
真:0以外(-1)、偽:0
Boolean
真:True、偽:False
Boolean
真:True、偽:False
Boolean
System.Boolean

真:True、偽:False
Boolean
真:true、偽:false
  なし
真:0以外(1)、偽:0
BOOL
真:0以外(TRUE)、偽:FALSE
ANSI C++ではbool、true、false
boolean
真:true、偽:false
真:true、偽:false bool
真:true、偽:false
  BOOLEAN
真:TRUE、偽:FALSE、その他:NULL
真:t(nil以外)、偽:nil
型変換(キャスト) なし     CType(値, 型)
DirectCast(値, 型)
CByte(値)・CShort(値)・CInt(値)・CStr(値)…
    (型)値 (型)値
型(値)
(型)値 なし (型)値
値 as 型…変換不能な場合はnullになる
CAST(値 AS 型) CAST(値 AS 型) (coerce 値 型)
型種類取得 なし TypeName(変数)
VarType(変数)
TypeName(変数)
VarType(変数)
変数.GetType()
TypeOf 変数
  なし なし なし
ANSI C++ではtypeid(型)、typeid(変数)
変数.getClass()
型.class
typeof(変数)
型名が出るわけではない
変数.GetType()
typeof(型)
DUMP(値)で表示される「Typ DUMP()は使えない (type-of 値)
型チェック なし     TypeOf 値 Is 型           instanceof typeof(変数)!="undefined" 値 is 型     (typep 値 '型)
グローバル変数宣言 変数は全てグローバル 関数・サブリーチンの外で宣言   Sharedを付けて宣言
あるいはブロック内でStaticを付けて宣言
  ブロックの外で宣言   関数の外で宣言 関数の外で宣言 なし 関数の外で宣言       defvar
defparameter
ローカル変数宣言位置 ローカルという概念なし 関数・サブルーチン内で自由   ブロック内で自由 定位置(programとbeginの間) ローカルという概念なし? 自由 ブロックの先頭 ブロック内で自由 ブロック内で自由 関数内で自由   なし DECLARE部で宣言 letの先頭
変数宣言(定義) DEFDBL A-B
→AとBで始まる変数はDBL
又は宣言せずに接尾辞を付けて(例:I%,C#,A$)いきなり使うことも可
Dim 変数 As 型,変数 As 型
型を省略するとVariant。
Dim A,B As 型」→AはVariantになる。
MSX-BASICのような接尾辞も有(例:I%,C#,A$,L&)
Dim 変数, 変数
型は指定できず、Variantになる。しかし内部的には色々な型を持っている
Dim 変数 As 型
Dim 変数 As 型 = 初期値
Dim 変数 As New 型
var 変数,変数: 型; DCL 変数 型,
    変数 型;
DCL 変数 型 INIT(初期値);
my $変数;
my ($変数,$変数);
my $変数=初期値;
型 変数,変数;
型 変数=初期値;
型 変数,変数;
型 変数=初期値;
型 変数,変数;
型 変数=初期値;
var 変数,変数
var 変数=初期値
  項目名 型,
項目名 型

CREATE TABLE
変数 型;
変数 型:=初期値;
(defvar 変数)
(defvar 変数 初期値)
(defparameter 変数 初期値)
(declare 型 変数 …)

(let (変数 …) (declare (型 変数 …)) … 本体〜)
(let ((変数 初期値) …) 〜)
ポインター変数の宣言 整数型変数で代用       var 変数:^型;   型 *変数; 型 *変数; なし          
 
配列(dimension)宣言
添字:「そえじ」
DIM 変数(10)
→添字は0〜10
Dim 変数(10) As Integer
→添字は0〜10
Dim 変数(1 To 10) As Integer
→添字は1〜10
Dim 変数(10)
→添字は0〜10
Dim 変数(10) As Integer

Dim 変数() As Integer = { 初期値,… }
var 変数:array[1..10] of integer;
→添字は1〜10
DCL 変数(10) DEC(15,0) FIXED; @変数=(初期値,初期値,…); int 変数[10];
→添字は0〜9
int 変数[10];
→添字は0〜9
      CREATE OR REPLACE TYPE 配列型 AS VARRAY(10) OF INTEGER;
/
SHOW ERR
TYPE 配列型 IS TABLE OF INDEX BY BINARY_INTEGER;
変数 配列型;

→添字は代入した分だけ使える
(setq 変数 (make-array 10))
動的配列   Dim 変数() As Integer
ReDim 変数(10)
            int 変数[] = new int[10]; int[] 変数 = new int[10];
→添字は0〜9

int[] 変数 = new int[]{ 初期値,… };

int[] 変数 = { 初期値,… };
var 変数 = new Array(10)
→添字は0〜9

var 変数 = new Array(初期値,…)

var 変数 = [初期値,…]
int[] 変数 = new int[10];
→添字は0〜9
配列はSystem.Arrayを継承する

int[] 変数 = new int[]{ 初期値,… };

int[] 変数 = { 初期値,… };
     
値設定   変数 = Array(初期値,…) 変数 = Array(初期値,…)             変数 = new int[]{ 初期値,… };          
変数(添字) = 値 変数(添字) = 値 変数(添字) = 値 変数(添字) = 値 変数[1] := 値;   $変数[添字] = 値; 変数[添字] = 値; 変数[添字] = 値; 変数[添字] = 値; 変数[添字] = 値; 変数[添字] = 値;     (setf (apply #'aref 変数 0) 値)
値取得 変数(1) 変数(1) 変数(1) 変数(1) 変数[1]   $変数[0] 変数[0] 変数[0] 変数[0] 変数[0] 変数[0] SQL文からは扱えないらしい 変数(1) (aref 変数 0)
添字変更   Dim 変数() As Integer
ReDim Preserve 変数(10)
Dim 変数()
ReDim 変数(10)
Array.Resize(変数, 10)           int[] 変数;
変数=new int[10];
範囲外の添字を使えば自動拡張される Array.Resize(変数, 10);     (setq 変数 (adjust-array 変数 10))
多次元配列 DIM 変数(2,3) Dim 変数(2,3) As Integer Dim 変数(2, 3) Dim 変数(2,3) As Integer var 変数:array[1..2, 1..3] of integer; DCL
 1 適当(2),
  2 変数(3) 型;

BASICと同様の宣言も可能
  int 変数[2][3]; int 変数[2][3]; int[][] 変数=new int[2][];
for(int i=0;i<変数.length;i++) 変数[i]=new int[3];
var 変数=new Array(2);
for(var i=0;i<変数.length;i++) 変数[i]=new Array(3);
int[,] 変数=new int[2,3];     (setq 変数 (make-array '(2 3)))
変数(2,3) 変数(2,3) 変数(2,3) 変数(2,3) 変数[2,3]
変数[2][3]
    変数[1][2] 変数[1][2] 変数[1][2] 変数[1][2] 変数[1][2]     (aref 変数 1 2)
配列の長さ なし UBound(変数) - LBound(変数) + 1 UBound(変数) - LBound(変数) + 1 変数.Length
変数.LongLength
変数.GetLength(次元番号)
    $#変数 + 1 sizeof 変数/sizeof 変数[0]   変数.length 変数.length 変数.Length
変数.LongLength
変数.GetLength(次元番号)
  変数%COUNT (array-dimension 変数 次元番号)
配列の下限・上限 なし LBound(変数) LBound(変数) 変数.GetLowerBound(次元番号)       なし       変数.GetLowerBound(次元番号)   変数%FIRST  
UBound(変数) UBound(変数) 変数.GetUpperBound(次元番号) $#変数 変数.GetUpperBound(次元番号) 変数%LAST
配列の次元       変数.Rank               変数.Rank      
配列コピー       Array.Copy(src, spos, dst, dpos, len)
Array.Copy(src, dst, len)
      memcpy(dst+dpos, src+spos, len);
memmove(dst+dpos, src+spos, len);
  System.arraycopy(src, spos, dst, dpos, len);
dst = Arrays.copyOf(src, len);
  Array.Copy(src, spos, dst, dpos, len);
Array.Copy(src, dst, len);
     
配列ダンプ       Debug.WriteLine(BitConverter.ToString(配列))           System.out.println(new HexDumpEncoder().encodeBuffer(配列));          
配列クリア   Erase 配列           memset(配列, 0x00, sizeof 配列)   Arrays.fill(配列, 0);          
配列解放   Erase 配列
(ReDimによる配列)
            delete[] 配列;
(newによる配列)
           
配列か否か   IsArray(obj) IsArray(obj) obj.GetType().IsArray       なし   obj.getClass().isArray()   obj.GetType().IsArray      
マップ
(連想配列・ディクショナリー)
なし   Set 変数 = CreateObject("Scripting.Dictionary")       %変数 = (キー1,値1,キー2,値2,…);
%変数 = (キー1 => 値1, キー2 => 値2,…);
    Map 変数=new HashMap(); var 変数=new Object();

var 変数={ キー:値,… };
      (setq 変数 (make-hash-table))
変数.Add "キー", "値" $変数{キー}=値; 変数.put(キー,値); 変数["キー"]=値; (setf (gethash 'キー 変数) '値)
変数.Item("キー") $変数{キー} 変数.get(キー) 変数["キー"] (gethash 'キー 変数)
変数.Items   変数.values()    
変数.Exists("キー")   変数.containsKey(キー)    
変数.Count   変数.size()    
変数.Remove("キー") delete $変数{キー} 変数.remove(キー) delete 変数["キー"]; (remhash 'キー 変数)
変数.RemoveAll   変数.clear()    
Dim key as Variant
For Each key In 変数.Keys
Next
  for(Iterator i = 変数.keySet().iterator(); i.hasNext();) {
 Object key = i.next();
}

for(Object key: 変数.keySet()) {
}
   
十進数 12 12 12   12 12 12 12 12 12 12   12 12 12
二進数 &B1100 なし       '1100'B 0b1100 0b1100(gcc拡張) なし なし         #b1100
#2r1100
八進数 &O14(オーを使用) &O14(オーを使用)         014(ゼロから始まる) 014(ゼロから始まる) 014(ゼロから始まる) 014(ゼロから始まる) 014(ゼロから始まる)       #o14
#8r14
十六進数 &HC &HC &HC     X'0C' 0xc 0xc 0xc 0xc 0xc       #xc
#16rc
定数宣言 なし Const 定数 As Integer = 値 Const 定数 = 値   const 定数=値; なし   const int 定数=値; const int 定数=値; final int 定数=値;       定数 CONSTANT NUMBER:=値; '定数
(quote 定数)
(defconstant 定数 値)
 
構造体宣言 なし Type 構造体名
 メンバーA As Integer
 メンバーB As Integer
End Type
  Structure 構造体名
 Dim メンバーA As Integer
 Dim メンバーB As Integer
End Structure
type レコード名=recoed
 フィールドA of integer;
 フィールドB of integer
end;
構造体の型を作ることは出来ない(?)   typedef struct{
 int メンバーA;
 int メンバーB;
} 構造体名;
struct 構造体名{
 int メンバーA;
 int メンバーB;
};
  function 構造体名(){
 this.メンバーA=初期値;
 this.メンバーB=初期値;
}
  CREATE OR REPLACE TYPE レコード名 AS OBJECT
(項目A INTEGER,
 項目B INTEGER
);
/
SHOW ERR
TYPE レコード名 IS RECORD(
 項目A INTEGER,
 項目B INTEGER
);


↓テーブル定義を使った構造体
TYPE レコード名 IS RECORD(
 項目A テーブル.項目%TYPE,
 項目B テーブル.項目%TYPE
);
(defstruct 構造体名
 メンバーA
 メンバーB)
(defstruct 構造体名
 (メンバー 初期値 :type 型))

「make-構造体名」「構造体名-p」「copy-構造体名」という関数が自動的に作られる

(defstruct (構造体名
 (:include 上位構造体名 (上位メンバー 初期値))
 (:conc-name 接頭辞-)
 (:constructor コンストラクター名 メンバーの並び…))
 メンバーA
 メンバーB)

接頭辞を付けると、メンバーは「接頭辞-メンバー」関数でアクセスできる。デフォルトは構造体名
名前空間 なし     Namespace ネームスペース名

End Namespace
    package クラス名;
    package パッケージ名;
  namespace 名前空間
{
  〜
}
     
クラス宣言
コンストラクター
なし   Class クラス名
Private メンバーA
Private メンバーB
Public Function 関数()
 〜
End Function
End Class
Class クラス名 Inherits 上位クラス名 Implements インターフェース,…
Private メンバーA As Integer
Private メンバーB As Integer
Public Function 関数() As Integer
 〜
End Function
End Class
  なし package クラス名;   class クラス名 : public 上位クラス名
{
private:
 int メンバーA;
 int メンバーB;
public:
 int 関数();
};

int クラス名::関数()
{
 〜
}
class クラス名 extends 上位クラス名 implements インターフェース,…{
 private int メンバーA;
 private int メンバーB;
 public int 関数(){
  〜
 }
}
function クラス名(引数〜){
 this.メンバーA=初期値;
 this.メンバーB=初期値;
 this.関数=関数名
}

function 関数名(){
 〜
}
class クラス名 : 上位クラス名, インターフェース…
{
 private int メンバーA;
 private int メンバーB;
 public int 関数(){
  〜
 }
}
  CREATE OR REPLACE PACKAGE パッケージ名
IS
変数宣言;
PROCEDURE プロシージャ名(引数);
FUNCTION 関数名(引数) RETURN 型;

CREATE OR REPLACE PACKAGE BODY パッケージ名
IS
変数宣言;
PROCEDURE プロシージャ名(引数)
IS
 〜
END プロシージャ名;
FUNCTION 関数名(引数)
IS
 〜
END 関数名;
BEGIN
 初期処理

END パッケージ名;
(defclass クラス名 (上位クラス名 …)
 ((メンバーA :type integer)
  (メンバーB :alocation :class又は:instance))
)

defgeneric

(defmethod 関数名 (引数1 (引数2 クラス名))
 (with-slots (メンバーA メンバーB) 引数2
   本体〜
))
#コンストラクター
sub new {
 my $class = shift;
 my $self = {
  メンバーA => 初期値,
  メンバーB => 初期値
 };
 bless $self, $class;
 return $self;
}
#コンストラクター
sub new {
 bless {
  メンバーA => 初期値,
  メンバーB => 初期値
 }, shift;
}
sub 関数 {
 $self = shift;
 〜
}
インターフェース       Public Interface インターフェース名

End Interface
        なし interface インターフェース名 extends 継承元インターフェース,…{
 〜
}
  interface インターフェース名 : 継承元インターフェース,…{
 〜
}
     
構造体(クラス)実体化 なし Dim 変数 As New クラス名

Set 変数 = New クラス名
Dim 変数
Set 変数 = New クラス名
  var 変数:レコード名;

var 変数: recoed
 フィールドA of integer;
 フィールドB of integer
end;
DCL
 1 変数名,
  2 メンバーA DEC(15,0) FIXED,
  2 メンバーB DEC(15,0) FIXED;
use クラス名;
my $変数 = new クラス名;
構造体名 変数;

構造体名 *p=(構造体名*)malloc(sizeof 構造体名);
クラス名 変数;

クラス名 *p=new クラス名;
クラス名 変数=new クラス名(); var 変数=new クラス名();     変数 レコード名; (setq 変数 (make-構造体名))

(setq 変数 (make-構造体名 :メンバーA 初期値A :メンバーB 初期値B))

(setq 変数 (コンストラクター名 初期値A 初期値B))

(setq 変数 (make-instance 'クラス名 :メンバーA 初期値A))
構造体(クラス)のメンバー使用 なし 変数.メンバー     変数.フィールド

ポインター変数^.フィールド
メンバー
メンバーの名前で直接使用可能
$変数->{メンバー}
$変数->関数(引数,…)
変数.メンバー

p->メンバー
変数.メンバー

p->メンバー
変数.メンバー 変数.メンバー
変数["メンバー"]
    変数.メンバー 取得→(構造体名-メンバー 変数)
設定→(setf (構造体名-メンバー 変数) 値)
自クラス なし Me.メンバー   Me.メンバー     $self->{メンバー}   this->メンバー this.メンバー   this.メンバー      
親クラス       MyBase.メンバー         親クラス::メンバー super.メンバー   base.メンバー      
共用体の宣言 なし       record
 case タグフィールド:char of
 'A': 変数A: array[1..2] of char;
 'B': 変数B: integer
end
DCL 変数A CHAR(2),
    変数B PIC'99' DEF 変数A;
  union{
 char 変数a[2];
 short 変数b;
}
union{
 char 変数a[2];
 short 変数b;
}
なし          
  DCL 変数 CHAR(8),
    部分 CHAR(4) DEF 変数 POS(3);
  union{
 char 変数[8];
 struct{
  char ダミー[2];
  char 部分[4];
 }
}
union{
 char 変数[8];
 struct{
  char ダミー[2];
  char 部分[4];
 }
}
部分範囲型 なし       var 変数: 0..39     なし なし なし         (型 0 39)
列挙型 なし     Enum 列挙名 As 型
列挙名 = 値
列挙名

End Enum
var 変数:(列挙名,列挙名,…)     typedef enum{ 列挙名=値,列挙名,… } 列挙型名; enum 列挙型名{ 列挙名=値,列挙名,… } なし   enum 列挙型名 : 型
{
 列挙名=値,列挙名,…
}

列挙型はSystem.Enumを継承する
     
              列挙型名 変数; 列挙型名 変数;     列挙型名 変数;      
      変数=列挙型名.列挙名;       変数=列挙名; 変数=列挙名;     変数=列挙型名.列挙名;      
関数型 なし     Delegate Function 名称(引数…) As 戻り型       typedef 戻り型 (*名称)(引数…); typedef 戻り型 (*名称)(引数…); Method   delegate 戻り型 名称(引数…);      
      AddressOf 関数名       名称 変数 = 関数名;              
プロパティ なし             なし なし なし   public 型 名称
{
 get; set;
}
     
Public Property Get プロパティ名
  プロパティ名 = 値
End Property

Public Property Let プロパティ名(引数)
  〜
End Property
Public ReadOnly又はWriteOnly Property プロパティ名() As 型
 Get
  Return 値
 End Get
 Set(ByVal 引数)
  〜
 End Set
End Property
public 型 名称
{
  get
  {
    return 値;
  }
  set
  {
    変数 = value;
  }
}

言語比較全般へ戻る / 参考文献 / プログラム記号比較 / 技術メモへ戻る
メールの送信先:ひしだま