了解 JavaFX Script 编程语言 --第 2 课:编写脚本

来源:互联网 发布:excel查找同列重复数据 编辑:程序博客网 时间:2024/05/15 23:49
既然环境已设置完毕,现在是时候编写您自己的第一个脚本了!在本课中,我们将通过编写一个简单的计算器应用程序来学习一些编程基础知识。该实践过程将向您介绍:编译源代码、运行应用程序、声明脚本变量、定义和调用脚本函数、向脚本函数传递参数以及访问命令行参数。

 

目录

 

编写一个简单的计算器
声明脚本变量
定义和调用脚本函数
向脚本函数传递参数
从脚本函数返回值
访问命令行参数
 

首先单击 calculator.fx 并将显示的内容保存到一个文件中。您的文件中应当包含以下代码:

def numOne = 100;
def numTwo = 2;
var result;

add();
subtract();
multiply();
divide();

function add() {
result = numOne + numTwo;
println("{numOne} + {numTwo} = {result}");
}

function subtract() {
result = numOne - numTwo;
println("{numOne} - {numTwo} = {result}");
}

function multiply() {
result = numOne * numTwo;
println("{numOne} * {numTwo} = {result}");
}

function divide() {
result = numOne / numTwo;
println("{numOne} / {numTwo} = {result}");
}
 

JavaFX Script 编程语言是编译型语言,这意味着您编写的任何源代码都必须首先转换为 Java 字节码(Java 虚拟机所采用的语言)才能在系统上运行。

以下命令将编译计算器脚本:

javafxc calculator.fx
 

在编译之后,您将发现相应的 Java 字节码已经生成并且放置在一个名为 calculator.class 的文件中。您还会注意到创建了另一个文件:calculator$Intf.class。该支持文件是运行此应用程序所必需的,您可以将其忽略,但不要删除它。

现在您可以使用以下命令运行经过编译的类(在 Java 虚拟机中):

javafx calculator
 

输出为:

100 + 2 = 102
100 - 2 = 98
100 * 2 = 200
100 / 2 = 50
 

此应用程序可能很小,但它向您介绍了一些重要的编程语言结构。了解这些结构是掌握 JavaFX Script 编程语言的第一步。


注:JavaFX Script 编程语言学起来并不难,但是,由于这是您首次接触它,因此我们将只在适合现有应用程序的详细程度上讨论每个新结构。目的是为了清晰明了。必要时,我们将在剩下的课程中讨论高级用法。

让我们仔细看一下 calculator.fx 示例,稍后我们将扩展此示例。

代码的第一部分定义一些脚本变量

def numOne = 100;
def numTwo = 2;
var result;
 

脚本变量是使用 var  def 关键字声明的。二者之间的区别在于:在脚本的整个生命周期内都可以为var 变量赋予新值,而 def 变量在被首次赋予新值后将保持不变。我们已经为 numOne  numTwo 赋予了特定的值,但 result 却未初始化,因为此变量将用来存放计算结果。

变量名通常由字母和数字组成,但不能以数字开头。约定使用小写字母;如果名称由多个词组成,则将每个后续词的第一个字母大写,如上例中所示。


注:您可能还注意到,我们并没有专门将这些变量指定为存放数值型数据(而不是字符串或任何其他类型的数据)。编译器非常智能,可以根据使用变量的上下文来弄清您的意图。这称为类型推断。类型推断可以使脚本程序员的工作有所简化,这是由于它省去了声明变量与之兼容的数据类型的工作。

源代码的其余部分定义一些用来对这两个数字执行加、减、乘和除操作的脚本函数

function add() {
result = numOne + numTwo;
println("{numOne} + {numTwo} = {result}");
}

function subtract() {
result = numOne - numTwo;
println("{numOne} - {numTwo} = {result}");
}

function multiply() {
result = numOne * numTwo;
println("{numOne} * {numTwo} = {result}");
}

function divide() {
result = numOne / numTwo;
println("{numOne} / {numTwo} = {result}");
}
 

函数是用来执行特殊任务的可执行代码块。在我们的示例中,每个函数都执行一种数学计算,然后输出结果。将代码组织成函数是一种常见的做法,这会使程序更易于阅读、使用和调试。函数的主体通常进行缩进,这样就便于查看函数的开始和结束位置。

只有被明确调用之后,函数代码才会实际执行。这样就可以在脚本的任何位置运行函数。将函数调用放在函数定义之前还是之后无关紧要;在我们的示例源文件中,函数是在实际定义之前调用的。

函数调用如下所示:

add();
subtract();
multiply();
divide();
 

接下来,我们将更新计算器脚本函数以接受参数。参数是指在调用函数时所传入的特定值。通过此方法,我们的计算器可以对任意两个数字(而不只是硬编码到 numOne  numTwo 变量中的值)进行计算。

var result;

add(100,10);
subtract(50,5);
multiply(25,4);
divide(500,2);

function add(argOne: Integer, argTwo: Integer) {
result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
}

function subtract(argOne: Integer, argTwo: Integer) {
result = argOne - argTwo;
println("{argOne} - {argTwo} = {result}");
}

function multiply(argOne: Integer, argTwo: Integer) {
result = argOne * argTwo;
println("{argOne} * {argTwo} = {result}");
}

function divide(argOne: Integer, argTwo: Integer) {
result = argOne / argTwo;
println("{argOne} / {argTwo} = {result}");
}
 

此脚本的输出现在为:

100 + 10 = 110
50 - 5 = 45
25 * 4 = 100
500 / 2 = 250
 

在该版本中,我们删除了 numOne  numTwo 变量,因为不再需要它们了。我们修改了函数定义,要求传入两个数字(作为参数)。每个参数都指定其名称,后跟一个冒号,冒号后跟其类型。当一个函数接受多个参数时,用逗号分隔每个参数。

可以选择让函数向调用它的代码返回值。例如,可以对 add 函数进行修改以返回结果-粗体文本显示了具体做法:

function add(argOne: Integer, argTwo: Integer) : Integer {
result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
return result;

}
 

现在,可以按如下方式调用 add 函数:

var total;

total = add(1,300) + add(23,52);
 

如果未指定返回值,函数会默认返回 Void

我们可以进一步修改计算器脚本以接受命令行参数。这样最终用户就可以指定要在运行时计算的数字。

var result;

function run(args : String[]) {

// Convert Strings to Integers
def numOne = java.lang.Integer.parseInt(args[0]);
def numTwo = java.lang.Integer.parseInt(args[1]);

// Invoke Functions
add(numOne,numTwo);
subtract(numOne,numTwo);
multiply(numOne,numTwo);
divide(numOne,numTwo);
}

function add(argOne: Integer, argTwo: Integer) {
result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
}

function subtract(argOne: Integer, argTwo: Integer) {
result = argOne - argTwo;
println("{argOne} - {argTwo} = {result}");
}

function multiply(argOne: Integer, argTwo: Integer) {
result = argOne * argTwo;
println("{argOne} * {argTwo} = {result}");
}

function divide(argOne: Integer, argTwo: Integer) {
result = argOne / argTwo;
println("{argOne} / {argTwo} = {result}");
}
 

此更改引入了几个新的结构,其中最值得注意的是添加了 run() 函数。与其他函数不同,run() 是充当脚本主入口点的特殊函数。run() 函数会将所有命令行参数存储在 args(一个 String 对象序列)中。(序列是对象的有序列表,与其他编程语言中的数组相似;表达式运算符中详细介绍了序列。)

为了运行此脚本,用户现在必须在运行时指定第一个数字和第二个数字:

javafx calculator 100 50
 

输出现在为:

100 + 50 = 150
100 - 50 = 50
100 * 50 = 5000
100 / 50 = 2
 


注:在所有以前版本的计算器脚本中,我们没有明确提供 run() 函数,我们只是在脚本级别键入了代码,然后代码按照预期方式运行。在这些情况下,编译器会在无提示的情况下生成一个不带参数的 run() 函数,并将要执行的代码放在该函数中。

我们还重新使用了 numOne  numTwo 变量,这次将它们的作用域限制在包含它们的 run() 方法。我们的计算器函数接受数字,但命令行参数是字符串;因此,我们必须首先将每个命令行参数从 String 转换为 Integer,然后才能传递它们以进行处理。

// Convert Strings to Integers
def numOne = java.lang.Integer.parseInt(args[0]);
def numTwo = java.lang.Integer.parseInt(args[1]);
 

为此,我们借助于 Java 编程语言来执行实际的类型转换。根据需要利用现有的 Java 生态系统会给这个原本简单的脚本语言带来强大的功能。

原创粉丝点击