トップ «前の日記(2005-03-18) 最新 次の日記(2005-03-20)» 編集

日々の破片

著作一覧

2005-03-19

_ とっても便利なIllegalArgumentException

とは言うもののMSDNの.NET Frameworkの解説は良く書けているから、ふと思ったのだが(というのは、試す気がないから試してないってこと)、Windowsの正規のコードページ名で、かつ、そのWindowsがサポートしていない場合(というのは、記述されている例そのものだ)はNotSupportedExceptionで、それ以外のわけがわからない文字列はアンドキュメンテッドなIllegalArgumentExceptionということなのかも。

もしそうだと仮定すると、2種類の例外を見なければならず、かつ同じ処理をすることになるので相当いやだな。

頻出するイヤなパターン

try { // 行数を稼ぐためにJavaの記述
    foo();
} catch (BarException e) {
    // 長い処理
} catch (BazExcetpion e) {
    // 長い処理
} catch (GooException e) {
    // 長い処理
}

長い処理がイヤならそこをメソッドにすれば良いのだが、気分的に例外処理からメソッドを呼ぶのはあまり良くない気がする。

でも、それは妙だな。多分、C++での経験から、例外処理に来たときはスタックとかヒープとかがいかれている可能性があって関数呼び出しでもっととんでもないことになることがあったから、本能的に忌避反応を起こしているだけかも。どう考えてもJavaや.NETではそういうことは無さそうだから安心してメソッドとして切り出すべきなんだろう。

でも、本当に欲しいのは次のような記述が認められることだ。

try {
    foo();
} catch (BarException, BazException e) {
    // 通常は、#messageとか#stackTraceとかの基底クラスのメソッド
    // 呼び出しとなるので、型の違いは重要ではない。
} catch (GooException e) {
    // GooExceptionキャッチ時に固有の記述
}

まあ、Exceptionで取って中で判定するという方法もあるわけだが。

#追記

違うな。むちゃくちゃだ。上のようにやりたければ、

...
} catch (GooException e) {
    ,,,
} catch (Exception e) {
    ,,,
}

と書けばよいだけの話なのだが、多分、上の例でBarExceptionとBazExceptionに継承関係がないため、いやでもExceptionのようなくそみそ一緒なスーパークラスしか記述できない点だな。

いやんな例:リフレクション。ネットワークがらみ(IOException+アルファみたいなやつ)。JNDIみたいなの。

あるいは、単純に型名を書くのがうれしい病気に罹患しているだけかも。というか強い型付けがある言語でプログラムを書いていると、どうしても型名を指定したくなってくるのであるな。それは一概に悪いこととは言えず(というか言ってしまうと強い型付け言語って、単にコンパイラが最適化しやすいだけの仕組みですか、というようなとこに落ちてしまうかも)、あと、文化的宗教的な理由からか。

というわけで、継承関係を必ずしも無視するわけではない(上の例ではカンマで区切って並記した例外の共通のスーパークラスにeはなるはずだし、ならざるを得ない)、しかし複数の型を指定可能なcatch節の記述があるといいな、というような感じ。

_ WEB+DB PRESS特別総集編

僕も執筆させていただいた経緯から見本誌をいただきました。Vol1から24までのPDFがCDになって入ってくるという総集編ですね。しかし、こういうのを見るとつくづく良い時代になったものだな。1990年代にMSDNJJがこうだったらなぁ。

まあ、なんていうか時事ネタものが多いのは実用的な技術雑誌ならではで、その意味では今となってはそんなに役に立たない記事も多いとは思いますが(ワシのことかとおれカネ……とか言いたくなるよね)、やはりなんと言っても目玉は、既に出版社完売分(1〜11、13〜16)の中での、Vol.11の『RDBMS再入門』じゃないでしょうか(と言っても1〜9は読んでないからあくまでも僕の知ってる中では、と限定付きで)。もちろん、Vol.21の『データベース設計の基礎知識』もいいんですけど、こちらはまだ本誌を買えるわけだし。っていうか、1880円で1〜24がPDFで入っていてノートパソコンでいつでも読めるってのは大きいんだけど。

実際、僕は、Vol.11の『RDBMS再入門』読んで、羽生さんすげーと思ったわけだし。ここで、すげーと思ったのは記事を読んで目からうろこがぼろぼろという意味ではなくて、WEB+DB PRESSというズブの初心者対象ではなく、かといって遠く現場を離れてな人が対象でもない、まさに今、仕事をしている人を対象とした雑誌で、なんか人から言われたりそのへんから情報つまみ食いしてなんとなくわかったような気に1番なりやすい(というか陥りやすいというか)分野について、背景からあり方まできちんと説明されていたことでした。こういうのって、雑誌の記事として読みやすくしかも限られたページできっちりとまとめるってのはとても難しいわけで、しかもそれがアカデミックな方向でもなければ特定製品へのティップという形でもなく、実用的でいて、それでいてまさに『再入門』っていうタイトルの内容でまとめているってこと、それができているってことは、本当にこの分野のことを理解されているということでもあるわけだから、これは、すげー、脱帽だ、と思いました。本当、世の中にはいろいろすごい人がいっぱいいるな。

というわけでどうぞ。

あと、古びたとか書いてるけど、JSFやらStrutsのタグやらリファレンス系の記事って、PDFをPCに入れておくと結構嬉しいと思うから、その意味でもお買い得だと思います。

ちなみにVol2には、修吾さんとみたさんよしだむさんによるRubyでWebアプリケーション構築術とかもあったり。でも、LL系の本じゃないのでVol2という最初の頃の試行錯誤時代だけみたいだけど。

本日のツッコミ(全3件) [ツッコミを入れる]
_ Kazz (2005-03-19 21:03)

>WEB+DB PRESS特別総集編<br>絶対に買います。<br>私はこの雑誌を読みはじめてからさほど経っていないので是非とも昔の記事も読みたいです。

_ るいも (2005-03-19 21:32)

これはいいですね。他の雑誌も総集編をPDFで発刊というのやって欲しい。

_ arton (2005-03-20 00:10)

以前、Super ASCIIで一部の記事をCDで収録というのがあったけど、どちらかというと読み物系雑誌だったからそれほど有り難味は感じなかった(今ひとつ本誌より読みにくかったからで、エディトリアルデザインがよりファッショナブルだったからなのかなぁ、とか思わなくもないけど)けど、こっちは良い感じです。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え