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

小ワザ

条件演算子を擬似的に実装してみる。

条件演算子とは?

CやJava等の言語で実装されている演算子の一つです。 簡単に言うと、if文と値を返す関数を一つにしたような物です。

簡単な例を挙げます

a = (b == c) ? "true" : "false"

この構文の説明をすると、

代入先の変数 = (条件式) ? 真のときの値 : 偽のときの値

となります。

先ほどの例をとって説明すると、
b == cが成り立つ場合は a に "true" が代入され、
b == cが成り立たたない場合は a に "false" が代入されます。

これを条件演算子を使わないで書くと

if (b == c) {
    a = "true"
} else {
    b = "true"
}

のようになり、ソースが長くなってしまいます。

HSP上で条件演算子を実装するには?

では、HSPではどのように条件演算子を実装するのでしょうか。
HSPでは先ほどの例を以下のような書き方もできます。

if b = c : a = "true" : else : a = "false"

これでもいいのですが、もっと簡潔に書きたいですよね。
HSPの構文上、一般的な条件演算子はマクロでも実装できないので、ここでは関数を自作して擬似的に実装します。

サンプルコード

+  サンプルコード

関数として新たにwitch_int,witch_double,witch_str,witch_varを定義しました。
witch_intを例に使い方を簡単に説明すると、以下のようになります。

witch_int(条件式, 真のときの値(int), 偽のときの値(int))

条件式が真であれば2番目の引数の値を、偽であれば3番目の引数を返します。

関数の内部では大したことはやってはいません。
ただ条件式を比較し、それに応じた戻り値を返しているだけです。

好みにもよりますが、if文を並べて書くよりは簡潔になります。
witch_int,witch_double,witch_str,witch_varの違いは、整数、実数、文字列、変数の違いだけです。
また、関数ですのでサンプルコードにあるように命令や関数の中に組み込むことが出来ます。

コメント

  • if文の羅列が嫌いな方に。関数の定義で条件式の引数の型をintにしています。HSPでの比較演算の動作がよく解かるかもしれません。 -- 黒猫白狼? 2006-12-22 (金) 21:44:51
  • 「代入」と説明していますが、三項演算子は「代入」というよりも値を返す「関数」と条件式演算子が合体したみたいなものです。条件式にそって TRUE と FALSE の場合に別々の結果を返します。 -- Irisawa 2006-12-22 (金) 22:08:05
  • あ、言われて見れば確かに・・・。ご指摘どおり修正しておきました。ありがとう御座います。 -- 黒猫白狼? 2006-12-22 (金) 22:37:29
  • 三項演算子は文字通り項が三つある演算子の総称ですよ。ここでいっているのは条件演算子のことですね。 -- naznyark? 2006-12-23 (土) 01:07:35
  • 三項演算子というと、コレが一番最初にでてくるので勘違いしていたようです。ご指摘ありがとう御座います。 -- 黒猫白狼? 2006-12-23 (土) 18:06:55
    • まあ、この条件演算子の他に三項演算子って聴かないですけどね。他に三項演算子ってあるんでしょうか。 -- Irisawa 2006-12-23 (土) 18:54:09
      • 私も他には知らないです。 -- naznyark? 2006-12-24 (日) 01:24:48
      • Wikipedia では 通常、三項演算子というとこの条件演算子のことを指すと云っていますけどね。 -- Irisawa 2006-12-24 (日) 01:34:02
  • 単項演算子・二項演算子と並べたときの条件演算子を三項演算子と呼ぶから「三項演算子」は総称だ、って言いたかったのでは?んで、三項演算子には条件演算子しか(今のところ)なければ、「三項演算子=条件演算子」という認識で(今のところ)支障はないんでしょう。 -- kz3 2006-12-24 (日) 07:52:17
  • でも、今後のことを考えるとwikiとしては条件演算子のほうがいいかもしれませんね。 -- 黒猫白狼? 2006-12-24 (日) 23:27:26
  • もしかして、Whichの間違い? -- UG? 2007-12-02 (日) 12:19:00
  • このモジュールの場合、witch_int(1,a(),b())としたときb()も評価されてしまいますよね(仕方ないですけど)。 -- FUJI? 2008-06-01 (日) 18:36:35
  • そこで、パラメータをスキップして評価しない witch をプラグインで作ってみました。 witch.zip -- FUJI? 2008-06-01 (日) 18:38:14
  • whichだな。 -- 2008-06-24 (火) 20:08:33

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

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2008-06-30 (月) 22:18:33 (1986d)