• ベストアンサー

空っぽだけど真にして条件を実行したい

ActionScriptというFlashの言語についてなのですが、 プログラミングの基本だと思いますので、 アドバイスお願いします。 if(v_title == ""){ gotoAndPlay("title");     }else{ v_titleが空っぽじゃない場合の処理 } という上記の単純なスクリプトなのですが、 上記の条件式では、==の右側が""となっているので、 偽と判断されて、gotoAndPlay("title"); という式が実行されません。 ですが、私は、v_titleの中身が空っぽの場合に、 真となって、gotoAndPlay("title") をどうしても実行させたいと思っています。 中身がない変数を「真」と判断させるための条件式の書き方を教えてください。 ActionScriptでは文字列比較も、数値比較も==で済ませられるようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.7

No.3と6のarukamunです。 >if(v_titleLength < 1){ >gotoAndPlay("title"); >} >とすることで実行されました。 で出来たんですね。 とりあえずは、どうにかなりそうですね。 >ポイントは、<1と書いた点にあるようです。 >==0と書くとやはり条件式では偽になる? >のでしょうか。 >ほかの言語でも同じなのでしょうか? 一般的に考えてもlengthは0以上を返すはずですね。 >v_titleLength==0 >だと偽になってしまって、ブロックの中身が実行さ>れないようです? >私の間違いでしょうか? 但し、エラー値をマイナスで示しているかも知れませんので ==0 では拾えないのかも知れません。 そういうこともふまえて <1 というのは大正解かもしれませんね。 長さを求める関数?の仕様に依存するという事です。

shevy
質問者

お礼

回答ありがとうございます。 >一般的に考えてもlengthは0以上を返すはずですね。 いえ、今回の場合は、v_titleの中身が空っぽの場合は、lengthが0になるはずです。 ところが、v_titleLength==0にすると、 0というのが偽になるわけで、 やはりブロック内が実行されないのかなと 思っていて、再度質問させて頂いたというわけです。 他の言語においても、 エラー値というのは発生するものなのでしょうか?

その他の回答 (8)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.9

たびたびarukamunです。 v_titleの初期化ですが、HTMLでの <FORM>タグの <INPUT NAME=v_title VALUE=""> といった様にVALUEを初期化していますか? していないのであれば、してみると良いかもしれません。 その上で、ログの中身がどうなっているのかを確認して結論を出した方が良さそうですね。

shevy
質問者

お礼

ありがとうございます。 何度もありがとうございました。 かなりのレス数になってしまいましたので、 ここで締め切ることに致しますね。 本当にありがとうございました。 いい勉強になりました。

shevy
質問者

補足

v_titleの件なのですが、 やはりログの中身は空っぽのようでした。 またflashとcgiを用いた掲示板ですので、 flashの関数について別途調べることに致します。 ちょっと今回のケースでは、 頭をけっこう悩ませましたが、 親身に相談に乗ってくださったことに  感謝いたします。 ありがとうございました。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.8

たびたびarukamunです。 v_title や v_titleLength を何か他のもの(ファイルや画面)に出力させる事は出来ませんか? どんな値が入っているかのデバッグの為です。 あと思ったのですが、v_titleはどういった初期化をしているのでしょうか。 v_titleを定義した直後に v_title = "" ; といった事をしていますか。 していないのであれば、どんな値が入っているかは比較出来ないですよね。

shevy
質問者

お礼

何度も本当にありがとうございます。 説明不足で申し訳ございません。 v_titleは実は、CGIからのデータを受ける変数なんです。 つまり、掲示板のタイトルが空っぽなら、 gotoAndPlay("title"); という「タイトルを書いてください」というような警告メッセージを発生させるフレームへジャンプさせるようにしています。 したがって、v_titleの中身の有無は、過去ログファイルを見ればよいことになります。 そこで、タイトル欄を未記入で送っているということをログファイルで確認できたにも関わらず、 if(v_titleLength==0) という条件式を偽と判断?してしまったようで、 ブロックの中身の gotoAndPlay("title") が実行されない(警告メッセージが表示されない)ことが、 不思議で仕方がなくなったという次第です。 やはり、今回の例では、v_titleLengthの中身は、 ログファイルを見る限りは、タイトル欄が未記入の場合は、空っぽだったと判断するのですが、 いかが思われますでしょう?

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.6

No.3のarukamunです。 なるほど、""で比較してもダメなのですね。 文字列の長さを返すstringlengthの様なものはありますか? JavaScriptであれば if ( v_title.length == 0 ){   gotoAndPlay("title"); } else {   // v_titleがnullで無い場合の処理 } の様になります。 また、nullの様なものはありませんか? if ( v_title == null ){   gotoAndPlay("title"); } else {   // v_titleがnullで無い場合の処理 } もしくは といった様に何か入っていればTRUEとなるかも知れません。もし、前後関係を入れ替えたくないのであれば、 if ( !v_title ){   gotoAndPlay("title"); } else {   // v_titleに何か入っている場合 } でも良いかもしれません。

shevy
質問者

お礼

ご丁寧にありがとうございます。 なんと今できました! おっしゃられるとおり、v_titleの文字数を取得してから、 if(v_titleLength < 1){ gotoAndPlay("title"); } とすることで実行されました。 ポイントは、<1と書いた点にあるようです。 ==0と書くとやはり条件式では偽になる? のでしょうか。 ほかの言語でも同じなのでしょうか? v_titleLength==0 だと偽になってしまって、ブロックの中身が実行されないようです? 私の間違いでしょうか?

shevy
質問者

補足

ブロックの中身が実行されたのは、 v_titleLengthの中身が0文字の場合です。 1文字入ると、条件は偽になってブロックの中身が実行されません。 本当は、v_titleLength==0 という単純な式にしたかったのですが、どうも駄目なようです。

回答No.5

ActionScriptは知りませんが、 if(this.v_title.isblank) { という感じの属性とか if(isblank(v_title)) { みたいな関数ってないですか。

shevy
質問者

お礼

ありがとうございます。 isblankという属性はありませんが、 nullというのは存在します。 でもnullは!=というnot演算子上でしかの サンプルしか見当たらないので、結局、今回のケースでは使用はできない?のかなと思っています。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.4

何も入っていないが、何を意図しているのでしょう。 String型で宣言して、何も代入していない場合なら、 初期値として v_title = ""; を宣言すればよいです。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.3

Active Scriptは解りませんが if ( v_title == "" ){   gotoAndPlay("title"); } else {   // v_titleがnullで無い場合の処理 } といっていますが、v_titleの真偽にかかわらずgotoAndPlay("title");を実行したいという事でしょうか? それであれば、if文より前に出してしまえば良いと思います。 gotoAndPlay("title"); if ( v_title == "" ){   // v_titleがnullの場合の処理 } else {   // v_titleがnullで無い場合の処理 } 但し、上記の例を見る限り、v_titleが入っている状態でgotoAndPlay("title");は実行されては不味いのではないかとも思われます。 これによる不具合も考えれますので、プログラム全体を見直す必要があると思います。 ご確認下さい。

shevy
質問者

お礼

ありがとうございます。 >v_titleの真偽にかかわらずgotoAndPlay("title");>を実行したいという事でしょうか? いえ、そうではなく、v_titleの中身に何らかのストリングが 格納されていれば、gotoAndPlay("this") は実行させたくないのです。 if ( v_title != "" ){    gotoAndPlay("title"); } 当たり前なのですが、上記のよう!=を使用すると、v_titleの中身があるのに、gotoAndPlay("title");が 実行されてしまいます。 もう一度アドバイス願いますでしょうか。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2

ActionScriptで使えるかどうかわかりませんが 文字数を数える関数を用いたらどうでしようか? たとえば len(v_title) == 0){ とか。

shevy
質問者

お礼

ありがとうございます。 actionScriptにもlength関数があるので、 文字数は取得できます。 そこで、実際に今実行してみたのですが、 結局文字数が0というのは、偽になるようなので、 ブロックの中身が実行されませんでした。。。 文字数が0の場合も偽となるのでしょうか?

shevy
質問者

補足

補足です。 今できました! v_titleの文字数を取得してから、 if(v_titleLength < 1){ gotoAndPlay("title"); } とすることで実行されました。 ポイントは、<1と書いた点にあるようです。 ==0と書くとやはり条件式では偽になる? のでしょうか。 ほかの言語でも同じなのでしょうか?

  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.1

Not演算子は、ActionScriptであるのでしょうか? TrueならFalseをFalseならTrueを返す演算子です。

shevy
質問者

お礼

ありがとうございます。 Not演算子というのは、 != のことでしょうか? !=は存在しますが、 それを使用した場合、今回のケースの場合、 どのように書き直せばいいのかわかならかったもので 教えていただけないでしょうか。

関連するQ&A