更新日:2009-04-08
目的
既存ソースのリファクタリングを行うことで、見栄えのよいソースにし、メンテナンス性を向上させる。
また、コーディング規約のような注意事項を設けることで複数の方が開発する場合でもコーディングの
ずれが少なくなる。新規で開発する場合も以下の事を踏まえて作成する規約とする
注意事項
1) リファクタリングと高速化の因果関係はありません。ただ、遅延している箇所が特定しやすくなります。
2) 機能追加とリファクタリングは同時に行うことを禁止します。リファクタリング期間を設けて実施すべきである。
3) なるべく、リファクタリングツール等を利用し、機械的にリファクタリングを行う。
4)リファクタリング時はコメントアウト/解除を行うことが多いのでキー操作で行う。
コメントアウト Ctrl + E + C
コメント解除 Ctrl + E + U
リファクタリングツール(無償)
コード変換ツール( VB ⇔ C# )
DBアクセス関連の速度UP
1)SQL文を格納する記述がある場合 String型より、StringBuilder型に格納する
2)WHERE句の記述順序 絞り込める量が多い、条件の厳しいものから先に行う ⇒ 高速UP
3)HAVING句は極力利用しない
4)単純なSQL文でもテーブル別名を付加する
×SELECT id, name FROM user WHERE active=1
○SELECT u.id, u.name FROM user u WHERE u.active=1
5)1つのテーブルにデータが大量になる場合はテーブルを分ける
6)Fromはレコード数が多い順に並べる
×FROM jusho j, user u
○FROM user u, jusho j
7)BETWEEN句は使えたら使う
8)COUNT(*)よりCOUNT(id)を使う
9)なるべく*は使わない。行を指定した方が速い
×SELECT * FROM SomeTable;
○SELECT id FROM SomeTable;
記述の工夫での高速UP
1) Withブロックを使う
旧)
Button1.Text = "Withですか?"
Button1.BackColor = Color.LightBlue
Button1.TextAlign = ContentAlignment.MiddleRight
新)
With Button1
.Text = "Withですか?"
.BackColor = Color.LightBlue
.TextAlign = ContentAlignment.MiddleRight
End With
命名規則
1) 変数名にプレフィックスをつける
| 型 |
変換 |
| int |
i |
| string |
s |
| bool |
b |
| double |
d |
| list |
lst |
| Combo |
cmb |
| Form |
frm |
| Label |
lbl |
| textBox |
txt |
| CheckBox |
chk |
| メンバ |
m_ |
2) 変数名のつけ方
| 省略前 |
省略後 |
意味 |
| message |
msg |
メッセージ |
| directory |
dir |
ディレクトリ |
| error |
err |
エラー |
| delete |
del |
削除 |
| count |
cnt |
カウント |
| format |
fmt |
フォーマット |
| flag |
flg |
フラグ |
アクセシビリティを意識する
| Public |
同じプロジェクト、他のプロジェクトからのアクセス可能 |
| Proteted |
同じクラス、派生クラスからのアクセスのみ可能 |
| Friend |
同じプロジェクトからのアクセスのみ可能 |
| Private |
同じクラスからのみアクセス可能 |
ArrayならHashtableを使用する
インデックス指定だけならArrayかArrayListを使うのが最適だが
キーと値を関連付けたいならHashtableが便利だ。また高速でもある。
速度比較)
16個のアイテムから全アイテムを検索するを1万回ループ
Ayyay:94ms Hashtable:172ms
256個のアイテムから全アイテムを検索すると1万回ループ
Ayyay:10469ms Hashtable:2906ms
HashtableならDictionaryを使用する
.NET Framework 2.0ではDictionaryジェネリック・クラス
(System.Collections.Generic名前空間)
が追加され、より効率的かつ安全にハッシュテーブルを扱えるようになっている
1000000個のアイテム取得
Hashtable:15ms
Dicitionary:3ms
全角/半角の変換はStrconvを使用する
Replace関数は文字に依存してしまうのでStrConvが便利
× sText = sText.Replace("'","’")
○ sText = StrConv(sText,VbStrConv.Wide)
Debug.Printは残さない
速度に影響するので残さない。
変数の初期化と宣言は同時に行う
×Dim sSayHello As String
sSayHello = "Hello World"
○Dim sSayHello As String = "Hello World"
判定の書き方
1)空文字判定
IF text Is Stringempty Then
…
End IF
2)Nothing判定
IF IsNothing(text) = True Then
…
End IF
3)空文字でない判定
IF text IsNot StringEmpty
…
End IF
データの存在確認メソッドはBoolean型を使用する
×戻り値をString型で「データ有」などの文字列にしない
○戻り値はTrue/Falseを利用する
長いメソッドや記述は改行する
Private Function test(ByVal s As String _
ByVal m As String)
String同士の比較はEquals()メソッドを使用する
×If sText = "?" Then
○If sText.equals("?") Then
最終更新:2009年04月08日 16:59