2011年11月7日星期一

TJS教學(補充篇)---data type,資料型態

(建議在閱讀本篇教學之前,請先閱讀TJS教學---data type,資料型態)

(k ゚∀゚)<這篇是對於上一篇的教學進行進一步解說,詳細地介紹整數、實數、字串這三種資料型態。

(k ゚∀゚)<TJS的資料型態與JavaScript的有點相似,有整數、實數、字串、物件(Object)等資料型態,而且加入了一些JavaScript沒有的資料型態,即是void和Octet。

(k ゚∀゚)<我們使用typeof這運算子來測試一個值或者是變數裡的值的資料型態,並且傳回資料型態的名稱(以字串的形式),以下是範例。

System.inform(typeof 10);
System.inform(typeof 1.34);
System.inform(typeof "abc");

(k ゚∀゚)<在上述的範例裡,它們的資料型態分別是整數、實數、字串。而10、1.34、"abc"這樣的數值,我們可以稱之為字面常量(Literal constant)。

(k ゚∀゚)<而整數、實數、字串是一些比較基本的資料型態,我們亦經常會使用到它們。

那麼平常我們使用顏色值(0xRRGGBB),這個是哪種資料型態?>( ゚ω゚ s)

(k ゚∀゚)<這個顏色值是十六進位的整數,一般來說,我們都是慣常使用十進位表示方式,但吉里吉里亦支援二進位、八進位和十六進位等。

(k ゚∀゚)<表示十六進位的數值可以在開頭加上0x或0X,表示八進位的數值在開頭加上0,表示表示二進位的數值在開頭加上0b或0B,以下是一些例子。

十六進位:
0xFF
0x3F33

八進位:
033
0561

二進位:
0b0100
0B0010100010100001

(k ゚∀゚)<而實數除了用點數來表示,亦可以用科學記號來表示,一般可用來表示一些很大或很小的數值,以下是一些例子。

科學記號:
1.23e10
1.53E-32

(k ゚∀゚)<在上述的範例裡,前者表示1.23x1010,後者表示1.53x10-32,而數值和指數之間要加上e或E。

那麼實數有十進位以外的表示方式嗎?>( ゚ω゚ s)

(k ゚∀゚)<實數的確可以用二進位、八進位和十六進位等表示方式,不過一般極少機會會使用到,所以不會在此介紹。

(k ゚∀゚)<之後介紹一下字串,吉里吉里裡的字串可以分拆成一個個字元,而且字串的最後自動地加上\0。

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

var str="abc";

(k ゚∀゚)<在上述的範例裡,我們宣告了一個變數str,並把"abc"指定給str。而這個字串儲存的模樣像如下。









咦?原來那些字元是一格格分開的!?>( ゚ω゚ s)

(k ゚∀゚)<對了,"abc"雖然是3個字,但事實上用了四個儲存空間來儲存。

不過這個\0是什麼東西來的,而且用來幹什麼?>( ゚ω゚ s)

(k ゚∀゚)<這是空字元,用來表示字串的結尾,當我們顯示字串時,這個空字元不會被顯示。

(k ゚∀゚)<當我們想讀取字串上某一個位置的字元,方法其實十分容易,看以下的範例。

var str="abc";
System.inform(str[0]);
System.inform(str[1]);
System.inform(str[2]);

(k ゚∀゚)<在上述的範例裡,字串的字元被分別顯示出來,我們使用"字串名稱[索引值]"這方式來讀取字串上特定位置的字元。不過留意索引值是由0開始,而不是由1開始,若果索引值超出範圍,亦會發生錯誤。

話說字串有沒有換行,難道只能顯示一行出來嗎?>( ゚ω゚ s)

(k ゚∀゚)<TJS 上有一種字元叫做跳脫字元(escape sequence),跳脫字元包括了一些控制字元和有其他用途的字元(例如雙引號(")、單引號(')等),而控制字元即是一些特殊用途的字元,例如換行等,以下是一些比較常見的跳脫字元。

跳脫字元(escape sequence) 用途
\\ 倒斜線(\)
\' 單引號(')
\" 雙引號{")
\a 嗶聲
\b 後退
\f 換頁
\n 換行
\r 返回
\t 水平tab
\v 垂直tab
\xH 十六進位編碼

嘩!?那麼多!?>( ゚ω゚ s)

(k ゚∀゚)<雖然跳脫字元有很多,不過平常用得到只有幾種,例如\n和\t,有些不是沒有效果(例如\b和\f),就是不一定有效果(例如\a,不是每部電腦都有嗶聲)。

(k ゚∀゚)<以下是一些使用跳脫字元的範例。

System.inform("Hello\nWorld");
System.inform("Hello\tWorld");
System.inform("\\  \"  \'");

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

沒有留言:

發佈留言