小ワザ
単項演算子!と同じ動作をしたい †
本や雑誌でHSPじゃない言語のサンプルプログラムを読んでいると
単項演算子!が出てきます。便利そうですねえ
では単項演算子!と同じ動作をするにはどうすればいいでしょうか?
1
2
3
4
5
6
7
8
|
| a=1
if !(a==1){ mes "if !(a==1) はtrue"}
else { mes "if !(a==1) はfalse"}
if !(a==2){ mes "if !(a==2) はtrue"}
else { mes "if !(a==2) はfalse"}
stop
|
見事にエラーですね。でも試行錯誤しましょう
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
| a=1: mes "a=1"
if 1!(a==1){mes "if 1!(a==1) はtrue"}
else { mes "if 1!(a==1) はfalse"}
if 1!(a==2){mes "if 1!(a==2) はtrue"}
else { mes "if 1!(a==2) はfalse"}
a=1: mes "a=1"
if 0!(a==1){mes "if 0!(a==1) はtrue"}
else { mes "if 0!(a==1) はfalse"}
if 0!(a==2){mes "if 0!(a==2) はtrue"}
else { mes "if 0!(a==2) はfalse"}
if 1!1{ mes "if 1!1 はtrue"}
else { mes "if 1!1 はfalse"}
if 1!0{ mes "if 1!0 はtrue"}
else { mes "if 1!0 はfalse"}
if 0!1{ mes "if 0!1 はtrue"}
else { mes "if 0!1 はfalse"}
if 0!0{ mes "if 0!0 はtrue"}
else { mes "if 0!0 はfalse"}
|
注:誤字があったので直しておきました
これで単項演算子!と同じ動作はできましたがスクリプトがイマイチ読み難いです
そんな時は #define で true と false を定義すると使いやすくなります
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
| #define true 1
#define false 0
a=1: mes "a=1"
if true!(a==1){ mes "if true!(a==1) はtrue"}
else { mes "if true!(a==1) はfalse"}
if true!(a==2){ mes "if true!(a==2) はtrue"}
else { mes "if true!(a==2) はfalse"}
a=1: mes "a=1"
if (a==1)==false{ mes "if (a==1)==false はtrue"}
else { mes "if (a==1)==false はfalse"}
if (a==2)==false{ mes "if (a==2)==false はtrue"}
else { mes "if (a==2)==false はfalse"}
|
無理に0か1と!で比較するよりfalseと==で比較した方がわかり易い
- これを書いたのは僕です。ごめんなさい。こういうちょっとした疑問を書くのもありですか? -- りすと?
- #define ne 0.0!= ってすると、いい感じになるかもしれません。 -- s_hiiragi?
- neはnot equalなので、notの方がベターですね --