hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
単項演算子!と同じ動作をしたい - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

単項演算子!と同じ動作をしたい

本や雑誌でHSPじゃない言語のサンプルプログラムを読んでいると
単項演算子!が出てきます。便利そうですねえ
では単項演算子!と同じ動作をするにはどうすればいいでしょうか?

Everything is expanded.Everything is shortened.
  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
//	結果:エラーです

見事にエラーですね。でも試行錯誤しましょう

問題:a=1:if !(a==1) と同じ結果を得たい

Everything is expanded.Everything is shortened.
  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"}
//	結果
//	if 1!(a==1) はfalse
//	if 1!(a==2) はtrue
//	正解
    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 0!(a==1) はtrue
//	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 1!1 はfalse
//	if 1!0 はtrue
//	正解
    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"}
//	結果
//	if 0!1 はtrue
//	if 0!0 はfalse
//	不正解

注:誤字があったので直しておきました
これで単項演算子!と同じ動作はできましたがスクリプトがイマイチ読み難いです
そんな時は #define で true と false を定義すると使いやすくなります

Everything is expanded.Everything is shortened.
  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"}
//	結果
//	if true!(a==1) はfalse
//	if true!(a==2) はtrue
//	正解
    
    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"}
//	結果
//	if (a==1)==false はfalse
//	if (a==2)==false はtrue
//	正解

無理に0か1と!で比較するよりfalseと==で比較した方がわかり易い

コメント

  • これを書いたのは僕です。ごめんなさい。こういうちょっとした疑問を書くのもありですか? -- りすと? 2006-11-19 (日) 02:56:14
  • #define ne 0.0!= ってすると、いい感じになるかもしれません。 -- s_hiiragi? 2010-01-21 (木) 03:53:31
  • neはnot equalなので、notの方がベターですね -- 2010-01-21 (木) 08:30:58

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2010-01-21 (木) 08:30:58 (1417d)