Ninox 語言基礎

Ninox 的腳本語言用於撰寫資料庫中的公式、按鈕與觸發器。本頁彙整了寫下第一行程式碼之前需要了解的內容。

Ninox 是一種具型別、預先編譯的語言。這表示語言所處理的資料型別都是事先已知的,不像 JavaScript 之類的語言可以在不知道型別的情況下處理變數。

Ninox 的一大優點是:它產生的程式碼特別可靠,只有在非常罕見的情況下才會出錯。

供您參考:Ninox 腳本在執行前會先被編譯成 JavaScript。

巢狀程式碼與線性程式碼

每個函式或陳述式都會回傳一個值,而這個值可以直接當作參數傳給另一個函式或陳述式:

Ninox
var a := format(now(), "DD/MM/YYYY");

因此,您可以把一整組巢狀程式碼指派給一個變數:

Ninox
var a := true;
var b := if a then "true" else "false";

也可以把一段包在括號中的線性程式碼區塊的結果指派給 b:

Ninox
var b := (
    var a := true;
    if a then "true" else "false" end
);

要記住的重點是:在線性程式碼中,永遠是最後一行決定回傳的型別與值。在這個例子裡,b 會等於 10:

Ninox
var b := (
    var a := true;
    if a then "true" else "false" end;
    10
);

這樣的程式碼區塊要寫在括號中,而不是像迴圈或函式主體那樣寫在 do 和 end 之間。下面的程式碼在撰寫時就會被拒絕(「預期符號: as」):

Ninox
var b := do
    var a := true;
    if a then "true" else "false" end
end;

do … end 只有在 for … in … do、while … do 或 function f(…) do 之後才會開啟一個程式碼區塊。在其他任何位置(公式開頭、:= 之後、then 之後……),do 表示的是 do as server、do as transaction……:此時 Ninox 期待的是 as 這個字。

注意

透過 API(/query)傳送時,以 do 開頭而沒有 as 的查詢會回傳 null,不會給出任何錯誤訊息。撰寫測試查詢時容易踩到這個陷阱:(var n := 2; n) 回傳 2,do var n := 2; n end 什麼也不回傳。

(透過 Ninox 的 API 實測。)

方法

方法是接收一個或多個參數並回傳一個值的函式。參數與回傳值都是預先定義好的。

有些方法可以有多種參數組合:

  • date(year, month, day)
    回傳一個日期值。
  • date(myTimeValue)
    把給定的時間相關值轉換成日期值。若該值是數字,則代表以毫秒為單位的 Unix 時間。

完整的方法清單與依類別分類,請參閱 Ninox 官方文件。

指令

var、if then else、for、switch、select where 等等都是指令。

與方法不同,指令的回傳型別取決於它所包含的程式碼。例如,下面這段程式碼會回傳一個數字陣列 [1, 2]:

Ninox
for i in range(1,3) do
  i;
end;