2005年01月06日

植物系素材をつかったPCのボディ材


富士通と東レが、パソコンのボディー材に使える植物系素材を共同開発し、富士通では今年の春モデルのノートPCに採用するということです。
この植物材を使えば、通常のプラスチックを使う場合より、PC1台あたりの石油使用量を1リットル分減らせるということですから、かなり地球環境にやさしいものになるのでしょうか。
いまや、パソコンはメーカー間の差異はほとんどないので、このようなことろが、商品を選ぶポイントになってゆくのかもしれませんね。
  

Posted by gushwell at 12:26Comments(0)TrackBack(0)news

2005年01月05日

あけましておめでとうございます


あけましておめでとうございます。
しばらく更新を怠っていましたが、また再開します。
やはり、更新が滞ると、「人気ブログランキング」の順位も下がりますね。
また、頑張らねば!
それと、メルマガ「C#プログラミングレッスン」もより多くの人に購読してもらえるよう、内容を濃いものにしたいと思っています。

とりあえず、新しい年になり、まだ、C#に関する話題も無いので、今日はこの辺で...  
Posted by gushwell at 22:52Comments(0)TrackBack(0)雑談

2004年12月26日

C#プログラミングレッスンNo020発行


メルマガ「C#プログラミングレッスン No.020」を発行しました。今回から、装いも新たにオブジェクト指向プログラミングの話題に移ります。まずは、クラスの説明から始めます。
発行開始から約4ヶ月経ち、読者数も370人を超えました。読者数をさらに増やせるよう頑張って発行していきたいと思います。  
Posted by gushwell at 17:40Comments(0)TrackBack(1)メルマガ

2004年12月22日

try-catch-finallyについて考える(5)


さて、前回の結論は、try-catch-finally という構文が用意されているますが、finally処理と例外処理は、対象としているものが異なるため、
   try {
// ...
} catch {
// ...
} finally {
// ...
}
と書ける場面は、それほど多くは無い、ということでした。
それと、 「finally処理に対応する初期処理は、try ブロックの中に入れてしまう」ルールは、usingを導入することで、不要なルールとなりました。
で、再度、ソースコードを見て見ると、あることに気が付きました。もう少し、例外の補足範囲を広げて見たら、同じ構造になりそうだ、ということです。修正したコードは次のとおり。
    try {
using ( SqlConnection conn = new SqlConnection(strconn) ) {
conn.Open();
// 処理
}
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
}

    try {
SqlCommand cmd = new SqlCommand(sqltext,conn);
using ( SqlDataReader dr = cmd.ExecuteReader() ) {
//
}
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
}

これなら、 見た目も同じ構造になり、try-catchに統一感を持たせられますの
で、コーディングする際も、悩む必要がなさそうです。
なお、集約例外ハンドラーをどう活用するか、継続不能な例外発生時にどう対
応するかなどの「例外処理の指針」をその前に決めておく必要があるのは言う
までもありません。

  
Posted by gushwell at 21:24Comments(0)TrackBack(1)例外処理

2004年12月20日

try-catch-finallyについて考える(4)


C#には、この問題を解決する方法として、using があるようです。試してみました。
まずは、Connection の Open, Close のコードでは、
    // sample1-3
using ( SqlConnection conn = new SqlConnection(strconn) ) {
try {
conn.Open();
// 処理
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
}
}

ExecuteRead のコードでは、
    // sample2-4
SqlCommand cmd = new SqlCommand(sqltext,conn);
using ( SqlDataReader dr = cmd.ExecuteReader() ) {
try {
//
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
}
}

と書くことができます。
しかし、しかし、前者は、例外を補足できたのですが、残念ながら、後者は、ExecuteReader内で例外が発生した場合に、例外を補足できません。まあ、文法上、当然と言えば当然ですね。

と、ここまで書いて、例外を補足しようとしている対象が異なっているのに気が付きました。前者は、using の () の中でnewしたインスタンスの処理に対する例外を補足しようとしているのに対し、後者は、using の外側で newした cmd に対する処理の例外を補足しようとしています。

似たような処理でも、本質が異なっているものを同じ処理でまかなおうとしていることに無理があるのです。
ですから、sample2-4は以下のように書く必要がでてきます。
    // sample2-5
SqlCommand cmd = new SqlCommand(sqltext,conn);
try {
using ( SqlDataReader dr = cmd.ExecuteReader() ) {
//
}
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
}


で、結局、結論らしい結論を出せないままです。
しいて言えば、usingを使えば、「try-catch-finally構文は、catchとfinally両方を同じtry文で書く場面はほとんどないのではないか」ということです。

(続く)

  
Posted by gushwell at 22:08Comments(0)TrackBack(0)例外処理

2004年12月17日

try-catch-finallyについて考える(3)


昨日の続き。

では、「finally処理に対応する初期処理は、try ブロックの中に入れてしまう」ルールを無視し、
SqlDataReader dr = cmd.ExecuteReader();
をtryの外に出してみましょう。
    // sample2-3
SqlCommand cmd = new SqlCommand(sqltext,conn);
SqlDataReader dr = cmd.ExecuteReader();
try {
//
} catch ( SqlException ex ) {
MessageBox.Show(ex.Message);
} finally {
dr.Close();
}

かなり、すっきりしました。でも、ExecuteReader 内での例外を補足できなくなってしまいました。これでは、いくらすっきりしたコードになっても意味がありません。

うーーん、やはり、try の中に入れるしかないのでしょうか。これは、インスタンスを new し、最後に、Dispose しないといけないクラスにも当てはまることになります。コンストラクタ内での例外を補足するには、やはり、new は、try の中で書く必要がありそうです。

ただ、nullで初期化したり、null かどうかを判断するコードを書くのは、どうも僕の趣味に合いません。(趣味でコードをいじくり回すな!としかられそうですが...)
(続く)  
Posted by gushwell at 21:27Comments(0)TrackBack(0)例外処理