10月24日(火)1、2コマ目

今日、やったこと

[評価用課題]オークションサイト(.Net版)

今日のホワイトボード

採点して気づいた点を書きました。

1.無駄な変数

2回以上アクセスしないデータのために変数を作らない

以下の変数flgは代入後、1回しか使っていない。


修正版は以下。


2.冗長な処理

同じような処理があちこちにある。


修正版は以下。


3.OracleDataReaderからデータを取り出す

これはまずい。実行時エラーになる可能性がある。

SQL実行直後のOracleDataReaderは検索結果の0行目を参照している。

参照先を1行目に移動するにはRead()を実行する必要がある。

検索結果が0行の場合、Read()はfalseを返すだけでエラーにはならない。


修正版は以下。


検索結果の行数とOracleDataReaderのRead()

〇検索結果が常に0行または1行だけ

1回だけ移動すればいいので、

 if(reader.Read())

で1回だけ移動すればOK。


〇検索結果が複数行の可能性がある場合

検索結果の1行目から最終行まで移動する必要があるので、

 while(reader.Read())

で検索結果の最初から最後まで移動すること。

この場合、検索結果は複数行になるので、結果の格納先はリストにするべき。


〇検索結果は常に1行1列

SQL実行にExecuteQuery()ではなく、ExecuteScalar()を使うほうが便利。

ExecuteScalar()は検索結果を返すのでDataReaderを使って検索結果を取り出す必要がない。ただし、戻り値はobject型。キャストする必要がある。また、検索結果が無い場合はnullを返す。


〇bool型はtrueかfalseだけ

bool型を返すメソッドの戻り値で条件分岐をする場合、以下のelse if()は不要。

ifの条件式がfalseの場合は自動的にelseブロックにくる。



〇変数名、メソッド名の接頭語について

変数名やメソッド名に下表の接頭語をつけるケースがある。

名前にあった役割どおりに実装すること。

接頭語役割
is+形容詞isEmpty() 形容詞か否かをチェック。
isEmpty()なら空白(empty)か否かをチェック。空白(empty)ならtrueを返す。空白以外ならfalseを返す。
has+名詞hasUpperCase() 名詞を含むか否かチェック。
hasUpperCase()なら大文字(UpperCase)を含むか否かをチェック。大文字(UpperCase)を含むならtrueを返す。大文字を含まないならfalseを返す。
has+過去分詞hasSaved() 過去分詞を実行済みかチェック。
hasSaved()なら保存済み(saved)か否かをチェック。保存済み(saved)ならtrueを返す。保存していないならfalseを返す。
can+動詞canRemove() 動詞が実行可能かチェック。
canRemove()なら削除(remove)が可能か否かをチェック。削除(remove)実行可能ならtrueを返す。削除ができないないならfalseを返す。

特に論理を逆転させないこと。

canBid()なら入札(Bid)可能ならtrueを返す。


以上、採点して気づいた点です。

とくに「1.無駄な変数」はかなり痛い。 また「3.OracleDataReaderからデータを取り出す」は実行時エラーになる可能性があるので、危険。

このブログの人気の投稿

12月22日(金)1、2コマ目

12月21日(木)1、2コマ目