「@id」のつけ忘れに注意

「@id」のつけ忘れに注意


こんばんは。
最近はplayframeworkで開発中。


「@id」のつけ忘れで少しはまった。


DB更新しようとすると、
「主キーとレコードの整合性がとれない」と怒られる。


原因を探ってみると、
modelの主キーに「@id」をつけ忘れていた。


今度から無駄にはまらないように注意しなければ (・ω・ ;)


ちなみに・・・
原因はDBの構成変わったときに修正をしていなかったからだった。

コードをきれいに書く。「問い合わせによる一時変数の置き換え」

「問い合わせによる一時変数の置き換え」

式をメソッドに抽出することで、
一時変数へのすべての参照を新たなメソッドに置き換える。
また、新たなメソッドが他のメソッドでも使えるようになる。


修正前。

double basePrice = _quantity * _itemPrice;

if ( basePrice > 1000 )
     return basePrice * 0.95;
else
     return basePrice * 0.98;

修正後。

if ( basePrice() > 1000 )
     return basePrice() * 0.95;
else
     return basePrice() * 0.98;

double basePrice() {
     return _quantity * _itemPrice;
}

コードをきれいに書く。「ネストを浅くする」

「ネストを浅くする」

ネストを浅くするとコードが読みやすくなる。


修正前。

for (int i = 0 ; i < 10; i++) {
     
     if (i % 2 == 0) {
          if (i == 2) {
               System.out.println(i);
          }
     }

}

修正後。

for (int i = 0 ; i < 10; i++) {
     
     if (i % 2 != 0) {
          continue;
     }
     if (i != 2) {
          continue;
      }

     System.out.println(i);

}


例が良くないので恩恵を感じにくいが、
ネストをなくしたことによってわかりやすくなった。

ループとif文を重ねて書くケースがあると思うが、
ネストの深さを意識して書きたいところである。

コードをきれいに書く。「一時変数のインライン化」

「一時変数のインライン化」

簡単な式によって一度だけ代入される一時変数があり、
それが他のリファクタリングの障害になっている場合、
その一時変数への参照をすべて式で置き換える。

修正前。

double basePrice = anOrder.basePrice();
return ( basePrice > 1000 );


修正後。

return ( anOrder.basePrice() > 1000 );

コードをきれいに書く。「メソッドのインライン化」

「メソッドのインライン化」


メソッドの本体が、名前をつけて呼ぶまでもなく明らかである場合、
呼び出し元にインライン化して、メソッドを除去する。


修正前。

int get Rating() {
     return ( moreThanFiveLateDeliveries() ) ? 2 : 1;
}
boolean moreTanFiveLateDeliveries() {
     return _numberOfLateDeliveries > 5;
}


修正後。

int get Rating() {
     return ( _numberOfLateDeliveries > 5 ) ? 2 : 1;
}

コードをきれいに書く。「メソッド抽出」

コードをきれいに書く方法をまとめることにした。


書籍を参考にするため、
サンプルコードのまま書くことが多いと思うが、
気にしないで書いていく。


「メソッド抽出」


修正前。

	void printReport(String title) {
		
                //ヘッダ
		System.out.println(title);
		System.out.println("名前");
		
		printDetail();
		
	}


タイトルと名前をひとまとめにすることによって、
わかりやすくできる。


修正後。

	void printReport() {
		
		printHeader(title);

		printDetail();
		
	}


コメントなしでもわかりやすい。
ただ、適切なメソッド名にしないと、
逆にわかりづらくなってしまう。

sysoでSystem.out.println()!? Eclipseを使いこなす。

あまりに感動したので、メモ。

 

Eclipseでsysoを入力後、

補完機能を使うとSystem.out.println()が出せる。

 

参照

watawata日記 Eclipseショートカットキーまとめ より

http://d.hatena.ne.jp/wyukawa/20090628/1246183795

 

ツールを使いこなすと開発スピードも上がる。

Eclipse使っている人は一度確認しておこう。

(そう言っている自分は確認じゃなくて勉強だがw)

 

ちなみに、

NetBeansではsoutで出せるらしい。

ブログ書こう。

はてなでブログ書こう。」

 

 

そう思ったので、これからはてなでブログを書こうと思う。

 

 

妥協は得意だからいつまで続くかわからないけど、

あんま縛り付けずに書いていく。

 

 

基本なんでも書こうと思うが、

主にプログラムのまとめやメモ的な感じにしようと考えている。

(もちろんアドバイスやツッコミは歓迎)

 

 

技術向上、文章力向上、人脈を広げるなど、

何かしらに繋がることを期待してる。