質問: 1~ 255) ##【2】の利点/欠点 利点: ・エラーコードを返す必要がなくなるため、戻り値が有効利用できる。 欠点: ・関す呼び出し毎に、制限チェックが発生し、制限チェック忘れが発生する。 (汎用的に使うにのであればなお・・・)
回答: 一般的に安全性を考えて【1】を行う場合が多いようですが、プログラムを複雑化させてバグを増やす原因になります。 下記urlの「オブジェクト指向入門」に書かれている「契約による設計」の概念に沿えば、【2】の方がお勧めでしょうね。 # http://www.seshop.com/detail.asp?pid=7595 ただ上記書籍でも関数の入り口でのチェックは行っているので、正確には次の方法が良いと思います。 【3】関数内で制限値チェックで行い、制限値外であれば呼び出し元には戻らない。 具体的にはassertを使って制限値チェックを行うか、同様の自作関数(マクロ)を用意してデバッグに活用する。 # 自作関数ならデバッグ時にはこの関数内にブレークポイントを置けば確実に捕捉できスタックトレースなども取れる この方法は、【1】のインタフェースが複雑化する欠点と【2】の制限チェックを忘れる欠点の両方をカバーすることができます。 なお、呼び出し側の制限チェックを省くことはできません。制限を満たさない呼び出しはあってはいけないからです。