« デザイナーのためのActionScript講座 ― 第3回:コメントの使用 | メイン | デザイナーのためのActionScript講座 ― 第5回:関数の仕組みを知る »

2007年10月30日

[連載] デザイナーのためのActionScript講座 ― 第4回:文字列と数値

スクリプト内で文字として扱う文字を文字列と呼びます。 よく使う使用方法としては
var str_1 = "これは文字列です。";
var str_2 = "これは文字列です。";
trace(str_1);
trace(str_2);
このように " (ダブルクォーテーション)か ' (シングルクォーテーション)で挟まれた箇所が、
スクリプト中の文字列として扱われます。
var str_1 = "Adobe";
var str_2 = "Flash";
trace(str_1+" "+str_2);   //出力 : Adobe Flash
このように、文字列は + 演算子で結合することができます。

スクリプトでの数値は、第1回から使っているように、そのまま 1 2 3 4... と入力した数字、
もしくは計算によって求められた結果だったりします。
ただし文字列内に含まれる数字は数値として扱われません。

これは後々になっても注意しなければならないところなのですが、
外部からFlashに動的に読み込んだデータに含まれる数値データは文字列になります。
そのため意図した通りの結果が現れないときは、これが原因になっている可能性も考えてみてください。

ところで、ここまで文字列と数値は別物と書いてきましたが、以下のスクリプトの場合
trace( "1" == 1 ); //出力 : true
出力結果は true になります。
つまり同じであると判断します。
これは「文字列の 1 と数値の 1 が同じ値である」、と判断しているように見えますが
内部的には、文字列を一度数値に変換して、数値同士を比較するようになっているためです。

じゃあ問題ないじゃないか、と思ってしまいます。
実際、大抵は問題なかったりもしますが、次のような場合に困ったことになります。
var a = "10";
var b = 5;
trace(a+b);
この時の結果は「15」になってほしいところですが、実際は「105」と出力されてしまいます。
これは、片方が文字列の場合、もう片方も強制的に内部で文字列として扱われ、結果的に2つの文字列を結合した「105」が出力されるのです。
これを正しく計算するためには Number() 関数を使用します。
var a = "10";
var b = 5;
trace(Number(a)+b);//出力 : 15
Number() 関数は、()内の値を数値に変換するための関数です。
ただし、文字列のなかに数字以外の文字が含まれていた場合は正しく数値化できません。
また次のような可能性もあるかもしれません。
trace(Number("1"));  //出力 : 1
trace(Number(" 1")); //出力 : 1
trace(Number("1 ")); //出力 : NaN
1行目は正常に数値化できています。
2行目は数字の前に半角スペースが入った文字列ですが、これも正しく数値化されています。
3行目は出力結果がおかしなことになっています。
NaN とは Not a Number の略で、数値に変換しようとしたけど失敗しました。ということです。
こういった場合、一見すると分かりにくいので注意してください。

これらのような問題を起こさないためにも、数値文字列をきちんと区別して考える癖を付けておきましょう。

トラックバック(0)

このブログ記事を参照しているブログ一覧: デザイナーのためのActionScript講座 ― 第4回:文字列と数値

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/457

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。