反省点 |
作成日:1999-12-05 最終更新日: |
反省点をあげる。
まず、var 宣言をしなかったために、変数の名前空間が確保できず、 大変なことになってしまった。 var 宣言をしなくても変数が使えるというのは確かにその通りなのですが、var宣言は その関数のブロック内で有効になる、という意味が込められていることをつい最近知った。 これは、継子立てのところで学んだ経験である。
それから、+演算子が文字列の連結になってしまう場面が予測できなかったこと。 予測できないと思いがけないエラーになる。 たとえば、k = i + j; とある文があり、i = 1, j = 2 ならば k = 3 を期待する。 ところがこの計算を行ってみたら k = 12 となってしまった。この理由がわからず、悩んだ。 12 としても数字としての意味があるのが落とし穴です。 種を明かせば、i も j も文字列であったために、+ 演算子は文字列連結として働いてしまった、というのが答だ。 最近は、怪しいところはみなeval()をつけることにしている。
正規表現は面白い。使い方の一つを示す。 JavaScript は機種に依存しない書き方ができるはずなのだが、実際には機種依存性がある。 端的には、改行コードの違いとなって現れる。
詳しくは、古籏さんらの「大全」の本に譲りるが、UNIXとMacとDOSとすべてで、改行コードが異なる。 これらを吸収すべく、正規表現を使った。なかなか便利だ。 ソースは前の「回帰分析」の章に載せているので御覧いただければ幸いだ。 "\r\n"から"\r"のみか"\n"のみかをマッチングメソッドによって判定する。 マッチングした改行コードは保存しておき、出力として複数行が必要ならば、 joinメソッドの引数に保存した改行コードを指定すればすむ。
もう一つは、一行にある、空白またはタブで区切られた項目の分割だ。 /[ \t]+/というコードを覚えただけで、世界が明るくなった。 また、正規表現は、特定のメソッドしか使えない、ということではないこともわかった。 実際に私は match メソッドと replace メソッドにしか使えないと思っていたが、 split メソッドにもこの正規表現が使えることがわかった。うれしい気分だ。
最後の反省点は、まったくオブジェクト化がなされていないということだ。C++でいうクラスを作る作業は、 C++よりずっと簡単にできる。それなのに、必要な分析と実装をさぼっているのが現実である。
まりんきょ学問所 > JavaScript 手習い > 反省点