--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2007-12-07(Fri)

久々にJavaScript

JSで弓の理論ダメージ計算機でも作ろうと思ったんだ。
エルフと人間のレンジのダメージ比較が気になったのがきっかけだ。

JSのいいところは、定義とかが硬くないこと。
変数には文字でも文字列でも小数でも整数でもなんでも入れれるし、サイズも気にしなくていい。
お手軽簡単に作れるのが魅力である。
だが、それは逆に不具合を招くことになる。

x = 1;
y = 2;
z = x + y;
さてzはいくつになるだろう。
普通は3にしたいし、3になると思う。
しかし12と計算されてしまうこともある。
+は数学の足し算の意味でも使われるが、文字列の結合としての意味も持つ。
文字として1と2を結合する。
すなわち2つをくっつけると12になってしまうのだ。
C言語辺りならintなどの型を宣言するので間違いなく整数同士の足し算として計算されて3になるのだが、JSだと文字列と認識されることもある。
どういう場合に文字列に認識されるかは、処理系依存なのだろうか、良くわからない。

じゃぁ、文字列の結合と認識されないように、するためにはどうすればいいのだろうか。
文字列の結合として勘違いされるのは、+に2つ以上の意味があるからである。
逆に言えば数学計算としての意味しか持たないものを混ぜてやれば、それぞれの変数は数字として扱われる。
掛け算の記号である*を使ってやって、
z = x*1 + y*1;
とすればよい(別に割り算の/を使い、1で割ってもいいが)。
もしくは、new Number()関数を使って、数字であることを宣言する。
x = new Number(1);
y = new Number(2);
これの代わりにMath.floor()などの小数点以下を処理する関数を使う手もあることはあるが、本来の用途ではないのでオススメはできない。

配列から数字データをとりだして計算したときに、良くこの問題にぶつかる。
いちいち数字宣言はしてられないので、自分は計算する際に*1をつけている。
たまにうっかり忘れてしまって、すごい計算結果に噴出してしまう。

レンジの計算機の話に戻すと、下拵えとしてDex上昇スキルとレンジスキルのデータをそれぞれ人間とエルフの両方のを準備した。
ダメージ計算式とか表示画面とかも作ったのだが、時間が来てそこで一旦中断。
続きはまた今度なのだが、今度はいつだろう。

comment

comment form

管理者にだけメッセージを送る

カウンタ
カレンダ
08 ≪ 2017/09 ≫ 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最近の記事
Categories

openclose

月別アーカイブ
書いてる人

searth

Author:searth
DKだから翼は生えないけれど

ブログ内検索
リンク
最近のコメント
しおり
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。