ITEMS BY CATEGORY
aphorism(2)
biz(11) in english(6) indian food(16) kaneko(17) korea(21) life and love(23) misc(81) salsa(3) soc(71) tech(48) things(22) travel(16)
Topics With Recent Comments
Archives
February 2008 (1)
December 2007 (1) November 2007 (1) October 2007 (2) September 2007 (3) August 2007 (2) June 2007 (2) May 2006 (1) March 2006 (1) February 2006 (3) December 2005 (1) November 2005 (2) October 2005 (1) August 2005 (8) July 2005 (6) June 2005 (8) May 2005 (5) April 2005 (10) March 2005 (9) February 2005 (5) January 2005 (8) December 2004 (6) November 2004 (5) October 2004 (7) September 2004 (5) August 2004 (3) July 2004 (6) June 2004 (3) May 2004 (19) April 2004 (10) March 2004 (20) February 2004 (7) January 2004 (6) December 2003 (6) November 2003 (7) October 2003 (7) September 2003 (5) August 2003 (8) July 2003 (6) June 2003 (12) May 2003 (12) April 2003 (15) March 2003 (14) February 2003 (11) January 2003 (12) December 2002 (14) November 2002 (15) October 2002 (7)
Recent Entries
精神科医薬とサイエントロジー
Asiajin - アジアのITに関する英語ブログ Rozerem - 全く新しい睡眠薬 A380ようやく就航 Animate! 福岡空港の増設・移転 Techcrunch20行きます mockmail.rb Embassy Suites Rails初心者講習会
Search
A-vertisement
|
November 09, 2004Syntactic Salt Considered Harmfulさて政治的に正しくないことを書いたあとは、技術的にレベルの低いことでも書いてごまかしましょう。なんかダメなことばかり書いている気もしますけど、どうしてなんでしょうね。 無難な言語であるJavaですが、気持ちよいプログラミングを妨げる言語仕様がいくつかあります。ここでそれらを批判するとともに、Syntactic Saltは良くないと主張します。 1. キャスト構文を強制される Javaではオブジェクトのダウンキャストをするときに、必ずキャスト構文を書かなければなりません。しかし、ダウンキャストはそれほど避けるべき行為なのでしょうか。確かに、なるべくポリモーフィズムで解決するほうがエレガントですが、それはクラス設計の大幅な見直しを伴う作業であり、ダウンキャストするのが面倒であるとしても何かヒントが得られるとも思いません。 そもそもJavaの言語仕様(5.0以前)では、ListなどのCollectionを使うときには、必ずダウンキャストが必要になるわけです。それなのにいちいち、foo = (fooclass) list.get(1)などとしなくてはいけないため、血圧が上昇してしまいます。 この状況はgenericsで改善されるのが幸いです。しかし、わざわざsyntactic saltを使い、初心者プログラマを戸惑わせ、熟練プログラマをいらいらさせるメリットはどこにあるのでしょうか。 2. throwsを書かされる やりたいことは分かります。でも基本的には「どんな例外が投げられるのかが、一目で明らかになる」という言語仕様を実現するためにthrowsを強制すべきとは思いません。コンパイルオプションなどによっては、未処理例外の一覧が表示されるといった機能で良いはずです。 たしかにJDBCなどのCloseが必要な処理があるときに例外処理を忘れないというメリットはあるかもしれません。でも、そもそも希少リソースの解放問題と、例外処理は本質的には関係がないはずで.... エラーが発生することを考えれば、いずれにせよfinally節で処理されるべきであって.... throwsが強制されて一番恐ろしいことは、未熟練プログラマがなんでもかんでも例外をcatchして、その処理を無視してしまう可能性です。また、throwsを書くのが面倒くさいために例外のクラスをきちんと定義しなかったり、全てのメソッドにthrows Exceptionを書いてしまったりという恐れがあります。 熟練プログラマにとってはthrowsはイライラのもとでしかありません。百害あって一利なし。Syntactic Saltを廃絶しましょう。 3. byte型がunsignedじゃない これはいわずもがな。byte型を符号付きで使う場面を思いつきません。unsignedがないと、bytewise,bitwiseな演算ってものすごくやりにくいんですよね。なんでbyte型をunsignedにしなかったんだろう? Comments
1か月以上前のことにコメントさせていただきますが、1. と 2. は、同感ですが、3. については私は Java の肩を持ちます。C/C++ ではなまじ unsigned があるため、ちょっと凝ったことをやろうとすると、正負が非常にシビアでバグのもとになりました。Java は常に signed だ、というシンプルさがあって分かりやすいです。ビット操作もそんなにしにくいとは思ったことはないです。 Posted by: unibon on December 24, 2004 11:00 PMPost a comment
|