資料

資料類型

boolean

布林,為一種邏輯資料,只有 true (真) 和 false (假) 二個值。

integer

整數,取值範圍為 -2147483648到2147483647 ( -2^31 ~ 2^31 -1 ),寫法有很多種:

  1. 十進位:全部為數字,第一個數位不為0(0例外)。最常用且最基本的表示方法。例如:12、-199930、0、999999等等。

  2. 八進位:0開頭,後面接數字,這是8進制表示方法。例如:07(等於十進位的7) 、08(錯誤語法,數字必須小於8)、012(等於十進位的10)。

  3. 十六進位:0x開頭(x大小寫不限,指的是16進位英文hexadecimal),後面全部為數位。16進制的數位包含A,B,C,D,E,F,分別表示10~15,大小寫不限。例如:0x2(等於十進位的2)、0xA(等於十進位的10)、0x10(等於十進位的16)、0xFF(等於十進位的255)。

  4. 單字元:用單引號括起一個ASCII字元,表示該字元的ASCII碼,範圍為0~255。 例如:'A'(等於65)、'<'(等於60)。

  5. 四字元:用單引號括起4個字元。這種表示方法大多用於表示部隊、技能、物品等物件的ID,例如:'Aloc' 、 'B000'。它的實際數值是256進制,各字元取ASCII碼,然而我們通常不會去計較它實際代表的數值,也不用此種表示方法做運算。總之只要二個ID中有任一字元不同,就是二個不同的數字。

real

實數,取值範圍為 1.5 x 10^(-45)到3.4 x 10^38。實數的寫法很寬鬆,小數點幾乎可以隨便寫。但是請注意, 對於一個沒有小數位的數,如果不寫小數點,電腦會視情況將它當作整數或實數,因此為了避免不必要的誤會,即使是無小數的實數也請養成加小數點的習慣。

string

字串,用雙引號括起的若干個字母,例如"Are you OK?";空字串表示為""。可用null表示空值。此外還有一些特殊字元如下:

輸入 輸出
|n 換列
|| |
|cffffcc00Danny是天才|r Danny是天才
\' '
\" "
\\ \

code

程式碼,其值的形式為function <函數名>,用於表示一個函數位址,通常用於傳值時傳遞一個函數。 可用null表示空值。

handle

控制碼,它指向記憶體的一個位址,用於表示一個較大的結構,是很多資料類型的基類型。可用null表示空值。 還有一些資料是繼承handle而來,它在Common.j中被定義,其定義形式如下:

type <子類型> extends <父類型>

常用的延伸類型表列如下:

常用延伸類型表
handle player
force
widget unit
destructible
item
group
location
region
rect
boolexpr conditionfunc
filterfunc
trigger
event
eventid
triggercondition
triggeraction
timer
timerdialog
effect
lightning
weathereffect
terraindeformation
fogmodifier
texttag
sound
gamecache
leaderboard
multiboard
multiboarditem
dialog
button
quest
questitem
defeatcondition

範例

資料類型

資料類型 範例
boolean true
false
integer 586
0x24A
01112
'A'
'Hamg'
-12345
real 520.1314
-3.14159
.1774
14
14.
14.0
string null
""
"Danny是天才"
"I love you.|nDo you love me?"
"This is a \"test\""
code null
function Trig_Melee_Initialization_Actions
handle null
GetTriggerUnit()
Player(0)
CreateTimer()

無值

function UnitInventoryCount takes unit whichUnit returns integer
    local integer index
    local integer count

    loop
        if (UnitItemInSlot(whichUnit, index) != null) then   //跳出
            set count = count + 1
        endif

        set index = index + 1
        exitwhen index >= bj_MAX_INVENTORY
    endloop

    return count
endfunction

function MyFunc takes nothing returns nothing
    local integer x
    local integer y
    set x = UnitInventoryCount( GetTriggerUnit() )   //跳出
    set y = x + 1
endfunction 

如果我們這樣寫,那麼執行到if那行時,由於電腦找不到index的值,會造成函數出錯並跳出。
此時它沒有傳回值,因此造成接下來的set x = UnitInventoryCount( GetTriggerUnit() )找不到值而跳出。

資料轉換

不同的資料可互相轉換,其轉換方式如下:

  1. I2R(<Integer>):將整數轉成實數。

  2. I2S(<Integer>):將整數轉成字串,一律以10進制方式呈現。

  3. R2I(<Real>):將實數轉成整數,小數無條件捨去。

  4. R2S(<Real>):將實數轉成字串,轉換後至少顯示3位小數。

  5. R2SW(<Real>, <最低長度>, <小數位數>):將實數轉化為格式化的字串,將多於<小數位數>的小數部分四捨五入;如果轉換後長度小於<最低長度>,則在左邊補上空白。好處是可以對齊。

  6. S2I(<String>):將字串轉成整數。轉換方法是從第一個字元開始往後找,直到遇上不合法的字元即停止轉換。

  7. S2R(<String>):將字串轉成實數。轉換方法是從第一個字元開始往後找,直到遇上不合法的字元即停止轉換。

資料運算

字串運算

  • +:連接二個字串,如"abc" + "def" ==> "abcdef"

  • ==:判斷二個字串是否完全相同

  • !=:判斷二個字串是否不同

整數/實數運算

  • +:前數加後數

  • -:前數減後數

  • *:前數乘以後數

  • /:前數除以後數。對整數而言,小數點無條件捨去。

  • ==:判斷前者是否等於後者

  • !=:判斷前者是否不等於後者

  • >:判斷前者是否大於後者

  • >=:判斷前者是否大於或等於後者

  • <:判斷前者是否小於後者

  • <=:判斷前者是否小於等於後者

邏輯運算

  • ==:判斷二者是否同真或同假

  • !=:判斷二者是否不同

  • and:二者中如果皆為真,則結果為真,否則為假

  • or:二者中如果皆為假,則結果為假,否則為真

  • not:將真改為假或假改為真

運算順序

運算優先順序如下(順序都是按照常理訂的。各位可自己想想,如果順序不是這樣會發生什麼事):
()先執行
* /
+ -
> >= <= <
not
== !=
or
and

※如果"+", "-"號後面有接數字,而前面沒有接數字,則優先運算(視為數字的正負號,和數字是一體的)。

運算順序範例

試試看,反白檢查運算結果(()內先執行)。

 整數

  1. 0xA + 012
    ==> 20

  2. -012 - 256
    ==> -266

  3. 0xC * 12
    ==> 144

  4. 25 / 3
    ==> 8

  5. 12 / 0
    ==> 出錯並跳出函數(0不可為分母)

 邏輯

  1. true == true
    ==> true

  2. true == false
    ==> false

  3. 3 = 5
    ==> 語法錯誤 (3==5才正確)

  4. 1 == 2
    ==> false

  5. "ABC" == "abc"
    ==> false

  6. true != false
    ==> true

  7. 0xA != 012
    ==> false

  8. true and false
    ==> false

  9. true or false
    ==> true

  10. not true
    ==> false

  11. 1 >= 2
    ==> false

  12. 2 => 1
    ==> 語法錯誤(沒有=>,只有>=)

  13. 5 > 3
    ==> true

  14. 4.0 < 16.3
    ==> true

  15. 10.0 <= 10.0
    ==> true

  16. 100 =< 3
    ==> 語法錯誤(沒有=<,只有<=)

 實數

  1. 1.1 + 1.1
    ==> 2.2

  2. 1.1 - 1.1
    ==> 0.0

  3. 1.1 * 1.1
    ==> 1.21

  4. 1.1 / 1.1
    ==> 1.0

 字串

  1. "ABC" + "abc"
    ==> "ABCabc"

  2. "ABC" + ""
    ==> "ABC"

  3. "ABC" - "A"
    ==> 語法錯誤(文字不能相減)

 混合

  1. 14 * 4 / 4
    ==> 14

  2. 14 / 4 * 4
    ==> 12

  3. 1.0 * 3.0 / 3.0
    ==> 1.0

  4. 1.0 / 3.0 * 3.0
    ==> 1.0

  5. 2 + 1 * 3
    ==> 5

  6. 3 * - 2
    ==> -6

  7. 1 + 1 == 2
    ==> true

  8. not 3 == 5
    ==> 語法錯誤(會先運算not 3並出錯)

  9. "ABC" + "123" == "ABC123"
    ==> true

  10. not true or true
    ==> true

  11. 1 < 2 == 3 < 4
    ==> true

  12. false == true and true == false
    ==> false

  13. 1 == 2 and 2 == 1
    ==> false

  14. false and true or true and true
    ==> false(or和and優先度不同)

綜合教學/jass入門教學/2.資料.txt · 上一次變更: 2008年07月22日 2:23 pm 來自 wasabi
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0