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;