مستندات PSScript / مرجع
مرجع زبان
هر آنچه تجزیهگر و ماشین مجازی میپذیرند: قواعد واژگانی، مقادیر، متغیرها، عملگرها، کنترل جریان و مدیریت خطای ساختیافته.
در این صفحه
مقادیر ثابت
| نوع | نمونهها | یادداشتها |
|---|---|---|
Int |
0, 42, 100 |
عدد صحیح ۶۴ بیتیِ علامتدار. |
Float |
2.45, 149.99 |
عدد ممیز شناور ۶۴ بیتی؛ یک مقدار ثابت بهمحض داشتن «.» اعشاری محسوب میشود. |
String |
"Hello" |
داخل دابلکوتیشن؛ نمیتواند چندخطی باشد. |
Bool |
true, false |
|
Null |
null |
مقدار غایب / تهی. |
Map |
{} |
یک مقدار ثابتِ نگاشتِ خالی؛ آن را با انتساب اندیسدار پر کنید. |
گریزهای رشته
درون یک مقدار ثابتِ رشته، بکاسلش این گریزها را معرفی میکند:
| گریز | تولید میکند |
|---|---|
\n | خط جدید |
\t | تب |
\\ | بکاسلش |
\" | دابلکوتیشن |
\{ \} | آکولادهای واقعی (کنار جاینگهدارهای {} در لاگ مفید است) |
متغیرها
یک متغیر محلی را با var تعریف کنید. متغیرها دامنهٔ بلوکی در بدنهٔ main یا rollback دارند و پویا-نوعاند — یک نام صرفاً هر مقداری را که آخرینبار به آن انتساب شده نگه میدارد.
var token = util$.uuid();
var total = 149.99;
var summary = {}; // empty map
total = total + 10; // reassignmentنگاشتها و اندیسگذاری
نگاشت مجموعهای با کلیدهای رشتهای است. یکی را با {} بسازید، سپس اعضا را با عملگر اندیس [ ] بخوانید و بنویسید. خواندن کلید موجود نبودن null میدهد. کلیدهای عددی به شکل رشتهایشان تبدیل میشوند.
var item = {};
item["name"] = "Pencil";
item["price"] = 2.45;
context$.log("name = {}", item["name"]); // Pencil
context$.log("qty = {}", item["qty"]); // null (absent)اندیسگذاری برای دادهٔ تودرتو زنجیر میشود، برای نمونه خواندن پارامترهای ورودیِ تودرتو:
context$.log("A.B = {}", param$["A"]["B"]);عملگرها
حسابی
عملگرهای + - * / روی اعداد کار میکنند. دو عدد صحیح یک عدد صحیح میدهند (برای / تقسیم صحیح)؛ اگر هر طرف اعشاری باشد نتیجه اعشاری است. تقسیم یک عدد صحیح بر 0 خطای زمان اجرا ایجاد میکند. حساب روی غیرعددها خطاست.
مقایسه
عملگرهای < > <= >= دو عدد را مقایسه میکنند و یک مقدار بولی میدهند. مقایسهٔ غیرعددها خطاست.
برابری
عملگرهای == و != میان انواع اسکالر کار میکنند. اعداد بر اساس مقدار مقایسه میشوند (1 == 1.0 برابر true است)؛ رشتهها، بولیها و null ساختاری مقایسه میشوند. انواع ناهمخوان (مثلاً یک رشته و یک عدد) صرفاً نابرابرند نه خطا — همین باعث میشود نگهبان رایج x == null روی هر مقداری امن باشد.
if (model == null) {
model = PSEntity(className);
model.identifier(idn);
}درستنمایی
شرطها در if و for از نظر درستنمایی ارزیابی میشوند: null و false نادرستنما هستند؛ هر مقدار دیگری درستنماست (از جمله 0 و رشتههای خالی).
کنترل جریان
if
یک شرط درون پرانتز که پس از آن یک بلوک میآید. بلوک هنگامی اجرا میشود که شرط درستنما باشد.
if (count > 100) {
router$.allow("bulk_connector");
}for
یک حلقهٔ شمارشیِ سبک C: مقداردهی اولیه، شرط، بهروزرسانی و سپس یک بدنه.
for (var i = 0; i < 50; i = i + 1) {
var e = PSEntity("com.paradicshift.test.GISTempData");
e.identifier("GIS-TEMP-%s".formatted(util$.uuid()));
data$.persist(e);
}مدیریت خطا
کار خطاپذیر را در try بپیچید. یک خطای زمان اجرا درون بلوک try به catch میپرد و پیام خطا (یک رشته) را به متغیر نامبرده مقید میکند. یک بلوک finally، در صورت وجود، همیشه آخر اجرا میشود — هنگام موفقیت، هنگام خطای گرفتهشده، یا هنگام انتشار خطای گرفتهنشده.
try {
context$.log("Starting risky step.");
data$.persist({}); // throws: not an entity
context$.log("skipped on error");
} catch (err) {
context$.log("The step failed: {}", err);
output$["status"] = "handled";
} finally {
context$.log("Cleanup always runs.");
}متدهای رشته
رشتهها دو متد درونساخت دارند.
.replace(from, to)
یک رونوشت برمیگرداند که در آن هر رخداد from با to جایگزین شده است.
var s = "Hello {a}";
context$.log("{}", s.replace("{a}", "abc")); // Hello abc.formatted(args…)
یک قالبساز به سبک printf. هر مشخصگر آرگومان بعدی را بهترتیب مصرف میکند:
| مشخصگر | معنی |
|---|---|
%s | مقدار بهصورت رشته |
%S | مقدار بهصورت رشتهٔ بزرگحرف |
%d | عدد صحیح (اعشاریِ مقدارِ صحیح هم پذیرفته میشود) |
%f | عدد (صحیح یا اعشاری) |
%b | true / false بر اساس درستنمایی |
%% | یک علامت درصدِ واقعی |
var url = "%s/icons/%s.svg".formatted(baseURL, name);
e.gis("location", "POINT(%f %f)".formatted(lon, lat));
کامنتها
هر دو شکل کامنتِ سبک C پشتیبانی میشوند و توسط واژهگر نادیده گرفته میشوند: