「OpenOffice.org Basic」の版間の差分

削除された内容 追加された内容
参考URL 追加
→‎文法: 項目: 論理演算を追加
71 行
;注釈 :
:ここでの、規則に違反する名前定義もできますが、従った方がよいと思います。例えばですが、256 文字の変数名は定義できます。'[2Name]' も変数名として有効です (2.0.0 では無効でした。)。問題は、'[日本語]' などのような名前定義も有効だということです。Excel 互換として、'日本語' と単純に定義できればサポートされているのだと考えられますが、'[日本語]' との定義であるため、少なからず不安を覚えます。大括弧の意味として、スペースを含んだ名前定義のためだけなのか、シンボル名として使える文字種の拡張も含んでの意味なのか判断できなかったからです。ヘルプでは、ただスペースを含んだ変数名の定義として書かれていました。ただし、現時点で '[日本語] = 1' のような名前定義は可能です。
 
 
=== 変数 ===
92 ⟶ 93行目:
`明確な変数宣言なしに、その使用はできません。
END SUB
 
 
==== 変数の宣言 ====
120 ⟶ 122行目:
 
型と型指定子については、次項で説明します。
 
 
==== 変数の型 ====
337 ⟶ 340行目:
MyBook.ISBN = “4-480-08045-7”
END SUB
 
 
==== 配列 ====
371 ⟶ 375行目:
その他に、配列に係わる関数として、'IsArray()'、'UBound()'、'LBound()' が用意されています。
'IsArray()' は、変数が配列かどうかを調べ、'UBound()'、'LBound()'は、配列の各次元の最大・最小のインデックスを返します。
 
 
==== 有効範囲 ====
388 ⟶ 393行目:
DIM PUBLIC HelpMessage AS String ' すべてのモジュールで有効です。
DIM PRIVATE UserName AS String ' 現在のモジュールでのみ有効です。
 
 
==== 変数の再定義 ====
399 ⟶ 405行目:
REDIM v(0 to 10)
END FUNCTION
 
 
=== 定数 ===
425 ⟶ 432行目:
PRINT ConstantVariable
END SUB
 
 
=== プロシージャ (Procedure) ===
452 ⟶ 460行目:
END FUNCTION
|}
 
 
==== 呼び出し方 ====
プロシージャの呼び出し方は、定義名を記述するだけです。仮に名前が、'Foo' であった場合、'Foo()' や 'Foo' と記述します。値を渡す必要があるときには、定義名の後の括弧の中に、渡したい数だけ、値か変数を記述します。複数になる場合には、”,” (コンマ)で区切る必要があります。
 
 
==== 引数 ====
引数とは、プロシージャ呼出し時に渡す値のことです。'Foo(a, b, c)' の場合、a、b、cが引数となります。
 
 
===== 引数の定義 =====
477 ⟶ 488行目:
'処理内容
END SUB
 
 
===== 値渡し・参照渡し =====
513 ⟶ 525行目:
END SUB
|}
 
 
==== 定義の仕方 ====
529 ⟶ 542行目:
PRINT “Hello ” & Name
END SUB
 
 
===== 関数 =====
552 ⟶ 566行目:
Outlay = x
END FUNCTION
 
 
=== 算術演算 ===
576 ⟶ 591行目:
'MOD' ですが、この優先順位は、'+'、'-' より高く、'*'、'/'、'^'より低くなっています。
従って、'2 + 7 MOD 3' は、3 になります。'7 MOD 5 * 3' では、7 となります。
 
 
=== 比較演算 ===
594 ⟶ 610行目:
i = n > 0
END SUB
 
 
=== 論理演算 ===
論理演算とは、真(1)か偽(0)、いずれかの状態を掛け合わす演算のことです。プログラミングでは、値を2進数で考え、各ビットに対し演算を行う、ビット演算のことを指しています。
 
この論理演算は、ブール型どうしの演算、ビットどうしの演算、両方に利用します。
 
演算子は、全部で6つ用意されており、それぞれ、論理積 (AND)、論理和 (OR)、排他的論理和 (XOR)、否定 (NOT)、論理等価演算 (EQV)、論理包含演算 (IMP)となります。
 
 
==== 論理積 (AND) ====
論理積とは、双方の値が真(1)の時のみ、真(1)となる演算です。
 
 
構文は、次のようです。
 
値 AND 値
 
 
真理値表は、以下のようになります。
 
{| style="Border-Collapse:Collapse" border="1" cellpadding="5"
|+ 真理値表
|-
| rowspan="2" colspan="2" |
| colspan="2" align="center" | 右辺値
|-
| bgcolor="#EEEEEE" | TRUE (1)
| bgcolor="#EEEEEE" | FALSE (0)
|-
| rowspan="2" align="Right" valign="center" | 左辺値
| bgcolor="#EEEEEE" | TRUE (1)
| TRUE (1)
| FALSE (0)
|-
| bgcolor="#EEEEEE" | FALSE (0)
| FALSE (0)
| FALSE (0)
|}
 
 
ビット演算では、次のようになります。
 
0000000000001111
15 AND 12 = 0000000000001100
----------------
0000000000001100 = 12
0000000000101110
46 AND 55 = 0000000000110111
----------------
0000000000100110 = 38
 
 
==== 論理和 (OR) ====
論理和とは、一方の値が真(1)となれば、真(1)となる演算です。
 
 
構文は、次のようです。
 
値 OR 値
 
 
真理値表は、次のようになります。
 
{| style="Border-Collapse:Collapse" border="1" cellpadding="5"
|+ 真理値表
|-
| rowspan="2" colspan="2" |
| colspan="2" align="center" | 右辺値
|-
| bgcolor="#EEEEEE" | TRUE (1)
| bgcolor="#EEEEEE" | FALSE (0)
|-
| rowspan="2" align="Right" valign="center" | 左辺値
| bgcolor="#EEEEEE" | TRUE (1)
| TRUE (1)
| TRUE (1)
|-
| bgcolor="#EEEEEE" | FALSE (0)
| TRUE (1)
| FALSE (0)
|}
 
 
ビット演算では、次のようになります。
 
0000000000001111
15 OR 12 = 0000000000001100
----------------
0000000000001111 = 15
0000000000101110
46 OR 55 = 0000000000110111
----------------
0000000000111111 = 63
 
 
==== 排他的論理和 (XOR) ====
排他的論理和とは、両方の真偽が異なる場合に真(1)となる演算です。
 
 
構文は、次のようです。
 
値 XOR 値
 
 
真理値表は次のようになります。
 
{| style="Border-Collapse:Collapse" border="1" cellpadding="5"
|+ 真理値表
|-
| rowspan="2" colspan="2" |
| colspan="2" align="center" | 右辺値
|-
| bgcolor="#EEEEEE" | TRUE (1)
| bgcolor="#EEEEEE" | FALSE (0)
|-
| rowspan="2" align="Right" valign="center" | 左辺値
| bgcolor="#EEEEEE" | TRUE (1)
| FALSE (0)
| TRUE (1)
|-
| bgcolor="#EEEEEE" | FALSE (0)
| TRUE (1)
| FALSE (0)
|}
 
 
ビット演算では、次のようになります。
 
0000000000001111
15 XOR 12 = 0000000000001100
----------------
0000000000000011 = 3
0000000000101110
46 XOR 55 = 0000000000110111
----------------
0000000000011001 = 25
 
 
==== 否定 (NOT) ====
否定とは、真(1)なら偽(0)、偽(0)なら真(1)となる演算です。
 
 
構文は、次のようです。
 
NOT 値
 
 
ビット演算では、次のようになります。
 
NOT 15 = NOT 0000000000001111 = 1111111111110000 = -16
NOT 12 = NOT 0000000000001100 = 1111111111110011 = -13
 
 
==== 論理等価演算 (EQV) ====
論理等価演算とは、双方が真(1)、または、双方が偽(0)となった時のみ真(1)となる演算です。
 
 
構文は、次のようです。
 
値 EQV 値
 
 
真理値表は、次のようになります。
 
{| style="Border-Collapse:Collapse" border="1" cellpadding="5"
|+ 真理値表
|-
| rowspan="2" colspan="2" |
| colspan="2" align="center" | 右辺値
|-
| bgcolor="#EEEEEE" | TRUE (1)
| bgcolor="#EEEEEE" | FALSE (0)
|-
| rowspan="2" align="Right" valign="center" | 左辺値
| bgcolor="#EEEEEE" | TRUE (1)
| TRUE (1)
| FALSE (0)
|-
| bgcolor="#EEEEEE" | FALSE (0)
| FALSE (0)
| TRUE (1)
|}
 
 
ビット演算では次のようになります。
0000000000001111
15 EQV 12 = 0000000000001100
----------------
1111111111111100 = -4
0000000000101110
46 EQV 55 = 0000000000110111
----------------
1111111111100110 = -26
 
 
==== 論理包含演算 (IMP) ====
論理包含演算とは、一つ目の値が真(1)で、二つ目の値が偽(0)の時のみ、偽(0)となる演算です。
 
 
構文は、次のようです。
 
値 IMP 値
 
 
真理値表は、次のようになります。
 
{| style="Border-Collapse:Collapse" border="1" cellpadding="5"
|+ 真理値表
|-
| rowspan="2" colspan="2" |
| colspan="2" align="center" | 右辺値
|-
| bgcolor="#EEEEEE" | TRUE (1)
| bgcolor="#EEEEEE" | FALSE (0)
|-
| rowspan="2" align="Right" valign="center" | 左辺値
| bgcolor="#EEEEEE" | TRUE (1)
| TRUE (1)
| FALSE (0)
|-
| bgcolor="#EEEEEE" | FALSE (0)
| TRUE (1)
| TRUE (1)
|}
 
 
ビット演算では次のようになります。
(数値で演算すると成り立ちませんでしたが、値に変数を使うと成り立ちます。)
 
0000000000001111
15 IMP 12 = 0000000000001100
----------------
1111111111111100 = -4
0000000000101110
46 IMP 55 = 0000000000110111
----------------
1111111111110111 = -9
 
 
=== 条件分岐 ===
607 ⟶ 868行目:
'IF' では、条件式の値により真偽を判定するため、数値以外の値をとることはできません。
一方、'SELECT' では、'CASE' に続くものとして、数値以外の値をとることができます。
 
 
==== IF ====
675 ⟶ 937行目:
END IF
END SUB
 
 
==== SELECT ====
713 ⟶ 976行目:
そのため、'IF' において、'IF Lang = "日本語" THEN' の表現を、'CASE "日本語"' として、
短く、わかりやすく表現できます。
 
 
=== 繰り返し処理 ===
724 ⟶ 988行目:
 
繰り返し処理から抜けるには、'EXIT' キーワードを使用します。
 
 
==== FOR ====
752 ⟶ 1,017行目:
NEXT
END SUB
 
 
==== WHILE ====
772 ⟶ 1,038行目:
END SUB
 
==== DO ====
'DO ... LOOP' 文は、条件式を用いた繰り返しを行います。