ソースコードレビューでの指摘事項

コーディングの際に意識すること

 

・メソッドの引数、戻り値を見ただけで何をするメソッドか分かるように書くこと。

もちろんメソッド名でも処理内容が推察できること。

⇒引数にメソッド内の条件判定に必要な情報を渡したら、その条件ごとに処理したオブジェクトが返ってくるような設計にする。

 

・if文の判定条件には、ほかの状態に依存するような変数は使わないこと。

例:

// 処理A

if ("0".equals(xxStatus)) {

    xx = false;

} else if ("1".equals(xxStatus)) {

    xx = false;

} else if ("2".equals(xxStatus)) {

    xx = true;

} else {

    xx = false;

}

// 処理B    ←    ここではxxStatusがtrueの場合だけ更新処理を行う仕様なのに前段の判定処理に結果が依存しているからNG

if (xx = ture) {

    // 更新処理を行う

} else {

    // 更新処理を行わない

}

 

・IsExistメソッドでの一撃returnはよろしくない場合がある

⇒戻り値が結果として同じになるからといって、同レベルでない判定を一行で書くべきではない。

例:

boolean IsExist (String xx) {

    // return "0".equals(xxStatus) || "0".equals(xxStatus) && "1".equals(xxFlg)    ←    NG

    if (return "0".equals(xxStatus) || "0".equals(xxStatus)) {

        if ("1".equals(xxFlg)) {

        return ture;

        }

    } else {

        return false;

    } 

}

 

 

// TODO 随時追加する。

 

 

データストア query.addFilterは非推奨 【google app engine for java】

クエリを用いて条件検索する方法

 

// インポート文

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;

 

private static DatastoreService datastoreService = DatastoreServiceFactory
.getDatastoreService();

 

Query query = new Query("テーブル名");

query.setFilter(FilterOperator.EQUAL.of("検索するカラム名","検索したい文字列"));

PreparedQuery pQuery = datastoreService.prepare(query);

for(Entity entity: pQuery.asIterable()){
    xx = entity.getProperty("取得したいカラム名").toString();

}

 

・実行SQL

SELECT 取得したいカラム名 FROM テーブル名 WHERE 検索するカラム名 = "検索したい文字列";

 

WEBアプリ DB移行の際に発生した問題 (CHAR編)

「事象」

DB2:後方トリム(半角スペースを除去)して検索処理を行う。
oracle後方トリムせず厳密に、検索処理を行う。

 

「例」CHAR(5)

【カラム】XX
【 値 】abc__

DB2の場合
selest * from テーブル名 where = "abc";
⇒ヒットする。
selest * from テーブル名 where = "abc__";
⇒ヒットする。

oracleの場合
selest * from テーブル名 where = "abc";
⇒ヒットしない。
selest * from テーブル名 where = "abc__";
⇒ヒットする。

※ "_"は半角スペース


「環境情報、DB情報」

・java7

 ・DriverManager.getConnection

・jdk1.7

・tomcat7

struts

 ・ibatisなし

・ojdbc14

・oracle11g

 

Oracle SQL Developerで検索したら後方トリムして検索してくれるのに、

AP経由だと取得できないのはなぜだろう。

ojdbcのバージョンがいけないのか? ibatis使ったら上手くいった。なぞ。

【Excel】 読み取れない内容が含まれています。このブックの内容を回復しますか?

▼こんなエラーが出て、図形がすべて消えたときの復旧方法▼

 

"読み取れない内容が含まれています。このブックの内容を回復しますか?ブックの発行元が信頼できる場合は[はい]をクリックして下さい。"

f:id:hatehate_masaki:20160406224427j:plain

f:id:hatehate_masaki:20160406224433j:plain

 

OpenOfficeで開く(インストール済みであること)

②xlsx形式で別名保存

③別名保存したファイルをエクセルで開く

 

図形の位置がずれていたり、文字フォントが変わってしまっていますが

復旧できました!

 

【Excel】 やらかしました。。[作業グループ編]

今日、仕事でやらかしました。

あるシートを修正していたのですが、右隣シートの同じセルも勝手に修正されているではありませんか。元の内容が上書きされているではありませんか。

(※ctr押しながらシートの複数選択など決してしていません。)

しかも ctr + s でこまめに保存しているから戻れもしない。

 

このミスの原因は、[ shift + ctr + PgDn ]のショートカットキーと判明。

入力したセルは、飛び飛びで登場箇所が不規則でしたので[ shift + ctr + ↓ ]で確認していってました。

その際に誤って[ shift + ctr + PgDn ]を押し、”作業グループ”を発動させてしまったのでしょう。

いやはや恐ろしい。

f:id:hatehate_masaki:20160321004229p:plain

 

【Excel】 シートがバラバラ! そんなときは

マクロです。

目次シートのシート名一覧の順番に並べかえ。

f:id:hatehate_masaki:20160229225050j:plain

Sub sort()

Dim sortedSheetName As String
Dim temp As String
Dim Range As String

' 1. 目次のシート順をセル(B2:B6)から取得
For i = 0 To 4

'2. 文字列sortedSheetNameに格納
Range = "B" & (i + 2)
temp = Sheets("目次").Range(Range).Value
If (i < 4) Then
temp = temp + ","
End If

sortedSheetName = sortedSheetName + temp
Next

' 3. 文字列:sortedSheetNameから配列:sheetNameに変換
Dim sheetName As Variant
sheetName = Split(sortedSheetName, ",")

' 4. 0から4以下の間でループ
For i = 0 To UBound(sheetName) - LBound(sheetName)

' 5. 取得したシートをコピーして、最後のシートの後ろに追加
Worksheets(sheetName(i)).Copy After:=Worksheets(Worksheets.Count)

' 6. 配列:sheetNameのi番目のシートを削除する(コピーしておいているので大丈夫)
Application.DisplayAlerts = False
Worksheets(sheetName(i)).Delete
Application.DisplayAlerts = True

' 7. 新しく追加したシートのシート名を変更
Worksheets(Worksheets.Count).Name = sheetName(i)
Next

End Sub

 

※取り急ぎ書いたメモ程度。後日、時間があるときにきれいにします。

オーバーライド

わかりやすい説明があったのでメモ。

 

・オーバーライド

メソッド引数リストがまったく同じであること、

戻り値は同じかもしくはその戻り値の型がサブクラスであればオーバーライドとみなされる。また、アクセス修飾子は、スーパークラスと同じものか、それよりも公開範囲が広いものを使用しなくてはならない。」

 

参考:オラクル認定資格書 Java プログラマ Silver SE 7