WEB+DB PRESS Vol.51 特集2「“巧い”メソッド設計」連動企画

第3回 構造化技法でプログラムの品質を上げる 可読性の高いメソッドを書くための実践テクニック

この記事を読むのに必要な時間:およそ 3 分

短いメソッドを書こう

みなさんは,小説のような長いメソッドを見たことがあるでしょうか。いつ終わるかわからないif-else文。エディタの画面をスクロールしているはずなのに「スクロールしてないんじゃないか?」という錯覚に陥るくらい同じ光景が延々と続くソースコード。

こういったプログラムを保守するのはとてもたいへんです。そして,保守性が低いということは,すなわち「品質が低い」ということにほかなりません。

本稿では,どうすれば保守性が高い(品質が高い)プログラムを書くことができるか,筆者の経験に基づく独断と偏見から記述していきたいと思います。

変数のスコープを最小限に抑える

変数のスコープ(寿命・可視性)を最小限に抑えると,プログラムの解析性を高めることができます。

ローカル変数は,変数のスコープとしては最も狭い部類に入りますが,メソッドが長いときに問題になるのがローカル変数です。ローカル変数が遥か彼方で大量に宣言されていることを想像してみてください。今読んでいるソースコードの該当個所に関係する変数がいったいどういう状態なのかをすべて把握するのは非常に困難です。こうなるとローカル変数もグローバル変数となんら変わりがなく,グローバル変数のデメリットがローカル変数にもそのまま当てはまることになります。

影響のある変数の数を最小限に抑えるために「変数のスコープ=メソッドの粒度」となるように,一つ一つのメソッドは小さく実装し,小さなメソッドの集まりとして大きな機能を構築しましょう。

変数はfinal宣言しよう

変数があちこちでコロコロ書き換えられる可能性を排除すると,プログラムの解析性が高くなります。

本質的には「変数」にしなければならないものは「繰り返し」処理のループカウンタやアキュムレータ注1以外にはありません注2)。もしfinalにできない変数があるとしたら,その変数をfinal宣言できるようにメソッドの構造を分割しましょう。

注1)
CPUのレジスタの一種で,論理演算や四則演算の結果を一時的に保持する。
注2)
構造化プログラミング』/サイエンス社/ISBN:4-7819-0276-6

処理の構造とメソッドの構造を一致させよう

プログラムの「理解しやすさ」

  1. 論理的な処理の構造
  2. 物理的なメソッドの構造

の2つが一致していることによってもたらされます。「論理的な処理の構造」とは,ある仕様が与えられたとき,その仕様を実現するためには「こういった処理が必要だろう」という推論をトップダウンで進めたときに得られるロジックツリーのことです。 このような論理的な処理の構造を図示する技法として,少し古い技法になりますが「構造化チャート」というダイアグラムが利用できます。

図1 構造化チャートの記述方法

図1 構造化チャートの記述方法

コラム 構造化チャートの実例

構造化チャートは,作成するプログラムを事前に設計するときだけでなく,既存プログラムを理解するためにも利用できます。既存プログラムの構造化チャートを作ることで,論理的な欠陥が浮き彫りになるケースもけっこうあります。

図Aはとあるプロジェクトの保守で作成した構造化チャートです。このときはトランザクション開始・終了のタイミングに問題があることが発覚しました。また,その修正方法についても,このチャートを用いて議論しました。

図A あるプログラムの構造化チャート

図A あるプログラムの構造化チャート

一方,「物理的なメソッドの構造」とは,まさにメソッドの「呼び出し階層」のことです。実際に実装したメソッドの呼び出し階層はEclipseで簡単に確認できます図2)。

図2 Eclipseでの呼び出し階層の表示

図2 Eclipseでの呼び出し階層の表示

「論理的な処理の構造」「物理的なメソッドの構造」が一致しているということは,「考えていること」「プログラムのテキスト構造」がシンクロしている状態といえます。このようなプログラムが理解しやすいのは間違いありません。

メソッドの抽象化レベルを合わせる

プログラムと文書作成にはアナロジー(類比)があります。文書は通常「章/節/項」に構造化して記述します図3)。章は節の集合,節は項の集合から構成されます注3)。

図3 文章の構成

図3 文章の構成

プログラムも同様に「章/節/項」に構造化して記述しましょう。

同じ階層にあるものは同じレベルの抽象度に合わせるとプログラムは理解しやすくなります注4)。

注3)
『考える技術・書く技術―問題解決力を伸ばすピラミッド原則』/Barbara Minto 著,山崎 康司 訳,グロービスマネジメントインスティテュート 監修/ISBN4-4784-9027-9/ダイヤモンド社
注4)
『実装パターン』/Kent Beck 著,長瀬 嘉秀・永田 渉 監訳,(株)テクノロジックアート 訳/ISBN4-8947-1287-3/ピアソンエデュケーション

バックナンバー

WEB+DB PRESS Vol.51 特集2「“巧い”メソッド設計」連動企画

コメント

コメントの記入