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

 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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值