`
Ivan_Pig
  • 浏览: 388325 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

学习JavaFX脚本语言----6,7

    博客分类:
  • RIA
阅读更多
Lesson 6: Operators

目录:

- 连接操作符
- 运算操作符
- 一元操作符
- 关系操作符
- 条件操作符
- 类型比较操作符

-连接操作符

链接操作符"="是你最常用的操作符之一。使用"=",可以将其右边的值赋给左边的变量。

result = num1 + num2;
days = ["Mon","Tue","Wed","Thu","Fri"];


在前面的章节里面,你已经使用了很多次了。

-运算操作符

运算操作符提供加,减,乘,除的功能。"mod"操作符为求余!

+ (additive operator)
- (subtraction operator)
* (multiplication operator)
/ (division operator)
mod (remainder operator)

下面提供一些例子:

var result = 1 + 2; // result is now 3
println(result);

result = result - 1; // result is now 2
println(result);

result = result * 2; // result is now 4
println(result);

result = result / 2; // result is now 2
println(result);

result = result + 8; // result is now 10
println(result);

result = result mod 7; // result is now 3
println(result);


你还能同时使用运算操作符和连接运算符构成复合运算符。例如 result += 1; 和 result = result+1;两者的效果都是result加上了1.

var result = 0;
result += 1;
println(result); // result is now 1

result -= 1;
println(result); // result is now 0

result = 2;
result *= 5; // result is now 10
println(result);

result /= 2; // result is now 5
println(result);


只有"mod"操作符不能这么写。如果你想求一个数被2除的余数,你需要这么写:
result = result mod 2;


-一元操作符

大部分的操作符需要两个操作数;而一元操作符只需要一个操作数,对操作数进行加/减操作,取负数,如果操作数为boolean,则可以取逻辑反,等操作。

- Unary minus operator; negates a number
++  Increment operator; increments a value by 1
--    Decrement operator; decrements a value by 1
not   Logical complement operator; inverts the value of a boolean

例子:

var result = 1; // result is now 1

result--;  // result is now 0
println(result);

result++; // result is now 1
println(result);

result = -result; // result is now -1
println(result);

var success = false;
println(success); // false
println(not success); // true


++/--操作符既可以在操作数的前面,也可以在操作数的后面。result++和++result运算的最后效果都是result加1。唯一的区别是result++是先取值后加1,++result是先加1再取值。如果你只是做简单的+/-,那么你用哪种方法都没有影响。但是,如果你在一个复杂的表达式里面使用,那么两种方法可能会不同。

下面的代码演示他们的区别:

var result = 3;
result++;
println(result); // result is now 4
++result;
println(result); // result is now 5
println(++result); // result is now 6
println(result++); // this still prints prints 6!
println(result); // but the result is now 7


-关系操作符

关系操作符用来比较一个操作数是否大于,小于,等于或不等于另一个数。

== equal to
!= not equal to
> greater than
>= greater than or equal to
< less than
<= less than or equal to

下面的代码测试这些操作符:

def num1 = 1;
def num2 = 2;

println(num1 == num2); // prints false
println(num1 != num2); // prints true
println(num1 > num2);  // prints false
println(num1 >= num2); // prints false
println(num1 < num2);  // prints true
println(num1 <= num2); // prints true


-条件操作符

条件and和条件or是用在两个boolean表达式间的操作符。这两个操作符有"short-circuiting"的特性,就是第二个操作数只有在需要的时候才执行。举个例子,对于and操作符,如果第一个表达式的执行结果是false,那么第二个表达式就不会执行了,当第一个表达式为true的时候,第二个表达式才会执行。

and
or

下面是例子:

def username = "foo";
def password = "bar";

if ((username == "foo") and (password == "bar")) {
     println("Test 1: username AND password are correct");
}

if ((username == "") and (password == "bar")) {
     println("Test 2: username AND password is correct");
}

if ((username == "foo") or (password == "bar")) {
     println("Test 3: username OR password is correct");
}

if ((username == "") or (password == "bar")) {
     println("Test 4: username OR password is correct");
}



输出:

Test 1: username AND password are correct
Test 3: username OR password is correct
Test 4: username OR password is correct


-类型比较操作符

instanceof操作符判断一个对象是否是一个特定的类型。你可以使用此操作符来判断,一个对象是否是一个特定的类。

def str1="Hello";
println(str1 instanceof String);  // prints true

def num = 1031;
println(num instanceof java.lang.Integer); // prints true


在学了以后的类和继承章节后,你会发现这个操作符很有用。


Lesson 7: Expressions

目录:

- 块表达式
- if表达式
- 范围表达式
- for表达式
- while表达式
- break和continue表达式
- throw, try, catch 和 finally表达式

-块表达式

块表达式包含一系列的声明或表达式,由大括号包围,且以分号隔开。块表达式的值是块里面最后的表达式的值。如果块里面没有表达式,块表达式就是Void类型。注意,var和def是表达式。

下面的块表达式添加了一些成员并把结果存放在total变量里面:

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


输出:

Total is 24.

第一行 (var nums = [5, 7, 3, 9];) 声明了一个整型的序列。

接着声明了一个total变量来保存序列里面的值的总和。

块表达式,为大括号里面的所有代码:

{
var sum = 0;
     for (a in nums) { sum += a };
     sum;
}


在括号里面,第一行声明了一个变量sum,来保存序列里面的成员。第二行循环序列,取出序列里的成员与sum相加。最后一行,为返回块表达式的值。


-if表达式

if表达式表达式可以根据特定的条件执行特定的一段代码。

例如,下面的代码根据年龄设置票价。12-65岁票价10元。老人和小孩5元。5岁一下的免费。

def age = 8;
var ticketPrice;

if (age < 5 ) {
     ticketPrice = 0;
} else if (age < 12 or age > 65) {
     ticketPrice = 5;
} else {
     ticketPrice = 10;
}
println("Age: {age} Ticket Price: {ticketPrice} dollars.");


年龄设为8时,输出如下:

Age: 8 Ticket Price: 5 dollars.

程序流程如下:

[b]if (age < 5 ) {
     ticketPrice = 0;
} [/b]else if (age > 5 and age < 12) {
     ticketPrice = 5;
} else {
     ticketPrice = 10;
}


如果年龄小于5,票价为0.那么程序就会跳过其他的判断,直接打印出结果。
如果不小于5,那么程序跳转到第二个判断。


if (age < 5 ) {
     ticketPrice = 0;
} else if (age > 5 and age < 12) {
     ticketPrice = 5;
}
else {
     ticketPrice = 10;
}

如果年龄在5-12岁,票价为5.
如果大于或等于12岁,就跳到了else语句里面。

if (age < 5 ) {
     ticketPrice = 0;
} else if (age > 5 and age < 12) {
     ticketPrice = 5;
} else {
     ticketPrice = 10;
}


这个块,只有在前面的条件都不符合的情况下才执行。设置12岁及以上的人的票价为12.

Note: 上面的代码可简写为:

    ticketPrice = if (age < 5) 0 else if (age > 5 and age < 12) 5 else 10;

   
你最好掌握,在后面的章节将会用到。
   

-范围表达式

在序列那一讲,你了解到了如果简单的定义一个有序的数字序列。

var num = [0..5];


理论上,[0..5]就是个范围表达式。默认的,数字间递增1,但是你可以使用step关键字来修改递增的值。例如,定义一个1到10之间的所有奇数的序列。

var nums = [1..10 step 2];
println(nums);


输出

[ 1, 3, 5, 7, 9 ]

要创建一个递减的范围,请保证第二个数要小于第一个数,并且要将step设为一个负数。

var nums = [10..1 step -1];
println(nums);


输出:

[ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]

如果你创建了一个递减的序列,但是没有设定step的值,你将会得到一个空的序列。

下面的代码:

var nums = [10..1 step 1];
println(nums);


将会在编译的时候出现警告:

range.fx:1: warning: empty sequence range literal, probably not what you meant.
var nums = [10..1 step 1];
           ^
1 warning


如果你忽略了警告,那你得到的是个空的序列。

-for表达式

另一个和序列有关的表达式是for表达式。for表达式提供一个简便的循环结构来遍历序列里的所有项。

下面是个例子:

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

for (day in days) {
     println(day);
}


输出:

Mon
Tue
Wed
Thu
Fri
Sat
Sun

让我们来分析这段代码。for表达式以for开头

[b]for[/b] (day in days) {
     println(day);
}


days变量是序列的名称,for表达式将遍历此序列。

for (day in [b]days[/b]) {
     println(day);
}


day变量依次持有序列里的项

for ([b]day[/b] in days) {
     println(day);
}


注意,day变量并不需要声明就可以在for表达式里面使用了。并且,for表达式结束后,day无法被访问。程序员经常给临时变量一个简短的名字以示区别。

在前面的例子里面,for没有显示的返回值。但是for返回一个序列。下面的两个例子来使用for来从一个序列创建另一个序列。

// Resulting sequence squares the values from the original sequence.
var squares = for (i in [1..10]) i*i; 

// Resulting sequence is ["MON", "TUE", "WED", and so on...]
var capitalDays = for (day in days) day.toUpperCase(); 


注意了,toUpperCase方法由String提供。你能在API里找到完整定义。

-while表达式

另一个循环表达式是while表达式。和for不同,不是遍历序列的,而是根据条件来循环的。while是一个语义(syntactically)上的表达式,为Void类型,没有返回值。

给个例子:

var count = 0;
while (count < 10) {
    println("count == {count}");
    count++;
} 


输出:

count == 0
count == 1
count == 2
count == 3
count == 4
count == 5
count == 6
count == 7
count == 8
count == 9

第一行声明了一个变量count并初始化为0

[b]var count = 0;[/b]
while (count < 10) {
    println("count == {count}");
    count += 1;
} 


接着开始while表达式。表达式循环,知道count为10为止。

var count = 0;
[b]while (count < 10) {[/b]
    println("count == {count}");
    count += 1;
}


循环体中,打印count值,并加1。

var count = 0;
while (count < 10) { 
    [b]println("count == {count}");
    count += 1;[/b]
}


当count为10时,循环结束。如果要创建一个无限循环,条件里改为true关键字,就像这样: while(true){}

-break和continue表达式

break和continue表达式和循环表达式有关。这两个表达式是作用于循环上的:break终止循环,continue跳过当前的循环。

brean和continue是语义(syntactically)表达式。他们为Void类型,没有返回值。

例子:

for (i in [0..10]) {
     if (i > 5) {
          break;
     }

     if (i mod 2 == 0) {
          continue;
     }

     println(i);
}


输出:

1
3
5


如果没有if表达式,程序将会简单的输出:0到10。

如果只有第一个if表达式,程序将在i比5大的时候跳出循环。

if (i > 5) {
     break;
}


程序将只打印1到5。

加上第二个if后,程序会间隔的执行循环。

if (i mod 2 == 0) {
     continue;
}


这里,表达式只有在i为偶数的时候才执行continue。当continue执行的时候,println()将不会被执行,也就不会打印了。


-throw, try, catch 和 finally表达式

在现实世界的应用里面,有时可能会出现不正常的程序流程。例如,一段脚本读取文件,但是文件找不到,那么这段脚本就无法执行了。我们将这种情况称为"异常"。

Note:异常是对象。一般可以从字面意思上知道他们表示的是什么异常。(例如,FileNotFoundException表示了无法找到文件。)但是,下面的例子并不是来展现各种各样的异常的。所以,以普通的异常来说明throw, try, catch, 和 finally
    
下面的脚本定义一个方法并抛出异常:

import java.lang.Exception;

foo();

println("The script is now executing as expected... ");

function foo() {
     var somethingWeird = false;

     if(somethingWeird){
          throw new Exception("Something weird just happened!");
     } else {
          println("We made it through the function.");
     }
}



运行,输出:

We made it through the function.
The script is now executing as expected...

但是,将变量改为true,异常将被抛出。在运行时,脚本将会中断,并打印如下信息:

Exception in thread "main" java.lang.Exception: Something weird just happened!
at exceptions.foo(exceptions.fx:10)
at exceptions.javafx$run$(exceptions.fx:3)

要阻止程序被异常终端,我们需要用try/catch来捕获foo()抛出的异常。由名字来看,这个表达式的作用是,try执行一些代码,但是发生了问题就catch到了一个异常。

try {
     foo();
} catch (e: Exception) {
     println("{e.getMessage()} (but we caught it)");
}


现在,程序打印:

Something weird just happened! (but we caught it)
The script is now executing as expected...

还有个finally块 (这个不能算得上是个表达式),不论是否有异常,finally块里的代码都会被执行。finally块一般是用来做清理工作的。

try {
     foo();
} catch (e: Exception) {
     println("{e.getMessage()} (but we caught it)");
} finally {
     println("We are now in the finally expression...");
}


程序输出:

Something weird just happened! (but we caught it)
We are now in the finally expression...
The script is now executing as expected...
8
2
分享到:
评论
8 楼 liyaxi 2009-02-15  
  好好! 搞几个自己做出的教程!:idea: 
7 楼 xiaojiit 2008-12-11  
不过自己感觉NetBeans的开发工具,要是能像Flex Bulider之后那样能实实显示就更好了,你们感觉对吗?
6 楼 gakaki 2008-12-11  
这语法棒 js+ruby 看来在语言特性上 javafx是要比SL和AS好
5 楼 Ivan_Pig 2008-12-11  
xpf7622 写道

不错,感觉JavaFx像JavaScript又借签了些Ruby的语法,感觉很舒服,学习难度一点不大。真好。昨天又上www.javafx.com好象Sample又增加了不少,后面的真是酷蓖了。

就缺Linux下的开发包了
4 楼 Ivan_Pig 2008-12-11  
语法比较简单,我看起来也好理解,所以翻译速度还不错。
还有四节,这两天应该能搞定。
3 楼 xpf7622 2008-12-11  
不错,感觉JavaFx像JavaScript又借签了些Ruby的语法,感觉很舒服,学习难度一点不大。真好。昨天又上www.javafx.com好象Sample又增加了不少,后面的真是酷蓖了。
2 楼 rubyeye 2008-12-10  
一口气看完了
请LZ继续都翻了
1 楼 h819 2008-12-10  
老兄,过两天,就跟着你的教程学一下

相关推荐

    学习JavaFX脚本语言--中文PDF版

    这个压缩包文件“学习JavaFX脚本语言_翻译_.pdf”显然是一个关于JavaFX编程的中文教程,对于想要深入理解JavaFX的人来说,这是一个宝贵的资源。 JavaFX最初是Sun Microsystems开发的,后来被Oracle收购并继续发展。...

    学习JavaFX脚本语言

    学习JavaFX脚本语言,你需要掌握如何声明和操作对象,以及如何利用它的图形和动画功能创建动态用户界面。随着对JavaFX深入的理解,你可以创建出交互性强、视觉效果丰富的应用程序。而要更进一步,还可以学习如何编写...

    javafx-sdk-17.0.2-lts-windows-x64

    3. **bin**: 这个目录通常包含可执行文件和脚本,如JavaFX的编译器`javac`和链接器`javafxpackager`。这些工具允许开发者编译和打包JavaFX应用程序,使其可以在不同平台上运行。 4. **src**: 可能包含了示例代码或...

    深入学习javaFx脚本语言

    深入学习JavaFX脚本语言,意味着我们将探讨其语法、特性以及如何利用它来构建动态的应用程序。 JavaFX最初引入了一种名为JavaFX Script的专用脚本语言,但后来在JavaFX 2.0中,JavaFX Script被Java API所取代,使得...

    学习JavaFX1.2脚本语言

    JavaFX是Oracle公司推出的一种用于创建富互联网应用程序(RIA)的平台,它允许开发者使用JavaFX脚本语言或Java编程语言来构建具有丰富图形界面的应用程序。JavaFX 1.2是该技术的一个早期版本,提供了许多创新特性,...

    JavaFX Script 脚本编程语言

    在开始学习 JavaFX Script 编程语言之前,需要在系统上安装 JDK 6 或 JDK 5,然后再继续学习本教程。 knowledge point 1: 安装 JDK 在学习 JavaFX Script 编程语言之前,需要在系统上安装 JDK 6 或 JDK 5。这是...

    javafx脚本语言中文学习文档

    javafx语言中文教程,内附代码,有助于学习理解!

    javafx使用指南-目录版.pdf

    1. JavaFX Script:JavaFX 的脚本语言,用于开发 JavaFX 应用程序。 2. JavaFX API:JavaFX 的应用程序编程接口,用于开发 JavaFX 应用程序。 3. JavaFX Graphics:JavaFX 的图形编程接口,用于开发 JavaFX 应用程序...

    javafx入门教程

    本教程将指导您从基础知识开始学习JavaFX脚本语言。 JavaFX概述 JavaFX是一种新的脚本语言,由Sun Microsystems开发,用于开发RIA。JavaFX脚本语言基于Java平台,可以在Java虚拟机(JVM)上运行。JavaFX的主要特点...

    Learning the JavaFX Script Programming Language.pdf

    《深入学习JavaFX脚本编程语言》:现代GUI应用程序开发的高效工具 一、JavaFX脚本编程语言概述 JavaFX脚本编程语言是专为创建具有现代化图形用户界面(GUI)的应用程序而设计的一种高级编程语言。它以其声明式的...

    Javafx Script - Dynamic Java Scripting For Rich Internet-Client-Side Applications (Apress, 2007).pdf

    JavaFX Script是一种基于Java的脚本语言,它结合了Java的强大特性和动态脚本语言的灵活性。JavaFX Script最初由Sun Microsystems于2007年的JavaOne大会上发布,并被视为构建丰富内容应用程序的关键工具之一。它提供...

    JavaFX2.0基础教程.pdf

    Oracle宣布停止对JavaFX脚本语言的支持,并将JavaFX的部分API集成到Java标准库中,使得JavaFX成为开发跨平台富客户端应用的理想选择。 - **JavaFX2.0新特性**: - **API整合**:将原有的JavaFX脚本API集成到了Java...

    JavaFX-Resizable-Draggable-Node

    - JavaFX应用程序可以使用Java、Kotlin、Scala等JVM语言编写,也可以用Scene Builder设计界面布局。 2. **JavaFX中的节点(Node)**: - 节点是JavaFX图形场景图的基本构建块,包括按钮、文本框、图像视图等。 -...

    JavaFX-Script语言教程.doc

    JavaFX Script是Oracle公司推出的一种用于创建富互联网应用程序(RIA)的脚本语言,它专门设计用来构建桌面和Web上的图形用户界面。虽然JavaFX Script的流行度在JavaFX后来转向Java语言API后逐渐降低,但它依然为...

    JavaFX Script - Dynamic Java Scripting for Rich Internet-Client-Side Applications

    为了满足这些需求,Sun Microsystems 推出了 JavaFX Script,这是一种专为创建丰富的互联网客户端应用程序而设计的动态脚本语言。本文将基于提供的文档信息对 JavaFX Script 的核心概念、优势以及应用场景进行深入...

    JavaFX Script 语言教程(面向Swing 程序员).rar

    对于Swing程序员来说,学习JavaFX Script 可以拓宽他们的技能范围,为他们提供更现代的UI开发工具。Swing虽然功能强大,但在视觉效果和交互性上可能略显传统,而JavaFX Script 则提供了更先进的解决方案。 这个...

    javaFx script

    学习JavaFX Script的最佳起点是官方提供的教程,该教程详细介绍了JavaFX Script的核心概念和语言语法。通过这个教程,开发者可以逐步掌握JavaFX Script的基础知识,并进一步了解如何构建图形用户界面(GUI)应用程序...

    javaFX 入门教程

    1. **高生产力的脚本语言**:JavaFX脚本语言设计得易于学习且表达能力强,支持声明式的编程风格,使得开发者可以专注于应用程序逻辑而非底层实现细节。 2. **静态类型**:虽然JavaFX脚本语言采用了类似脚本语言的...

    JavaFX高级教程:JavaFX2.0的FXML语言(中文版)

    10. **使用脚本语言**:如果需要,可以通过绑定和表达式在FXML中使用Java脚本来增强功能。 11. **使用样式表**:应用CSS样式表,以实现自定义的视觉效果和主题。 通过以上步骤,我们将能够完全理解如何使用FXML来...

    JavaFX2.0基础教程(整合版)

    - **Oracle 接手**:Oracle 收购 Sun 后,在 2010 年 JavaOne 大会上宣布将停止对 JavaFX 脚本语言的支持,并将 JavaFX 的 API 导入 Java,这意味着 Java 开发者无需学习新的脚本语言即可利用 JavaFX 的功能。...

Global site tag (gtag.js) - Google Analytics