/**
* 繼續俺的JavaFX學習,語法部分
* 文:
西門町學士
* 位置:
http://www.tkk7.com/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一樣了。