当前位置: 首页 > 工具软件 > mobl > 使用案例 >

mobl-lang 的反应性编程

湛同
2023-12-01

mobl-lang是一门针对移动应用开发的语言,接下来介绍该语言的反应性编程特性,下面是一段简单的代码,看看是什么意思?

screen root() {
  var amount     =  20
  var percentage =  10

  header("Tip calculator")
  group {
    item { numField(amount, label="amount") }
    item { numField(percentage, label="percentage") }
    item { "$" label(amount * (1 + percentage/100)) }
  }
}

该代码用户通过调节前两个numField中的值,会实时改变label的显示值。
先看第一段代码

screen root() { ... }

这句代码意思是一个没有参数的名叫root的屏幕,屏幕可以有0或者更多的参数。

var amount     = 20
var percentage = 10

这段代码定义了屏幕的两个变量,这些变量只能由该屏幕访问,虽然mobl-lang是类型语言,有时也不需要准确指明,因为类型可以被推测出来,实际上,上述的代码可以变成

var amount     : Num = 20
var percentage : Num = 10

var表示变量variable,变量的值可以由两种方式改变,直接被赋予新值,或者被绑定到控件上。

header("Tip calculator")

这一行实例化header控件,该控件来自mobl::ui::generic 包。控件可以有两类参数,普通参数和body元素。普通参数通过括号里面的内容传给控件,header控件的第一个参数叫做“text”,因此上述代码可以写作

header(text="Tip calculator")

第二类body元素见下一行代码,这是一句对group控件的实例化,group没有被传进任何普通参数,但他有三个item元素。

group {
  item { ... }
  item { ... }
  item { ... }
}

item元素也是一个控件,拥有一个numField控件元素,item只能在group控件中,不能单独存在。numField是一个输入控件,有两个普通参数,包括amount变量和label控件。将变量传给numField控件,就是将amount与numField进行绑定,任意一边的变化都会引起另一边的变化,下一句代码类似。对控件值的操作会引起变量的变化,变量的变化也有可能引起其他绑定该变量的控件。

item { numField(amount, label="amount") }
item { numField(percentage, label="percentage") }

最后一行代码,item包含两个控件,第一个是“$”,第二个是label控件,label被传进一个表达式作为变量,同样该表达式也与label绑定在一起,表达式值的变化引起label屏幕显示值的变化,不过这是一个单向绑定。

item { "$" label(amount * (1 + percentage/100)) }
 类似资料: