2012年1月20日星期五

TJS教學---type conversion,型態轉換

(k ゚∀゚)<吉里吉里其實是頗聰明,當面對一些不恰當的資料型態,吉里吉里會嘗試轉換成適合的資料型態,看看以下的範例。

var a="12.2"-"2.2";
System.inform(a);

咦?這樣沒有問題嗎,難道字串能夠相減?>( ゚ω゚ s)

(k ゚∀゚)<當然不能,所以吉里吉里會嘗試把它們轉換成實數,好像以下的模樣。

var a=12.2-2.2;
System.inform(a);

(k ゚∀゚)<所以吉里吉里會顯示10。

(k ゚∀゚)<再看看以下的範例。

var a=1+"2";
System.inform(a);

答案是3嗎?>( ゚ω゚ s)

(k ゚∀゚)<這次就不對,雖然把"2"轉換成實數或把1轉換成字串都可行,但吉里吉里會優先考慮把它們轉換成字串,所以a會儲存著"12"這個字串。

(k ゚∀゚)<再看看以下的範例。

var a=1+2.5;
System.inform(a);

咦?這個有什麼方法要轉換?>( ゚ω゚ s)

(k ゚∀゚)<這型態轉換不太顯眼,整數和實數的儲存方式其實不太相同,吉里吉里會先把整數轉換成實數才運算,所以1會被轉換成1.0,之後才加2.5。

吉里吉里幫我們自動進行型態轉換,看起來真是很方便。>( ゚ω゚ s)

(k ゚∀゚)<的確是很方便,不過有時候聰明反被聰明誤,吉里吉里轉換的型態不一定是我們想要的,看看以下的範例。

var a="2"+1+2;
var b=2+1+"2";
System.inform("a="+a+",b="+b);

答案是不是a="23",b="32"?>( ゚ω゚ s)

(k ゚∀゚)<不太對,由於運算優先順序一樣,吉里吉里會由左而右進行運算,所以以下是吉里吉里執行時的順序。

a="2"+1+2
a="2"+"1"+2
a="21"+2
a="21"+"2"
a="212"

b=2+1+"2"
b=3+"2"
b="3"+"2"
b="32"

(k ゚∀゚)<有時候,轉換錯誤的型態有可能做成嚴重的錯誤,所以必須小心留意。

難道只能依靠吉里吉里轉換型態,有沒有辦法強制轉換型態?>( ゚ω゚ s)

(k ゚∀゚)<有的,先看看以下的範例。

var a=(int)3.33;
var b=(real)"1.23"+1;
var c=(string)2+1+"2";
System.inform("a="+a+",b="+b+",c="+c);

(k ゚∀゚)<當我們在值的前面加上(int)、(real)或(string),其資料型態就會分別被強制轉換成整數、實數或字串。以下是吉里吉里執行時的順序。

a=(int)3.33
a=3

b=(real)"1.23"+1
b=1.23+1
b=2.23

c=(string)2+1+"2"
c="2"+1+"2"
c="2"+"1"+"2"
c="21"+"2"
c="212"

(k ゚∀゚)<好吧,今次介紹到這裡,下次再見。

沒有留言:

發佈留言