0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UWSCRAdvent Calendar 2023

Day 18

UWSCRの組み込み関数:スクリプト制御系

Last updated at Posted at 2023-12-17

スクリプト制御系関数の変更点および新規に実装された関数についての解説です。

変更点

eval

UWSCとは異なり式だけではなく文も評価できるようになりました。UWSCではスクリプト評価とevalによる評価の動作に細かな差がありましたが、UWSCRではスクリプト評価と同等の評価を行います。また、UWSCではeval内で代入を行うには:=と記述する必要がありましたが、UWSCRでは=による代入も可能です (:=による代入も動作します)。


dim a = 1
// eval内での代入
eval("a = 5") // = で代入可能
print a // 5
eval("a := 2") // := でもOK
print a // 2

// 文の評価
eval("if a > 3 then a -= 1 else a += 1")
print a // 3

sleep

引数として関数を渡した場合、関数の実行結果が真であればsleepし続けるようになります。

C:\test\test.uws
print "hoge.txtが生成されるのを待ちます"

sleep(|=> ! fopen("hoge.txt", F_EXISTS)|)

print "hoge.txtが見つかりました"
powershell
# 上記スクリプト実行中に以下を実行すればsleepが解除される
ni -Path C:\test -Name hoge.txt

新規

エラー関連

raise

任意の実行時エラーを発生させられます。

if ! fopen("hoge.txt", F_EXISTS) then
    raise("hoge.txtがありません", "ファイル読み込みエラー")
    // [ファイル読み込みエラー] hoge.txtがありません
endif

fid = fopen("hoge.txt", F_READ)

tryで捕捉することもできます。

try
    raise("tryで捕捉できる")
except
    print TRY_ERRLINE // test.uws 2行目: raise("tryで捕捉できる")
    print TRY_ERRMSG  // [ユーザー定義エラー] tryで捕捉できる
endtry

assert_equal

2つの値を比較し、一致しない場合は実行時エラーになります。

dim a = b := 5
dim c = 3

assert_equal(a, b) // 一致するので何も起こらない
assert_equal(a, c)
// [assert_equalエラー] left: 5; right: 3

非同期処理

Task, WaitTask

これらの関数を用いることでユーザー定義関数を非同期に実行することができます。詳しくはUWSCRの新機能:非同期処理 #UWSC - Qiitaを参照してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?