« ロードでポン。 | トップページ | ctr_dist と this_model の軋轢。 »

2012年1月10日 (火)

ブールのトグル。

どうでもいいネタいきますよ。


しかも、プログラマやスクリプト書きの人たちには笑われるような話ですがね。
お前そんなことも知らなかったのか、と。


まあいいんです。 今年でみんな死ぬんだから。
もうとことん恥を晒してもいいと、決めたんです。






いや、単に、スクリプトでブーリアン値のトグルをしたい時に、こんなに簡単に書けたのか、というだけ話です。 しかも JScript 限定の話ですね。

ちょっとスクリプトの調べものをしていて、SDKガイドのサンプルスクリプトでそういう書き方になっていて、ハッと気付きました。


hoehoge.value = !hogehoge.value;




こんだけです。
すいません。




なるほど、オンならオフに、オフならオンにしたいわけだから、元の値を ! でひっくり返せばいいというわけですね。 ! って 「反対の」 とか 「非」 の意味ですよね。なるほど、今までも条件分岐その他でさんざん使ってきたからその意味は知っていたけど、こういう風に値をセットする時にも使えるという発想が、なかったです orz

俺、1行スクリプトとかではない、ある程度まとまったスクリプトを書き始めたのが 2005年だったと思うんですよね。 ってことは7年前ですか。 そんだけ経っているのに、こういう書き方ができるなんて、今の今まで知りませんでしたよ。



恥を晒しますけどね、今までは、


if ( hogehoge.value == true )
{
    hogehoge.value = false;
}
else
{
    hogehoge.value = true;
}





こんな風に書いてました orz
阿呆か俺は orz
1行で済むじゃねえかよ orz
知らなかったよ orz



知らなかったというより、こういうのって、センスですよね。 センスとかスジのある人って、1か2を体験するだけで10できるようになっちゃうわけですね。想像力の豊かさ、頭の回路のつながり易さ、ですかね。  俺なんかは、10のことは、1から10まで全部実体験として遭遇しないと身に付かないんですね。 ええ、そんな野郎ですよ。 どうせ皆死ぬけど。






PPG の Logic の中でも、似たような無駄をいっぱいやってましたねえ。
この書き方があればずいぶんスッキリします。



例えばこういうやつね。


var oP = XSIFactory.CreateObject( "CustomProperty" );
oP.name = "はげ";
oP.AddParameter2( "bHage", siBool, true );
oP.AddParameter2( "sHage", siString, "はげはげ~ん" );

var oL = oP.PPGLayout;
oL.AddItem( "bHage", "はげちょびん。" );
oL.AddItem( "sHage", "このハゲ野郎" );

oL.Language = "JScript";
oL.Logic = OnInit.toString() + bHage_OnChanged.toString();

function OnInit()
{
    bHage_OnChanged();
}
function bHage_OnChanged()
{
    PPG.sHage.ReadOnly = !PPG.sHage.ReadOnly;
}

InspectObj( oP );


Hagehage

ブーリアンスイッチをオンオフすると、テキストフィールドのリードオンリー属性、つまり書き込み可・不可がトグルします。 今まで色んなスクリプトでさんざん書いてきた処理ですが、そのたびに、 オブジェクトモデルで書くとブーリアンのトグルが麺独裁よなあ、コマンドなら ToggleValue 使えてラクだけど、でもコマンド嫌だなあオブジェクトモデルだけで書きたいなあ。  などと悶々としていました。 阿呆か俺は orz  オブジェクトモデルでも1行で書けるではないか。

↑あー ちなみにリードオンリー属性のトグルは ToggleValue コマンドでは出来ません念のため。ここはどのみちオブジェクトモデルでの書き方が必要になると思います。 ToggleValueコマンドで書き換えることができるのは、ブーリアン形パラメータのであり、リードオンリーかどうかなどのパラメータの属性をいじるコマンドは無いと思います。 上の書き方だと、コマンドでもリードオンリー属性がいじれるけどコマンドが嫌だからオブジェクトモデルにしてました、という風にも読めるので、そういう意味ではないですよという補足でした。



こんなのもアリか。

Selection(0).Properties( "Visibility" ).viewvis.value = !Selection(0).Properties( "Visibility" ).viewvis.value;

選択しているブツの View Visibility をトグルしています。 ToggleVisibility コマンドのオブジェクトモデル版みたいな?





まあ、ともかくですね、今年はみんな死ぬということが言いたかったのです。
そうなんです。






ところで、 Python や VBScript では、同じように簡単にブール値をひっくり返す書き方って、できますかね?  俺、いちおう母国語としている JScript ですらこんなですから、他の言語は完全にわかりません。




.

|

« ロードでポン。 | トップページ | ctr_dist と this_model の軋轢。 »

コメント

基本的にはどの言語でも似たようなことが出来ると思います。
Pythonだと!演算子はつかえないので、not演算子を使って
a = not b みたいに書くことが出来ますよ!!

投稿: tai | 2012年1月10日 (火) 16時32分

こんな感じです
hoehoge.value = not hogehoge.value # Pytnon
hoehoge.value = Not hoehoge.value // VBScript


0と1のトグルとか、なかなか思いつかないですよね
hoehoge.value = 1 - hoehoge.value; // JScript

投稿: ore | 2012年1月10日 (火) 16時49分

tai さん、あなたもしかして、こまっつあんですか。

なるほど、Python は not ですか。 びっくりマークよりは分かりやすい気もしますね!




ore さん、あなたもしかして、俺ですか。

なるほど、VBS は Not ですか。 びっくりマークよりは分かりやすい気もしますね!

げげっ JScript では、1 - value でも良かったのか! なるほど!! そりゃそうですね!
こうして見せられると、すごく当たり前に見えるのに、
自分じゃ絶対思いつきません!
カスりもしません!!
相変わらず自分の頭の硬さに、吐き気がします!!
さすが嘔吐デスクユーザ!!
ちょっと死んで来ます!!

投稿: junki | 2012年1月10日 (火) 18時40分

三項演算子つかうと

hoe.value = hoe === 1 ? 0 : 1; // JScript
hoe.value = 1 if hoe is 0 else 0 # python

みたいにかけますね
この場合ならtaiさんやoreさんのがいいとおもいますが
パッと見イミフですがなれると三項演算子もなかなか便利です。

投稿: anamorph | 2012年1月10日 (火) 22時52分

anamorph さん、 げげげっ

Python の方は、まあ、英語っぽいのでわかります。 「ほえが0なら1だぜそうじゃなきゃ0な」って言ってますもんね。 へえ、すごいな、こんな風に書けるんだ Python語は。

しかし! JScript語 の方は、ざっぱりわかりません。なんですかその象形文字は。 こんなもの読めるのは人間ではない。悪魔だ。 同じく悪魔の言葉である正規表現のような意味不明さですね!



いかん、俺は JScript が母国語のつもりだったのに、俺の母国語はこんな悪魔の言語だったのか。知らなかった。 これが理解できるようになってしまうと、この悪魔表現を使ってスターバックスでカフェラテを注文できるようになったりしてしまうのだろうか。恐ろしいです。別の言語に改宗したいです。 Python教に入信しようかな。


投稿: junki | 2012年1月10日 (火) 23時36分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: ブールのトグル。:

« ロードでポン。 | トップページ | ctr_dist と this_model の軋轢。 »