覚えておくべき変数の少ないソースコード

著者:杉浦

覚えておくべき変数の少ないソースコード

 この記事の話はリーダブルコード9章のあたりにより詳しく書いてあります。
 人間が一度に覚えて置ける項目の数の話は色々ありますが、それらの話のうちに大量の物事を詳細に覚えていられると述べるものは滅多にありません。覚えておくべき変数の少ないコードは人間が変数に格納されるであろう値を覚えながら読むことのできる良いコードです。そのようなコードは保守性が高く、バグが起こりにくいです。
 覚えておくべき変数を少なくするためには、そもそも変数を増やさないことが最良です。もしあるソースコード中に出現する変数が3つのみであれば、そのソースコードがどれだけ長大であっても、記憶しておくべき変数は3つより多くなりません。よく消える変数は一時的な値の置き場となっている変数、アルゴリズムの制御を担っている変数です。どちらもとりあえず書いて動かしてみる、という手法を行ったコードによく現れ、見直しによるコードの整理によって除去されます。次のコードの場合、bは用いず、aにまとめられるというになります。

var a = 'hogehoge';
/* aを用いるがaの値を変更しない処理 */
var b = 'hogehoge';
/* bを用いた処理 */

 変数が参照される範囲を小さくするという次善策もあります。変数には参照できる範囲、スコープが定められています。このスコープを少ない行数の範囲に留めることで、一度に覚えておくべき変数の数が少ないコードを実現します。言語にもよりますがスコープはおおよそ変数の宣言場所から、宣言を行った塊であるモジュール、クラス、関数などが終わるまでと定められます。宣言時の塊の最小単位の終わりがスコープの終わりとなることを基本とする言語が多いです。このスコープが小さい変数ばかりであれば、覚えておくべき変数が常に少ないコードの実現に近づきます。
 小さいスコープを実現するためには少なくとも二つの方針があります。
 一つは変数の宣言を変数を使用する直前にすることです。ある変数が使用されるはるか前に宣言されていた場合、使われない変数に頭を取られたり、使用された場所でこれ以前この変数はどのような操作をされたのか考えることになったりします。次のコードは塊の最初に変数a,b,cを宣言しており、全ての変数を最後まで記憶する必要があります。

var a,b,c;
/* aのみを用いた処理 */
/* bのみを用いた処理 */
/* cのみを用いた処理 */

一方で使用直前に宣言した場合、次の様になります。

var a;
/* aのみを用いた処理 */
var b;
/* bのみを用いた処理 */
var c;
/* cのみを用いた処理 */

このコードは変数b,cを記憶する時間が全ての変数を最初に宣言するコードより短くなっています。
 もう一つは小さい塊を多数用意し、処理を細分化し、各々その中で変数を宣言することです。この小さい塊を多数用意する手法には問題の細分化による単純化、容易な単体テスト、抽出された汎用処理の再利用、などといった利点もあります。関数やメソッドの様な多用される塊は余裕をもって一画面に収まる様にされます。一画面に収まる程度ならば処理は複雑になりにくく、一度に使用される変数も少ないです。この手法においてソースコード全体で使用される変数の数は十分多いですが、コードを読む際には塊単位で読めばよく、一度に覚えておくべき変数は少なくなりやすいです。次のコードは関数hoge_aを読む時は変数aのみを記憶すればよく、b、cも同様です。

function hoge_a(){
	var a;
	/* aのみを用いた処理 */
}
function hoge_b(){
	var b;
	/* bのみを用いた処理 */
}
function hoge_c(){
	var c;
	/* cのみを用いた処理 */
}
  • この記事いいね! (0)

著者について

杉浦 administrator