您的位置:首页 > 编程语言 > Java开发

JavaFx中文入门教程--JavaFx中的语句和表达式

2008-08-18 17:23 507 查看
http://cnjavafx.cn/javafx/index.html

JavaFx中的语句和表达式

JavaFx是一个基于表达式的语言,所有的语句都是由表达式组成的。表达式的特征就是有零个或者多个输入,产生零个或者一个输出。JavaFx的表达式包括条件表达式,循环表达式,代码块(block)。

我们先来看一个简单的脚本:expression01.fx
package example;

import java.lang.Math;
import java.lang.System;

var rand = (Math.random() * 100).intValue();
var s:String = null;
if (rand mod 2 == 0) {
s = "rand is even"
} else {
s = "rand is odd"
};

System.out.println(s);

先简单解释一下,这段代码先产生一个随机整数,然后判断是否偶数。这里的mod操作,也可以写作Java中比较熟悉的%,rand % 2 == 0,可能很多人会比较习惯这种写法 。编译运行看结果:
#javafxc expression01.fx -d .

#javafx example.expression01
rand is odd
#javafx example.expression01
rand is odd
#javafx example.expression01
rand is even
代码块表达式

代码块(block)是在{...}之间的一系列语句(可以是表达式或者声明、定义),语句之间用';'分隔。既然我们说block是一个表达式,表达式是有值的。代码块的值就等于所执行的最后一个语句的值。也就是说,如果最后一个语句是一个表达式的话,这个表达式的值即block的值,如果不是表达式,则block的值是一个Void类型的值。

看一个例子:expression02.fx
package example;

import java.lang.System;

var nums = [5, 7, 3, 9];
var total = {
var sum = 0;
for (a in nums) { sum += a };
sum;
}

System.out.println("Total is {total} ");

这段脚本遍历数组求和,最后sum;表达式语句结束,把sum的值作为这个block的值。运行看结果:
#javafxc expression02.fx -d .

#javafx example.expression02
Total is 24

范围表达式

范围表达式用于表示一串连续数字。定义格式为,从起始值开始,到终止值结束,指定步长,范围表达式中包含终止值:
[起始值 .. 终止值]
[起始值 .. 终止值 step 步长 ]

步长可以省略,默认为+1,或者,可以指定另外一个值作为步长。看代码:expression04.fx
package example;

import java.lang.System;

var nums = [0..3];
System.out.println(nums == [0,1,2,3]); // prints true
System.out.println(nums);

var nums2 = [1..10 step 2];
System.out.println(nums2 == [1,3,5,7,9]); // prints true
System.out.println(nums2);

编译运行,看结果:
#javafxc expression04.fx -d .

#javafx example.expression04
true
[ 0, 1, 2, 3 ]
true
[ 1, 3, 5, 7, 9 ]

若想创建一个递减的数组,则终止值必须小于起始值,并且,步长为负值即可。看代码:expression05.fx
package example;

import java.lang.System;

var nums = [3..0 step -1];
System.out.println(nums == [3,2,1,0]); // prints true
System.out.println(nums);

运行看结果:
#javafxc expression05.fx -d .

#javafx example.expression05
true
[ 3, 2, 1, 0 ]

条件表达式

JavaFx的条件表达式基本和Java的写法是一样的,if (逻辑判断) { 条件成立 } else { 条件不成立 }。所不同的是,{...}部分在JavaFx里面,是一个代码块表达式,是一个值,并且,整个条件表达式也是一个值。看一个条件表达式的简单例子:expression03.fx
package example;

import java.lang.System;

var name = "Bei Jing";

var value = if (name == "Bei Jing") {
System.out.println("Hi, {name}");
name;
}
else {
System.out.println("Hello");
"Other";
}

System.out.println("Value: {value}");

这段脚本里面,我们把条件表达式的值给利用起来了。把条件表达式放在等号的右边,赋值给变量value。条件判断成立,执行成立代码块,首先输出一个Hi,向Bei Jing打个招呼,最后,name表达式结束,作为block的值,这个值就是条件语句的值,赋值给value变量。
#javafxc expression03.fx -d .

#javafx example.expression03
Hi, Bei Jing
Value: Bei Jing

条件表达式也是允许嵌套的,如果您足够冷静的话,可以尝试嵌套很多层看看,不过,我建议还是代码可读性优先。

由于JavaFx的条件表达式本身就是表达式,Java中的三目运算符?:就不再需要了。
循环表达式
for 循环

for的语法在讲数组的时候,已经提及了。JavaFx的for跟Java的for的用法不同,必须基于一个数组进行遍历。循环表达式实际上就是反复执行一个代码块(循环体部分),每次执行结束代码块的值作为改循环表达式的一个元素。看代码:expression06.fx
package example;

import java.lang.System;

// 得到各个元素的平方值
var val1 = for (i in [1..5]) {
System.out.println("{i} power {i*i}");
i*i;
}

System.out.println(val1); // [1,4,9,16,25]

结果为:
#javafxc expression06.fx -d .

#javafx example.expression06
1 power 1
2 power 4
3 power 9
4 power 16
5 power 25
[ 1, 4, 9, 16, 25 ]

while 循环语句

基本和Java中的一样,不过,{}不能省略,JavaFx中,循环体是一个代码块。看代码:expression07.fx
package example;

import java.lang.System;

var i = 0;
while (i < 10) {
if (i > 5) {
break;
}
System.out.println("i = {i}");
i += 1;
}

跟for表达式不同,我们无法获得while表达式的返回值。运行结果:
#javafxc expression07.fx -d .

#javafx example.expression07
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5

其他类型
return 表达式

return用法和Java中一样:
function add(x, y) {
return x + y;
}

throw 语句

throw跟Java中类似,只有从Throwable继承的类才能throw和catch。
import java.lang.Exception;

function foo() {
throw new Exception("this is a java exception");
}

function bar() {
throw "just a string";
}

try...catch 语句

try...catch跟Java中类似,只是形式上有所改变,长得是JavaFx的样子。
try {
throw "Hello";
} catch (s:String) {
System.out.println("caught a String: {s}");
} catch (any) {
System.out.println("caught something not a String: {any}");
} finally {
System.out.println("finally...");
}

break, continue 语句

和Java中类似,用于终止,跳过循环语句。看例子:expression08.fx
package example;

import java.lang.System;

function foo() {
for (i in [0..10]) {
if (i > 5) {
break;
}
if (i mod 2 == 0) {
continue;
}
System.out.println(i);
}
}

function bar() {
var i = 0;
while (i < 10) {
if (i > 5) {
break;
}
if (i mod 2 == 0) {
i += 1;
continue;
}
System.out.println(i);
i += 1;
}
}

foo();
System.out.println("*****************************");
bar();

运行结果:
#javafxc expression08.fx -d .

#javafx example.expression08
1
3
5
*****************************
1
3
5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: