/**
* 继续俺的JavaFX学习,语法部分
* 文:
西门町学士
* 位置:
http://www.blogjava.net/stevech/
*/
我犹豫了好一阵才决定写JavaFX的语法部分。个人认为这是学习中最枯燥的部分。因为JavaFX的语法非常简单且直观,比如Sun提供的在线
Tutorial的GUI部分,即使你是第一次听说JavaFX这个东西,只要你稍有一点点编程经验,你也基本上能够毫无障碍地理解这个Tutorial
的内容了。
话虽如此,部分语法可能确实会造成一些理解困难,比如有的地方分隔符用逗号(,)分号(;)和空格都可以,def和var的区别,=>操作符,等等这些还得初看一遍语法才能理解(当然,基本上就没有必要看第二遍了吧)。因此,我也在此将JavaFX的语法照着Sun的语法
Tutorial快速地过一遍,为以后打下一个坚实(!)的基础,呵呵。
def: 定义常量
var: 定义变量
function {}: 定义函数
function fun(arg: Integer) {}: 一个名为fun需一个Integer参数类型的函数,没有返回值,等同于
function fun(arg: Integer) : Void {}
如果是
function fun(arg: Integer) : Integer {} 则是返回Integer类型
Person {
firstName: "java"; //在这里用;、,或是什么都不用皆可
lastName: "sun",
gender: "x"
age: "12"
}
定义了一个Person对象实例。
对象可以嵌套,如
Person {
firstName: "java"; //在这里用;、,或是什么都不用皆可
lastName: "sun",
gender: "x"
age: "12"
email: Email {
url: "java@sun.com"
}
}
String类型
def name = 'Sun'; //单引号双引号都一样
var s = "Hello {name}"; // Hello Sun。{}代表内嵌表达式
Boolean类型
var answer = true;
Number和Integer类型
Number表示浮点数:def numOne = 1.0;
Integer表示整数:def numTwo = 1;
不嫌麻烦的话(吃多了撑得慌):
def numOne : Number = 1.0;
def numTwo : Integer = 1;
Duration类型
以前没见过。其实就是时间间隔。
5ms;// 5毫秒
10s;// 10秒
15m;// 15分钟
20h;// 20个钟头
Void
知道吧。仅用于函数返回值(不用也是一样的)记住V是大写的
null
这个更没问题了吧。这年头就指望着null吃饭呢
Sequence
[]。类似于数组更类似于list
var seasons = ["Spring","Summer","Fall","Winter"];
可嵌套
var ss = [seasons, ["Moon","Beauty"]];
对于数字更有:
var nums = [1..100];//两个点,别弄成三个了
var nums = [1..10 step 2];//1,3,5,7,9
var nums = [10..1 step -1];
还有:
var nums = [1,2,3,4,5];
var numsGreaterThanTwo = nums[n | n > 2];
访问:
nums[0]等等等等,别忘了下标从0计
sizeof: 个数
插入:
var days = ["Mon"];
insert "Tue" into days; //哇,SQL冒出来了啊
insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;
insert "Thu" before days[2];//将Thu放在days[2]之前
insert "Wed" after days[1];//将Web放在days[1]之后
删除:
delete "Sun" from days;
delete days[0];
delete days;//现在days是空的了,但days这个变量还是存在的
反转:
var nums = [1..5];
reverse nums;//变成5,4,3,2,1
比较:
==
元素和位置完全相同,true;否则false
子集:
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekend = days[5..6];//Sat和Sun
var weekdays = days[0..<5];//类似于数学上的[)半闭半开范围
var weekend = days[5..];//到头
var days2 = days[0..<];//除了最后一个
操作符部分
=、+、-、*、/、mod、+=、-=、*=、/=、++、--、not
==、!=、>、>=、<、<=
and、or
instanceof
唯一需要注意的是String没有重载+,因此不能用+来连接String,得用函数。
表达式
以;结尾。
if ..else if...else
可以这么用:
price = if (age < 5) 0 else if (age > 5 and age < 12) 5 else 10;
for...in
var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
for (day in days) {}
也可以:var squares = for (i in [1..10]) i*i;
while、break、continue
throw、try...catch...finally
数据绑定:bind和bound
var x = 0;
def y = bind x;//现在y的值随x变动而变动。注意我们用def来定义y
var x = 1.0;
bound function fun(arg: Type) : Type {
something relating to x;
}//定义了一个可以绑定外部参数的函数
触发器(replace trigger)//SQL再现?
on replace
var password = "foo" on replace oldValue {
println("\nALERT! Password has changed!");
println("Old Value: {oldValue}");
println("New Value: {password}");
};
password = "bar";
当值改变时触发!
自定义类型
终于,终于!class出现!
class Person {
var firstName: String;
var lastName: String;
var gender: String;
var age: Integer;
function printName() {
println("Name: {firstName} {lastName}");
}
}
子类
abstract class X {
...
function doSth(...) {}
...
}
class XX extends X {
...
override function doSth(...) {}
...
}
包:package
跟Java没区别~~
访问修饰符
默认(即没有修饰符):跟Java不同,称为Script-only,也就是只有当前这个文档内的可以访问它,类似于private(跟C++的默认方式相同)
package:在同一个包内可以访问
protected:同一个包或子类
public: 公共
public-read:把public限制了一下,不允许外部进行写操作。还可以再加修饰符来将写操作放宽,比如package public-read或protected public-read
public-init:可由外部进行初始化赋值,然后就跟public-read一样了。