関数 keyinput_sub は結構長く、かつgoto文も含んだ、汚い関数の代表選手です。では、これを きれいに整形していきましょう。
■goto文をなくす■長い関数は、ふつういくつかのまとまった処理部分に分かれています。この関数の場合に難しい のは、長いだけではなく、goto文が「流れ」を乱していることです。 まず、変なgoto文とラベルを無くします。 ラベル get は使われていないので、無条件に取り除けます。(こんなもの、絶対に残しておく なよな!) ラベル again は、関数の最初から再実行しています。したがって、for文で関数全体をくくると 良いでしょう。このfor文の繰り返し制御変数を使って制御してみます。forの初期化部分と、goto again の部分でこの制御変数に0以外をセットしなければいけません。 ラベル nextは、より下位のループです。ここはdo−while文で書き換えてみましょう。
■どこで分ける■長い関数は、内部がいくつかの処理に分かれているものです。この関数の中ですぐ目につくのは、 173行からのswitch文です。この部分が約 70行あるので、これを別関数にします。特殊キーに関連 する処理をしているようなので、関数名をspecial_keycodeにします。実際には、その前後の一部 も含めています。 残り部分は246行からのif文で、特殊キー以外の処理をしています。これも関数にしてしまいま しょう。普通のキーの処理だから、関数名をnormal_keycodeにします。関数名はできるだけその実 態を表すようにしましょう。
■分ける■分ける時には、いろいろな問題がでてきます。
実際の作業手順は、エディタで、次のようにすると良いでしょう。
プログラムを順次改良していく作業は、エディタでどのように変更し、コンパイルし、またエディ トする経過そのものを、私の隣で観察するとか、ビデオ取りして見てもらうのが最善なのですが、 これはなかなか難しい。
|
オープンソース |