挑战TJS Section1.5:完成输入

挑战TJS Section1.5:完成输入--使用inputString()方法来输入内容

正篇

Yuu:我们现在可以显示时间了。
Yuni:对,已经完成了。
Yuu:这次我会提升它的功能。
Yuni:哦~
Yuu:在Section0.3中,我提到了要在电子表中添加一个闹表。
Yuni:对。
Yuu:这回我们为这个目标来做准备。
Yuni:准备…什么样的?
Yuu:在这里呢,闹表的功能是“设置几分钟后闹表会响”。我们首先要显示一个可以输入内容的窗口,如果一个输入了数字,比如100,我们会计算一个从现在开始100分钟后的时间点作为响铃时间。
Yuni:额…我感觉这提升得有点快了…
Yuu:并没有啊。文字输入使用窗口来表示,100分钟后的计算也只是普通的计算而已。
Yuni:这样啊…
Yuu:放轻松放轻松。首先我们先创建一个能输入字符的窗口。它使用System类中的inputString()方法。这看起来像这样。
/接受输入并输出其内容的脚本/

var message = System.inputString("inputString方法测试", "请输入数字", "");
System.inform(message, "输入的值");

Yuu:那么,先执行一下比较好。
Yuni:嗯。
/执行结果1/

Yuni:我看到这个窗口了。KAG的input标签也会显示这样的一个窗口,输入的字符会绑定到设置的name属性。
Yuu:嗯,TJS的和KAG的是一样的窗口。其实KAG的input标签内部使用的就是inputString()方法。
Yuni:哦我明白了。怪不得它们很像 。
Yuu:嗯,输入一些内容并按下OK按钮。通常来说,任意字符串都可以使用的。不过因为这次需要一个数值,请注意这点。
Yuni:好。那我输入“100”好吧。
/执行结果2/

Yuni:嗯,“100”正确地显示了出来。
Yuu:Okay,下面让我们解释如何使用inputString()方法。
Yuni:好。
Yuu:首先,有三种数据可以传入inputString()方法。并且,我们称传入方法的数据为参数(英:Augument,日:引数 (ひきすう))
Yuni:参数?
Yuu:嗯。它有点像KAG标签中的属性值。
Yuni:哦,那些属性的确是传给标签的数据。
Yuu:对。不过呢,参数和属性值的区别是你无需指定参数的名字,顺序代表了参数的对应。参数之间使用逗号分隔而不是空格。译者注:KAG中我们需要自行指定传入数据对应的变量,而TJS中传入数据的顺序会自动对应到变量中。变量的顺序由方法编写者决定。 三个传入inputString()方法的参数如下所示:

参数1 窗口的标题
参数2 显示在输入框上面的提示文字
参数3 输入框占位内容:在输入内容前,输入框中灰色显示的提示内容

Yuu:第一个参数是最左边的,第二个在中间,第三个在最右边。
Yuni:嗯…第一个参数的内容是“inputString方法测试”,因此它显示在了窗口标题的位置。第二个参数的内容是“请输入数字”,它显示在了输入框的上面。那…第三个参数的“”是个啥?
Yuu:这是一个空字符串,虽然它里面什么字符也没有,但是它是一个合法的字符串。这里我们不需要在输入框中显示什么内容,但是必须要传给第三个参数点什么内容,因此我这里传了一个空字符给第三参数。
Yuni:我明白了。还有一个,这次用的inform()方法有两个参数,而我记得这个方法只有一个参数的。
Yuu:因为到目前为止我们只是用了第一参数,然而它的确是有两个参数。
Yuni:这样的吗?
Yuu:嗯。顺便说一下,第二个参数是显示在窗口中的标题。
Yuni:哦是吗。之前标题显示的都是“Information”,这次显示的是“输入的值”。
Yuu:就算只有一个参数,消息框也能正常显示的原因是这个方法中有一些“可选”参数。
Yuni:可选…举个栗子的话,如果你在image标签中省略page属性,那么fore层会被使用?译者注:在KAG中,任何一张图片都要依附于一个图层,默认的图层就是fore。如果我们不指定使用的图层,fore图层会被使用。
Yuu:对,就是这样。在写程序前,我先问一个问题。
Yuni:嗯…好
Yuu:执行以下代码,输入“100”并按下OK按钮,你觉得会显示什么?

var value = System.inputString("inputString方法测试", "请输入数字", "");
var plus1 = value + 1;
System.inform(plus1);

Yuni:嗯…我输入的是“100”,所以100会赋值给value。然后value加1并赋值给plus1,然后就输出了…101。
Yuu:让我们实际执行一下。
Yuni:好。
/执行结果/

Yuni:额…什么?1001!为什么?
Yuu:嘛…关于为什么你需要回忆一下上次介绍的加法
Yuni:啊!应该是value是一个字符串类型,所以并不是100+1=101,而是"100" + 1 = "1001"
Yuu:没错。inputString()方法会将得到的输入考虑为一个字符串,即使输入的内容是数字。所以value就是个字符串类型了。
Yuni:因为value+1变成了“字符串+数字”的情况,数字“1”就自动转换成了字符串“1”,因此plus1就是个字符串类型。
Yuu:没错。所以呢,为了计算100分钟后的时间,我们需要将value转成数值类型。
Yuni:可以这么做吗?
Yuu:当然,要是做不了的话这个项目就结束了。
Yuni:哦哦。
Yuu:将字符串转成数值需要一个操作符(英:operator,日:演算子(えんざんし))。
Yuni:操作符?
Yuu:所以,下回就是操作符的介绍。
Yuni:啊,下次见了…

要点

  1. inputString(title, hint, placeholder)方法会弹出一个窗口,内部具有一个输入框。我们可以借此输入一些内容。方法具有三个参数:title是该输入窗口的标题,hint是显示在输入框上方的提示内容,placeholder是预先放置在输入框内部的内容,类似于输入内容的默认值。我们可以修改输入框中的已有内容或者删掉重新输入。方法的返回值是一个字符串,无论输入的内容是什么。字符编码与运行环境相同。

  2. 正因为输入的内容是字符串,如果我们需要进行数值计算的话,需要将输入的内容,转换成数值。需要操作符的协助。

  3. 方法接受的参数被称为“参数”。参数可以有多个,传入的顺序必需和定义的顺序相同,否则会有对应错误。有一些参数被称为“可选参数”,即使不指定的话也会有一个默认值。对于大多数参数,都是需要指定一个值的。关于方法是否具有可选参数,由方法的编写者决定。详情参考文档说明。

一条评论

  1. […] Yuu:这次,我们首先修改1.5节编写的脚本,这样我们就可以将输入的内容当做数值处理了。 Yuni:因为inputString()将输入的数值当做字符串,因此value和plus1也都是字符串类型,对吧? Yuu:没错。通过我们1.6节的介绍,现在我们知道了将字符串转成数值的方法了,现在你可以让value和plus1也是整数类型了。 Yuni:嗯,你可以使用单目运算符“+”将字符串转成数值。 Yuu:没错。让我们来重写这个脚本。 Yuni:嗯…如果我们把value转成整数了,那plus1也是整数… /将输入内容作为整数处理的脚本/ […]

留下评论