2008-01-01から1年間の記事一覧

配列オブジェクトの動的削除

シーケンシャルオブジェクトから指定の値を削除する際のバグ例を書いてみます。 プログラミング慣れした人は簡単に気が付くと思いますが意外に多いバグだと思います。下記は配列の中から"a2"という値をすべて削除するjavascriptの例です。 var a = new Array…

同nameにおける配列オブジェクト

ここ最近、少し鎮火したので久しぶりに書きます。ある程度のWeb開発経験者なら必ず経験したことがあるJavaScriptバグだと思いますが 今回、また目にする機会があったので記述します。 <html> <head> <script language="JavaScript"> <!-- function allCheck(a) { for (i=0; i<a.length; i++) { a[i].che</script></head></html>…

ensure句におけるreturnの問題

前回エントリーした「finally句におけるreturnの問題」についてrubyの場合はどうなるのか検証してみました。javaにおけるtry-catch-finallyは、rubyでのbegin-rescure-ensureと同じだと思っています。 def method puts "3: method start" begin raise Except…

finally句におけるreturnの問題

finally句でreturnしたコードを見かけることがあります。eclipseで開発している場合、finally句でreturnを記述すると警告が出るのですが何が問題なのかあまり知られていないようです。 try-finallyにおける様々の位置のreturnの検証 try-finallyでreturnする…

中括弧省略の弊害

可読性を落とすと思われるif文の中括弧省略についてです。 Javaにおいてif文の中括弧を省略した場合、その次の1文だけが対象となります。 if ( 式 ) a = 1; // 式が真の場合実行 b = 2; //必ず実行 上記程度であれば第3者でも判断できるのですが、次の場合…

デフォルトコンストラクタ自動生成の謎

半年位前に経験したバグなのですが、突然あるクラスのデフォルトコンストラクタが見つかりませんという内容のExceptionが発生しました。 原因は他プロジェクトのjarに梱包された型をデフォルトコンストラクタでインスタンス化していたのですが、このjar側の…

SAXパーサ作成時のバグ

以前作成したJavaのSAX方式(ストリーム読込)のXMLパーサのトラブルメモ。 長いXMLを読むだけであればメモリパフォーマンスを考慮してSAXパーサを使用しますが、ちょっと意識していないとバグ埋め込んでしまうかも知れません。 サンプルコード public class P…

引数を省略するメソッドの考察

ruby、C++、VB、C#には引数のデフォルト値を設定して(Optional等)、 引数を省略できる言語仕様になっています。何故Javaには導入されていないんだろうか? ふと疑問が湧きました。 実際には以下のようにオーバーロードで対応していると思います。 method(int…

浮動小数の誤差

2進計算による浮動小数の誤差について意識なく平気で演算したり比較するケースをよく見かけます。 大抵はあまり問題は発生しないのですが、特殊なケースで予想と反する結果となります。色々と試してみました。 Ruby(irb)の場合 irb(main):001:0> 1-0.9 == 1/…

parseIntの罠

最近、久しぶりにソース記述ミスによるバグではまったのでメモ。 文字列型をint型に変換するJavaでもお馴染みメソッドparseInt。 javascriptにてn月の翌月を算出するプログラムの中でparseIntを使用して発生した問題。 var i = (parseInt("200809".substr(4)…

3日坊主

メンドイからとblogは始めていなかったのですが、ここ最近発信したい衝動が猛烈に強くなりました。 3日坊主でもいいので、自分が経験したことをとりあえず吐き出します。