投稿者 |
スレッド |
cancan |
Åê¹ÆNo.45401 投稿日時: 2010-7-29 20:27 |
新米 居住地: 埼玉 投稿: 21
使用環境: AS2.0:WindowsXP、Flash8 AS3.0:Win7、CS5.5
|
Re: MCの存在を調べる ひろゆきさん 本当にありがとうございます。 >オブジェクトが存在していれば、true「として」評価されるのであって、 >true「ではない」でしょう? あ、そうですね。 なんとなくイメージできました。 trace(a_mc)の結果が、インスタンスのパスが得られる…ということは、if (a_mc)はパスを評価している、と考えていいんですか? そうではなくて、やっぱりa_mcという「ムービークリップ」を評価している、ということですか? ---------------- cancan@さいたま
|
|
|
961832p |
Åê¹ÆNo.45402 投稿日時: 2010-7-29 20:34 |
常連 居住地: Akiruno-shi 投稿: 155
使用環境: :AS3: - Adobe Flex SDK, Eclipse, AIR GEAR - LB.Log AS3, Alcon2 :AS2: - AMES(ASDT, MTASC, Eclipse, swfmill) - Natural Entry Point Method - LB.Log, Zeroi Pro, Firefox, Chromium(Iron), IE ---------------- Pro,
|
Re: MCの存在を調べる 自分はこのあたり、いつも感覚的に使ってしまっているので(汗)、解釈が間違っているかもしれませんが、 「if(a_mc == true)」は、「MovieClip型の変数a_mcの中身」と「Boolean型の値true」は等しいかどうかの評価結果が真か偽かという事なので、この場合は偽に。 「if(a_mc)」は、MovieClip型の変数a_mcの中身の評価結果が真か偽かという事なので、undefinedやnullが入っていれば偽、それ以外のもの(参照?)が入っていれば真に、 といった感じなのでしょうか。
「感覚的に」とか言ってる自分が言うのは変ですが(汗)、慣れないうちは略さずに丁寧な記述を心がけたほうが、ミスも防げて良いのかもしれませんね。 気になったので、どういうのがtrueやfalseになるのか自分もAS2とAS3の両環境でやってみました。コードと各結果は下にありますので参考になれば幸いです。
このスレッドとは直接関係ありませんが、AS3環境では中身がundefinedではなくnullに置き換えられていて、結果がAS2の時と少し違っていました。 こういったところは、ちゃんと把握していないとバグが入り込みやすそうで、何だか不安になりますね(汗)。
----------------
以降は今回試したAS2とAS3のコードです。コメント部分は各行の出力結果になっています。
【AS2】
var mc0:MovieClip;
var mc1:MovieClip = undefined;
var mc2:MovieClip = null;
var mc3:MovieClip = this.createEmptyMovieClip("3_mc", this.getDepth() + 1);
//undefined undefined null _level0.main_mc.3_mc
trace("i "+ mc0 +" "+ mc1 +" "+ mc2 +" "+ mc3);
//false false false false
trace("i "+ (mc0 == true) +" "+ (mc1 == true) +" "+ (mc2 == true) +" "+ (mc3 == true));
//false false false false
trace("i "+ (mc0 == false) +" "+ (mc1 == false) +" "+ (mc2 == false) +" "+ (mc3 == false));
//false false false true
trace("i "+ Boolean(mc0) +" "+ Boolean(mc1) +" "+ Boolean(mc2) +" "+ Boolean(mc3));
//false false false true
trace("i "+ (Boolean(mc0) == true) +" "+ (Boolean(mc1) == true) +" "+ (Boolean(mc2) == true) +" "+ (Boolean(mc3) == true));
//true true true false
trace("i "+ (Boolean(mc0) == false) +" "+ (Boolean(mc1) == false) +" "+ (Boolean(mc2) == false) +" "+ (Boolean(mc3) == false));
//true true true false
trace("i "+ !mc0 +" "+ !mc1 +" "+ !mc2 +" "+ !mc3);
//false false false true
trace("i "+ !!mc0 +" "+ !!mc1 +" "+ !!mc2 +" "+ !!mc3);
//true true true false
trace("i "+ (mc0 == undefined) +" "+ (mc1 == undefined) +" "+ (mc2 == undefined) +" "+ (mc3 == undefined));
//true true true false
trace("i "+ (mc0 == null) +" "+ (mc1 == null) +" "+ (mc2 == null) +" "+ (mc3 == null));
//true true false false
trace("i "+ (mc0 === undefined) +" "+ (mc1 === undefined) +" "+ (mc2 === undefined) +" "+ (mc3 === undefined));
//false false true false
trace("i "+ (mc0 === null) +" "+ (mc1 === null) +" "+ (mc2 === null) +" "+ (mc3 === null));
//false false
trace("i "+ (undefined == true) +" "+ (null == true));
//false false
trace("i "+ (undefined == false) +" "+ (null == false));
//false false
trace("i "+ (Boolean(undefined) == true) +" "+ (Boolean(null) == true));
//true true
trace("i "+ (Boolean(undefined) == false) +" "+ (Boolean(null) == false));
//true true
trace("i "+ (!undefined == true) +" "+ (!null == true));
//false false
trace("i "+ (!undefined == false) +" "+ (!null == false));
//false false
trace("i "+ (!!undefined == true) +" "+ (!!null == true));
//true true
trace("i "+ (!!undefined == false) +" "+ (!!null == false));
【AS3】
var mc0:MovieClip;
var mc1:MovieClip = undefined;
var mc2:MovieClip = null;
var mc3:MovieClip = new MovieClip();
//null null null [object MovieClip]
Log.trace("i "+ mc0 +" "+ mc1 +" "+ mc2 +" "+ mc3);
//false false false false
Log.trace("i "+ (mc0 == true) +" "+ (mc1 == true) +" "+ (mc2 == true) +" "+ (mc3 == true));
//false false false false
Log.trace("i "+ (mc0 == false) +" "+ (mc1 == false) +" "+ (mc2 == false) +" "+ (mc3 == false));
//false false false true
Log.trace("i "+ Boolean(mc0) +" "+ Boolean(mc1) +" "+ Boolean(mc2) +" "+ Boolean(mc3));
//false false false true
Log.trace("i "+ (Boolean(mc0) == true) +" "+ (Boolean(mc1) == true) +" "+ (Boolean(mc2) == true) +" "+ (Boolean(mc3) == true));
//true true true false
Log.trace("i "+ (Boolean(mc0) == false) +" "+ (Boolean(mc1) == false) +" "+ (Boolean(mc2) == false) +" "+ (Boolean(mc3) == false));
//true true true false
Log.trace("i "+ !mc0 +" "+ !mc1 +" "+ !mc2 +" "+ !mc3);
//false false false true
Log.trace("i "+ !!mc0 +" "+ !!mc1 +" "+ !!mc2 +" "+ !!mc3);
//true true true false
Log.trace("i "+ (mc0 == undefined) +" "+ (mc1 == undefined) +" "+ (mc2 == undefined) +" "+ (mc3 == undefined));
//true true true false
Log.trace("i "+ (mc0 == null) +" "+ (mc1 == null) +" "+ (mc2 == null) +" "+ (mc3 == null));
//false false false false
Log.trace("i "+ (mc0 === undefined) +" "+ (mc1 === undefined) +" "+ (mc2 === undefined) +" "+ (mc3 === undefined));
//true true true false
Log.trace("i "+ (mc0 === null) +" "+ (mc1 === null) +" "+ (mc2 === null) +" "+ (mc3 === null));
//false false
Log.trace("i "+ (undefined == true) +" "+ (null == true));
//false false
Log.trace("i "+ (undefined == false) +" "+ (null == false));
//false false
Log.trace("i "+ (Boolean(undefined) == true) +" "+ (Boolean(null) == true));
//true true
Log.trace("i "+ (Boolean(undefined) == false) +" "+ (Boolean(null) == false));
//true true
Log.trace("i "+ (!undefined == true) +" "+ (!null == true));
//false false
Log.trace("i "+ (!undefined == false) +" "+ (!null == false));
//false false
Log.trace("i "+ (!!undefined == true) +" "+ (!!null == true));
//true true
Log.trace("i "+ (!!undefined == false) +" "+ (!!null == false));
※AS3環境ではビルド時、以下の警告がでました。
Main.as(27): col: 112 警告: MovieClip 型の変数は undefined にすることができません。値 undefined は MovieClip に型強制された後で比較されます。
Log.trace("i " + (mc0 == undefined) + " " + (mc1 == undefined) + " " + (mc2 == undefined) + " " + (mc3 == undefined));
^
Main.as(30): col: 115 警告: MovieClip 型の変数は undefined にすることができません。値 undefined は MovieClip に型強制された後で比較されます。
Log.trace("i " + (mc0 === undefined) + " " + (mc1 === undefined) + " " + (mc2 === undefined) + " " + (mc3 === undefined));
^
Main.as(33): col: 59 警告: null の比較が無効です。Boolean 型の変数は null にすることができません。
Log.trace("i " + (undefined == true) + " " + (null == true));
^
Main.as(34): col: 60 警告: null の比較が無効です。Boolean 型の変数は null にすることができません。
Log.trace("i " + (undefined == false) + " " + (null == false));
^
---------------- :961832p: - だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー
|
|
|
野中文雄 |
Åê¹ÆNo.45403 投稿日時: 2010-7-30 2:33 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境: CS5.5 .6.8 Vista Home Premium (SP1)
|
Re: MCの存在を調べる 「abcという変数」に、数値100や文字列"test"を入れてお試しください。 引用: cancanさんは書きました: 例えば、abcという変数にtrueかfalseか入ってるとしたら、 if(abc)もif(abc==true)も同じでいいんですよね? 教えていただいたサイトに、「表001■データのブール(論理)値評価」というのがあって、オブジェクトはtrueと書いてありました。 そしたらMc==trueでできないのかな?と思ったもので… 「ブール(論理)値」として「評価」するというのは、ブール(論理)値つまり「Boolean型」のデータに「変換」することを意味します。 trace(Boolean(100));
trace(Boolean("test"));
trace(Boolean(a_mc));
「trace(a_mc)の結果」は、[出力]パネルに表示するためにこれも変換された「特別な(文字列)表現」であって、中身そのものではありません。変数(インスタンス名)の中身は「ムービークリップ」(オブジェクト)、もっと正確には「ムービークリップ」(オブジェクト)の「 参照」と呼ばれるものです。 引用: cancanさんは書きました: trace(a_mc)の結果が、インスタンスのパスが得られる…ということは、if (a_mc)はパスを評価している、と考えていいんですか? そうではなくて、やっぱりa_mcという「ムービークリップ」を評価している、ということですか? ActionScript 3.0では、型指定をした変数に値が設定されていないとき、値はその データ型のデフォルト値になります。 undefinedが返るのは、 型指定をしない変数の初期値や配列に存在しないエレメント値、値を返さない( void)関数の戻り値などごくかぎられた場合です。 引用: 961832pさんは書きました: このスレッドとは直接関係ありませんが、AS3環境では中身がundefinedではなくnullに置き換えられていて、結果がAS2の時と少し違っていました。 こういったところは、ちゃんと把握していないとバグが入り込みやすそうで、何だか不安になりますね(汗)。 ----------------
|
|
|
cancan |
Åê¹ÆNo.45404 投稿日時: 2010-7-30 12:42 |
新米 居住地: 埼玉 投稿: 21
使用環境: AS2.0:WindowsXP、Flash8 AS3.0:Win7、CS5.5
|
Re: MCの存在を調べる 961832pさん たくさんの結果をありがとうございます。 参考にします。 じっくり見てるとこんがらがりそうになりましたが(笑)型指定して宣言してただけでは、Boolean変換してtrueにはならないんですね。はやりcreateEmptyMovieClipが必要なんですね(AS2.0では) 関係ないですが、3_mcと、数字で始まるmc名もエラーになるわけではなく付けられるんですね! 素朴な?疑問に共感いただきありがとうございました(^^) ---------------- cancan@さいたま
|
|
|
cancan |
Åê¹ÆNo.45405 投稿日時: 2010-7-30 12:50 |
新米 居住地: 埼玉 投稿: 21
使用環境: AS2.0:WindowsXP、Flash8 AS3.0:Win7、CS5.5
|
Re: MCの存在を調べる Fumioさん 回答ありがとうございます。 >「評価」するというのは、ブール(論理)値つまり「Boolean型」のデータに「変換」することを意味します なるほど、分かりました。 if(a_mc)というのは、if(a_mc==true)ではなく、if(Boolean(a_mc)==true)、のことなのですね。 試してみましたが、なるほど、結果が一致しました。 traceの結果も、変換された「特別な(文字列)表現」ということ、勉強になりました。 モヤモヤがスッキリしました(*^-^*) ご回答いただいたみなさん、本当にありがとうございました。 ---------------- cancan@さいたま
|
|
|
961832p |
Åê¹ÆNo.45407 投稿日時: 2010-7-30 14:01 |
常連 居住地: Akiruno-shi 投稿: 155
使用環境: :AS3: - Adobe Flex SDK, Eclipse, AIR GEAR - LB.Log AS3, Alcon2 :AS2: - AMES(ASDT, MTASC, Eclipse, swfmill) - Natural Entry Point Method - LB.Log, Zeroi Pro, Firefox, Chromium(Iron), IE ---------------- Pro,
|
Re: MCの存在を調べる cancan さん、応答ありがとうございます。
今回テストに使ったコードは確かに見づらいですね(汗)。 「これはどうかな?あれはどうだろう?」と色々やっていたら大量になってしまい、あまり意味の無い部分もありそうです。
今回のスレッドがきっかけで、自分もBoolean型とundefinedについて理解を深める事ができました。ありがとうございました。
----------------
Fumio さん、情報ありがとうございました。
AS2のコードをAS3へ持ってくる場合は、特に注意が必要そうですね…気をつけねば。 ---------------- :961832p: - だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー
|
|
|
野中文雄 |
Åê¹ÆNo.45412 投稿日時: 2010-7-31 5:49 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境: CS5.5 .6.8 Vista Home Premium (SP1)
|
Re: MCの存在を調べる 基本的に、変数には初期値を与えることでしょう。ということで、「 変数には初期値を与える」をまとめました。 引用: 961832pさんは書きました: AS2のコードをAS3へ持ってくる場合は、特に注意が必要そうですね…気をつけねば。 ----------------
|
|
|