randomize

2016/06/12

Killzone KidのArmaスクリプト講座:大文字小文字の区別

スクリプトを書く上で混乱を招きミスに繋がりかねないArmaの大文字小文字の区別について話そう。次の例から見ていこう。

_variable = "_var";
hint _VArIAblE; //"_var"を表示
variable = "var";
hint VARIaBLE; //"var"を表示
with missionNamespace do {
    hint variaBLE; //"var"を表示
};
hint (missionNamespace getVariable "VArIAbLe"); //"var"を表示
missionNamespace setVariable ["VARIABLE","VAR"];
hint variable; //"VAR"を表示
_funCTION = {
    hint "func";
};
null = [] spawn _functioN; //"func"を表示
funCtioN = {
    hint "func";
};
call FUNCtiON; //"func"を表示
変数名と命令・関数名は大文字小文字を区別しない。HINTHiNthint、これらは全て(訳注:命令「hint」として)動作する。コンフィグについても同じことが言える。
_result = getText (configFile >> "cfgWeapons" >> "arifle_MXC_F" >> "displayname");
//_result is "MXC 6.5 mm" 
_result = GEtTeXT (coNfiGfile >> "CfgWEAPONs" >> "aRIFLE_mxc_f" >> "displayNAME");
//_result is "MXC 6.5 mm" 
しかしながら分かりやすさと可読性について鑑みると常に大文字小文字の使い方を統一したほうが良いだろう。実際、特別な事情でもない限り、常に文字の使い方を統一したほうが良い。なぜなら通常の文字列の比較の命令、例えば==!=等は大文字小文字を区別しないが、どこかで大文字小文字の区別が必要な時が来るかもしれないからだ。
a = "HELLO";
b = "hello";
_result = if (a == b) then {"true"} else {"false"};
//_resultは"true"
_result = if (a != b) then [{"true"},{"false"}];
//resultは"false"
大文字小文字を区別する比較が必要な時は、==!=ではなく、大文字小文字を区別するinfindを使い配列の比較にすると良い。
a = "HELLO";
b = "hello";
_result = if (a in [b]) then {"true"} else {"false"};
//_resultは"false"
_result = if !(a in [b]) then [{"true"},{"false"}];
//resultは"true"
_result = if (([b] find a) >= 0) then {"true"} else {"false"};
//_resultは"false"
_result = if (([b] find a) < 0) then [{"true"},{"false"}];
//resultは"true"
それか、if/thenswitch/caseに置き換えることも出来る。
a = "HELLO";
b = "hello";
_result = switch a do {case b : {"true"}; default {"false"}};
//_resultは"false"
b = "HELLO";
_result = switch a do {case b : {"true"}; default {"false"}};
//_resultは"true"
ちなみに、強制的に大文字や小文字に変更する必要がある時、toUppertoLowerという2つの便利な命令があることを覚えておくと役に立つかもしれない。
a = "HeLlO";
a = toUpper a;
//aは"HELLO"になった
a = toLower a;
//aは"hello"になった
_array = ["MARK","STEVE","HENRY"];
_firstName = "Steve";
_result = _firstName in _array;
//_resultはfalse
_result = (toUpper _firstName) in _array;
//_resultはtrue
何か忘れていたら気軽に教えてほしい。

Enjoy,
KK


補足

1.16で追加された命令isEqualToは、大文字小文字の区別をする他、データ型が違う値も比較することが出来ますし、ぶっちゃけこっちのほうが色々と便利なので、==より色んな意味でおすすめです。

0 件のコメント :

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。