プログラムを学び始めると、様々な機能について使い方を知ったはいいもののどの機能を使った書き方が正しいのかわからなくなる段階があります。
そこで重要なのがリファクタリングです。
リファクタリングは、既存のプログラムを改良するという行為を指します。簡単に言うとプログラムをきれいに書き直すということです。
リファクタリングを行うことで、プログラムの実行速度を上げたり、機能追加をしやすくします。
例えば、既存のプログラムをオブジェクト指向に書き直す行為もリファクタリングです。
他にも、バグが起きにくいように変数をカプセル化したり、間違った値が入った際にエラーを出力するようにするのもリファクタリングです。
ここでは、良いプログラムにするためのリファクタリングについて紹介します。
制限をかけた専用クラス作成する
一般的な教科書には、変数はint型やfloat型のような基本的な型を使用するように書かれています。
このような使い方は間違ってはいませんが、脆弱性があります。
例えば個数を入れたい変数があったとしてint型で定義するとします。この場合、マイナスの値も入りうるため、入力によってはバグの原因となってしまいます。
他にも予定していた値以上の数値が入力されるとバグの原因になります。
そのため、変数専用の型を作ることで安全性の高いプログラムを書くことが出来ます。
例えば、下記のようなプログラムです。ここではブロック数0~256までを入力する変数のためのクラスを作成しています。
class Block{
static int MIN = 1;
static int MAX = 512;
int value;
Block(int value){
if(value < MIN) cout << "Error. block is too small."
if(value < MAX) cout << "Error. block is too Large."
this.value = value;
}
}
最大最小を超える値を入れるとエラーを出力するようになっています。
上記では画面出力にてエラーを出力していますが、例外処理によってthrowしても大丈夫です。
このような書き方をすることで、予想外の入力をしてしまった場合にきちんと動作が停止してくれるので、謎のバグを探し続けることを避けられます。
特にint型は間違った値を入れた際に原因がわからなくなりがちです。例えば金額と数量を間違えたりすることを避けるためにも、専用の型を持っておくことは安全性をぐっと高めることができるようになります。
また、関数に値を渡す際も型と変数の名前が合致していれば、間違って渡しにくくなります。
条件分岐を減らす
場合分けをわかりやすくすることもリファクタリングにおいて重要な要素です。
多くのプログラムで条件分岐は多数発生しますが、書き方次第で非常にネストの深い書き方になってしまいます。
ここでは条件分岐をわかりやすく書く方法についていくつか紹介します。
分岐ロジック
分岐ロジックを書き直すことで、プログラムの構造をわかりやすくすることが出来ます。
//bad
if(grid_point = 127){
}
//good
if(isBoundary(grid_point)){
}
元の書き方だとロジックを理解した上でif文内に入るかどうかを判断する必要がありますが、goodの書き方だと対象が境界かどうかを判断していることが明らかです。
特に複雑なロジックの場合は、メソッドを使用することで負担の少ないプログラムにすることが出来ます。
elseを使わない
教科書的な書き方でif文を書くと、if else文と条件分岐が増えがちです。
まずはメソッド内に条件分岐を移動させることで、早期returnを使えるようにします。これによって、if文のネストが一気にスッキリします。
また、変数用のメソッドを返すことで安全性の高いメソッドを作ることができるようになります。
例えば下記のようにメソッド内に条件文を入れると、else文を減らすことが出来ます。
type Fluidtype(){
if(isShearThinning()) return shearThinning();
if(isShearThickning()) return shearThickning();
return Nuwtonian();
}
標準的な条件が一番下になるのを基本にしておくこともポイントです。
プログラム内で標準条件をどこに置くかも統一しておくことで、プログラムが読みやすくなります。
おわりに
今回はリファクタリングについて紹介しました。
プログラムを読みやすくすることで、跡から編集する際も便利になります。
プログラムを定期的に改良する癖をつけておくことで、バグを見つけやすくなり、プログラムを書く速度も上がります。
上達のために、プログラムの見直しにもぜひ時間を割くようにしましょう。