EVALイーバル関数

文字列を評価し値を返します。式や文を文字列として受け取り、実行するための関数です。

構文
  1. void = EVAL( 文字列 )
引数
文字列 (String)必須
評価(実行)する文字列
戻り値
結果得られた値を返す

A = Bは比較演算として処理、代入式の場合はA := Bとする

使い方

比較演算

文字列で与えられた式を評価し結果をブール値で返します。

以下はa1を代入し、EVAL関数で比較を行い結果をブール値で返します。

使える比較演算子は<=<>=>=<>です。詳細は演算子の優先順位(比較演算子)を参照。

UWSC
DIM a = 1
PRINT EVAL("a=1")      // 等しい
PRINT EVAL("a<=1")     // 以下
PRINT EVAL("a<1")      // より小さい
PRINT EVAL("a>=1")     // 以上
PRINT EVAL("a>1")      // より大きい
PRINT EVAL("a<>1")  // 等しくない
結果
プレーンテキスト
True
True
False
True
False
False

複数の条件を書く場合、論理演算子を使うことで記述できます。詳細は演算子の優先順位(論理演算子)を参照。

論理演算子を使用したときの戻り値はDouble型です。

UWSC
DIM a = 1
DIM b = 2

PRINT EVAL("a=1 AND b=2")
PRINT EVAL("a=1 OR b=2")
PRINT EVAL("a=1 XOR b=2")
結果
プレーンテキスト
1
1
0

論理演算子を使うとEVAL関数の戻り型がDouble型になります。TrueFalseの判定をするには問題ありませんが、ブール型で取得したい場合は、VARTYPE関数で変換します。

UWSC
DIM a = 1
DIM b = 2

PRINT VARTYPE(EVAL("a=1 AND b=2"), VAR_BOOLEAN)
PRINT VARTYPE(EVAL("a=1 OR b=2"), VAR_BOOLEAN)
PRINT VARTYPE(EVAL("a=1 XOR b=2"), VAR_BOOLEAN)
結果
プレーンテキスト
True
True
False

代入演算

変数に値を代入するには:=を使います。変数はEVAL関数よりも前に宣言しておく必要があります。

UWSC
DIM a
EVAL("a:=1")
PRINT a
結果
プレーンテキスト
1

EVAL関数を使うと予約語定数にも代入できてしまうので注意が必要です。

以下は予約語であるTRUEFALSEを代入します。

UWSC
PRINT TRUE
EVAL("TRUE:=FALSE")
PRINT TRUE
結果
プレーンテキスト
True
False

以下はpiに円周率の値を定数として宣言した後、EVAL関数で書き換えてます。

UWSC
CONST pi = ARCCOS(0) * 2

PRINT pi
EVAL("pi:=3")
PRINT pi
結果
プレーンテキスト
3.14159265358979
3

プログラム実行例

入力された文字列の計算をする

UWSC
結果
プレーンテキスト
INPUT:10>a=2
INPUT:10>b=3
INPUT:10>a*b
6
使用関数

CLKITEMで操作できる項目を取得

UWSC
HASHTBL variable
DIM array[-1]
DIM res = EMPTY

WHILE TRUE
	DIM %val% = ""
	FOR i = 0 TO LENGTH(variable) - 1
		%val% = %val% + variable[i, HASH_KEY] + "=" + variable[i, HASH_VAL] + " "
	NEXT
	DIM str = INPUT("計算式を入力してください。<#CR><#CR>変数<#TAB>" + %val% + "<#CR>結果<#TAB>" + res)
	IFB POS("=", str)  THEN
		DIM arr = SPLIT(str, "=")
		TRY
			variable[arr[0]] = EVAL(arr[1])
		EXCEPT
			FUKIDASI(TRY_ERRMSG)
			CONTINUE
		ENDTRY
	ENDIF
	FUKIDASI()
	res = EVAL(REPLACE(str, "=", ":="))
	IF res = EMPTY THEN BREAK
WEND
使用関数
解説

この記事は役に立ちましたか?

はい
いいえ
ご協力ありがとうございます。