| | | | | | | | | | | | | | | | |
|---|
| サブルーチン定義 | なし 普通にプログラムを書き、GOSUBで呼ばれてRETURNで終わればサブルーチン扱い。したがって、引数やローカル変数などという概念もない | Sub 名前() 〜 End Sub | Sub 名前() 〜 End Sub | Sub 名前() 〜 End Sub | procedure 名前; begin 〜 end; | 名前: PROC; 〜 END; | sub 名前 { 〜 } | void 名前(void){ 〜 } | void 名前(){ 〜 } | void 名前(){ 〜 } | function 名前(){ 〜 } | void 名前(){ 〜 } | CREATE OR REPLACE PROCEDURE 名前 IS 〜 BEGIN 〜PL/SQL〜 END; / SHOW ERR | CREATE OR REPLACEPROCEDURE 名前 IS 〜 BEGIN 〜PL/SQL〜 END; / SHOW ERR | なし |
|---|
Sub 名前(引数 As 型,…) 〜 End Sub | Sub 名前(引数,…) 〜 End Sub | Sub 名前(引数 As 型,…) 〜 End Sub | procedure 名前(引数,引数:型; 引数:型); ローカル変数等宣言; begin 〜 end; procedureの中にprocedureを宣言することも可 | 名前: PROC(引数,…); DCL 引数 型;… 〜 END; | sub 名前 { 〜 } 引数は特殊配列@_を使用 | void 名前(型 引数,…){ 〜 } | void 名前(型 引数,…){ 〜 } | void 名前(型 引数,…){ 〜 } | function 名前(引数,…){ 〜 } | void 名前(型 引数,…){ 〜 } | CREATE OR REPLACE PROCEDURE 名前(引数 IN 型,…) IS BEGIN 〜PL/SQL〜 END; / SHOW ERR IN,OUT,INOUTが使用可能 | CREATE OR REPLACEPROCEDURE 名前(引数 IN 型,…) IS 〜 BEGIN 〜PL/SQL〜 END; / SHOW ERR IN,OUT,INOUTが使用可能 |
RETURN | Exit Sub | | | | RETURN; | return; | return; | return; | return; | return; | return; | | |
| サブルーチン呼び出し | GOSUB 行番号 サブルーチンとしてその行を実行する。RETURNが無ければ、単なるGOTOと同じ。スタックは無駄に使うだろうけど | Call 名前 | | | 名前 | | 名前; &名前; | 名前(); | 名前(); | 名前(); | 名前(); | 名前(); | EXEC 名前 EXEC 名前()
sql*plus | 名前; 名前(); | なし |
|---|
Call 名前(引数,…) 名前 引数,… この2つの構文の違いは「引数の計算をどこでやるか」だったと思うが、詳細は忘れた | Call 名前(引数,…) 名前 引数,… | | 名前(引数,…) | CALL 名前(引数,…); | 名前(引数,…); &名前(引数,…); | 名前(引数,…); | 名前(引数,…); | 名前(引数,…); | 名前(引数,…); | 名前(引数,…); | EXEC 名前(引数,…)
CALL 名前(引数,…); sql*plus | 名前(引数,…); 名前(引数名=>値,…); |
名前 引数名:=値,… 引数名を明示することで、順序を好きに変えられる |
| 関数定義 | なし | Function 名前(引数 As 型,…) As 戻り型 〜 End Function | Function 名前(引数,…) 〜 End Function | Function 名前(引数 As 型,…) As 戻り型 〜 End Function | function 名前(引数,引数:型; 引数:型):戻り型; 宣言部; begin 〜 end; | | sub 名前{ 〜 } | 戻り型 名前(型 引数,…){ 〜 } | 戻り型 名前(型 引数,…){ 〜 } | 戻り型 名前(型 引数,…){ 〜 } | function 名前(引数,…){ 〜 } | 戻り型 名前(型 引数,…){ 〜 } | CREATE OR REPLACE FUNCTION 名前(引数 IN 型,…) RETURN 型 IS 〜 BEGIN 〜PL/SQL〜 END; / SHOW ERR INのみ使用可能 | CREATE OR REPLACEFUNCTION 名前(引数 IN 型,…) RETURN 型 IS 〜 BEGIN 〜PL/SQL〜 END; / SHOW ERR INのみ使用可能 | (defun 名前 (引数 …) 本体〜)
暗黙の(block 名前 〜)が作られるので、return-fromが使える |
|---|
| なし | 名前=戻り値 Exit Function | 名前=戻り値 Exit Function | Return 値 VBAと同じ返し方も可 | 名前:=戻り値 | | return 戻り値; 又は関数の最後に値だけの行を置く | return 戻り値; | return 戻り値; | return 戻り値; | return 戻り値; | return 戻り値; | RETURN 戻り値; | RETURN 戻り値; | (return-from 名前 戻り値) |
| 関数呼び出し | なし | 名前(引数,…) 名前(引数,…,引数名:=値,…) | 名前(引数,…) | | 名前(引数,…) 引数がない場合は、名前のみ | | 名前(引数,…) &名前(引数,…) | 名前(引数,…) | 名前(引数,…) | 名前(引数,…) | 名前(引数,…) | 名前(引数,…) | 名前(引数,…)
CALL 名前(引数,…) INTO :バインド変数; sql*plus | 名前(引数,…) 名前(引数名=>値,…) | (名前 引数 …) (apply #'名前 引数 …) (funcall 名前 引数 …) |
|---|
| 引数の既定値 | | Function 名前 (Optional ByVal 引数 As Variant = 省略時値) 〜 End Function 引数の型がVariantで省略時値を指定しない場合は、IsMissing(引数)で呼び出し時に省略されたかどうかを判断できる | | Function 名前 (Optional ByVal 引数 As 型 = 省略時値) 〜 End Function | | | | なし | 戻り型 名前(型 必須引数,…,引数=既定値){ 〜 } | なし | なし | | | CREATE OR REPLACE FUNCTION 名前(必須引数,…,引数:=既定値) 〜 | (defun 名前 (必須引数 … &optional (引数 既定値)) 本体) |
|---|
| 可変引数 | なし | | | | | | そもそもが可変引数しか無い | 戻り型 名前(型 先頭引数,...){ va_list ap; va_start(ap,先頭引数); va_arg(ap,型)で使用 va_end(); } | 戻り型 名前(型 先頭引数,...){ va_list ap; va_start(ap,先頭引数); va_arg(ap,型)で使用 va_end(); } | 戻り型 名前(型 先頭引数,型... 変数){ 変数が配列として扱える } | function 名前(引数,〜){ argumentsを使用 } | 戻り型 名前(〜, params 型[] 変数) { 〜 } paramsを付けた最後の変数だけ可変引数になる | | | (defun 名前 (引数 … &rest リスト変数) 本体) |
|---|
| | | | | | | | | | | | | | | | |
|---|
| 静的初期化 | | | | Shared Sub New() 〜 End Sub | | | | | | static{ 〜 } | | | | | |
|---|
| コンストラクタ | | | | Sub New(引数…) MyBase.New(引数…) 〜 End Sub | | | sub new { my $class = shift; my $self = {〜}; 〜 return bless $self, $class; } | | クラス名(引数…) : 上位クラス名(引数), …{ 〜 } | クラス名(引数…){ super(引数…); 〜 } | | | | | |
|---|
| デストラクタ | | | | | | | sub DESTROY { my $self = shift; 〜 } | | ~クラス名() { 〜 } | なし | | | | | |
|---|
| ファイナライザー | | | | Sub Finalize() 〜 End Sub | | | | | | protected voidfinalize(){ 〜 } | | ~クラス名() { 〜 } | | | |
|---|
| 最初に呼ばれるPG | RUN→最も若い行番号から実行
RUN 行番号→その行から実行 | イベントや、指定したマクロが実行される | ソースの先頭 | | programの本体 | OPTIONS(MAIN)が指定されているPROC | ソースの先頭 | main関数 | (C++はmain関数だがMFCでは隠蔽されている) | javaコマンドで指定したクラスのmain関数 | ソースの先頭 | | | | ソースの一番外側の関数 |
|---|
| 終了命令 | END | | WScript.Quit | Environment.Exit(値) Application.Exit()…ウィンドウアプリの終了 | | | die; | exit(値); | | System.exit(値); | | Environment.Exit(値); Application.Exit();…ウィンドウアプリの終了 | EXIT 〔戻り値〕 〔COMMIT |ROLLBACK〕 | | |
|---|
| | | | | | | | | | | | | | | | |
|---|
| エラー(例外)処理定義 | ON ERROR GOTO 行番号 エラーが起きたらその行へ飛べ、という宣言。
ON ERROR GOTO 0 →エラー処理へ飛ぶのを無効にする。(0は行番号のようにも見えるが、通常のプログラムは最も若い行番号から実行されるので、行番号0がエラー処理であるのはおかしいとの考えにより0は特別扱い) | On Error GoTo ラベル On Error GoTo 0 | On Error Resume Next On Error GoTo 0 | Try 〜 Catch e As 型 〜 Finally 〜 End Try | | ON エラー種類名 BEGIN; 〜 END; →PL/Iに用意されているエラーに対して1つずつハンドラを作れる | | なし | try{ 〜 }catch(型 e){ 〜 } 型は、intであろうがchar*であろうが何でもよい | try{ 〜 }catch(例外クラス e){ 〜 }finally{ 〜 } この例外クラスはThrowableから派生している必要がある | try{ 〜 }catch(e){ 〜 }finally{ 〜 } | try{ 〜 }catch(例外クラス名 e){ 〜 }finally{ 〜 } catchは色々省略可能
catch(例外クラス名){〜} catch{〜} | WHENEVER OSERROR EXIT OS.SQLCODE ROLLBACK;
WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK; | DECLARE 例外名 EXCEPTION; BEGIN 〜 EXCEPTION WHEN 例外名OR 例外名… THEN 〜; WHEN OTHERS THEN 〜; END; 例外を宣言しておき、例外処理部に処理を列挙する。 | (catch 'タグ 〜) |
|---|
ERR→エラー番号が入っている | Err.Number→エラー番号が入っている
Err.Description→エラーメッセージ | Err.Source Err.Number Err.Description | | | | | | | e.getCause()→原因となった例外を取得
e.getMessage()→エラーメッセージを取得 | eがErrorクラスの場合、 e.name→名前
(e.number>>16)&0x1fff→機能識別符号
e.number&0xffff→エラーコード
e.description→description
e.message→descriptionと同じっぽい | | SQLCODE→エラー番号が入っている
SQLERRM→エラーメッセージが入っている
SQLERRM(エラーコード)→コードに該当するエラーメッセージを取得 | |
RESUME NEXT →エラーが起きた次の命令へ戻る
RESUME 行番号 →エラーを無かったことにして、その行へ飛ぶ
RESUME 0 →エラーが起きた命令を再実行 | Resume Next →エラーが起きた次の命令へ戻る
Resume ラベル →エラーを無かったことにして、そのラベルへ飛ぶ
Resume →エラーが起きた命令を再実行 | | Throw e | | | | | | throw e; →上位ルーチンへ例外を渡す | throw e; →上位ルーチンへ例外を渡す | throw e; →上位ルーチンへ例外を渡す
throw; →上位ルーチンへcatchした例外を渡す | | catchの戻り値は、throwの値 |
| エラー(例外)発生 | ERROR エラー番号 | Error エラー番号 Err.Raise エラー番号,,"エラーメッセージ" | Err.Raise エラー番号 | | | | | なし | throw 値; catchの型に合致する値であれば何でもよい。return文と同様 | throw例外; 例外クラスのインスタンス「new 例外クラス名()」等 | throw 文字列; throw new Error((機能識別符号<<16)+エラーコード, メッセージ文字列); | throw 例外; | | RAISE 例外名; RAISE_APPLICATION_EXCEPTION(番号, 'メッセージ');…番号は-20000〜-20999の範囲。SQLCODEは1(ユーザー定義例外)になる | (throw 'タグ 値)
(error "メッセージ") (cerror "継続メッセージ" "エラーメッセージ") |
|---|
| アサート | | Debug.Assert 正常条件 | | Debug.Assert(正常条件) Debug.Assert(正常条件, "メッセージ", "詳細") | | | | | | assert 正常条件 式:メッセージ; | | | | | (assert 条件 "メッセージ") |
|---|
| | | | | | | | | | | | | | | | |
|---|
| 外部プログラム実行 | | Dim p As Double p = Shell("実行PG", vbNomralFocus) pはタスクID | | | | | | pid_t pid = fork(); if (pid < 0) { //fork失敗 return -1; } else if (pid == 0) { //子プロセス execl("実行PG", "arg0(実行PG)", "arg1"…, NULL); または execv("実行PG", 引数の配列); //exec系は、ここに来たらエラー perror("exec"); return -2; } //親プロセスは、子プロセスの終了を待つ int status; wait(pid, &status, 0);
system("シェルコマンド名 引数…"); | ShellExecute | Process p = Runtime.getRuntime().exec("実行PG arg1…"); p.waitFor(); //子プロセスの終了待ち int r = p.exitValue(); //プロセスが終了していないと例外が発生する | | | | | |
|---|