`
treemp3
  • 浏览: 23965 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

编写脚本

阅读更多
现在你的环境已经建立起来,是时候写你的第一个脚本了!这一节我们将通过编写一个简单的计算器程序来学习一些基本语法。这些实践带你了解:编译源代码、运行程序、声明变量、定义和触发函数、向函数传递参数、使用命令行参数。

Contents

- Writing a Simple Calculator
- Declaring Script Variables
- Defining and Invoking Script Functions
- Passing Arguments to Script Functions
- Returning Values from Script Functions
- Accessing Command-Line Arguments


Writing a Simple Calculator
写一个简单的计算器

首先点击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是一种编译语言,意味着在Java虚拟机运行它之前,你必须把源代码转化为字节码。

下面是编译脚本的命令:

javafxc calculator.fx

编译之后,你会发现一个名为calculator.class的字节码文件。你还会注意到另一个名为calculator$Intf.class的文件。它是运行程序所必须的:你可以忽略它,但不能删除它。

您现在可以用下面的命令运行编译后的class文件了。

javafx calculator

The output is:
结果如下:

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

这个程序虽然小,但体现了一些重要的语法结构。学习这些结构将是你熟练应用JavaFX的第一步。

    注意:JavaFX语言并不难学,但因为你是新手,我们将仅限于讨论我们接触到的程序细节。目标很清晰。高级的用法将通过接下来的课程学习。

Declaring Script Variables
声明变量

让我们回顾一下calculator.fx,然后扩展它。

第一段定义了一些变量:

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

变量用var或def关键字声明。它们的区别在于var变量可以被赋予新值,而def变量一旦赋值就保持不变。我们给numOne和numTwo赋值,但result变量未被初始化因为这个变量将保存计算结果。

变量名由字母和数字组成,不能以数字开头。约定俗成的惯例是采用小写字母;如果由多个单词组成,就像上面的例子一样,除第一个单词之外,其他单词的第一个字母大写。

    注意:也许你已经注意到了,我们没有刻意声明这些变量是接受数字类型数据(与字符串或其他数据类型形成对照)的。编译器根据上下文聪明地识别出了您的意图。这被称作类型推导。类型推导使程序员的工作更轻松,因为它使程序员从声明数据类型的烦恼中解放出来。

Defining and Invoking Script Functions
定义和触发函数

接下来的源代码定义了两个数字相加、相减、相乘、相除4个函数:

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}");
}

函数是用来完成特定功能的可执行的一段代码。在我们的例子中,每一个函数执行一种数学计算并且打印结果。写函数是使代码更易阅读、使用、调试的常用方法。函数体用大括号括起来,使它更易阅读。

函数直到被触发,才会执行函数体的代码。这使得你可以将它放置在程序的任何位置,函数调用在函数声明的前面或后面都无关紧要。在我们的例子中,就在声明的位置之前触发了函数。

The function invocations are as follows:
函数调用如下所示:

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


Passing Arguments to Script Functions
向函数传递参数

接下来我们将修改calculator函数以接受参数。参数是触发函数时传入的特定值。这一步使calculator可以计算任意两个数字,而不只是硬编码在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}");
}

The output of this script is now:

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

在这个版本里面我们去掉了不再需要的numOne和numTwo两个变量。修改函数定义使得两个数值作为参数可以传入。用一个参数名,一个冒号,和参数类型指定一个参数。多个参数用逗号间隔。

Returning Values from Script Functions
函数返回值

函数可以向触发它的代码返回一个值。例如,修改的相加函数可以成返回result值,粗体的文本显示了如何去做:

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

}

相加函数可以这样触发:

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

如果没有指定返回值,函数默认返回Void。

Accessing Command-Line Arguments
使用命令行参数

我们还可以修改calculator脚本使它可以使用命令行参数。这可以使最终用户在运行时指定要计算的数值。

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里保存了所有的命令行参数,args是一个字符串对象的序列(序列是对象的有序列表,类似于其他语言里的数组,在表达式和操作符这两节里有详细介绍)。

运行这个脚本,用户在运行时需要指定第一个和第二个数值:

javafx calculator 100 50

The output is now:

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

    注意:在先前的版本里,我们没有提供run函数。我们只是录入了一些代码,而它运行如常。这种情况下,编译器悄悄地创建了一个没有参数的run函数,并且把我们录入的要执行的代码放置了进去。

我们重新放置了numOne和numTwo变量,这一次用run函数包含了它们。calculator函数想得到数值类型,但命令行参数却是字符串类型;因此我们在使用它们之前必须将它们从字符串类型转换为数字类型。

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

我们可以借助Java语言的帮助来实现类型转换。借助Java系统可以给这种简单的脚本语言带来极大的能力。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics