(1)コード保守ソフトウェア開発で最も時間のかかる作業は、デバッグであると言われています。よって、バグをいかに出にくくするかで開発効率を改善することができると考えられます。ある所に好んで生息します。副作用のある処理はその実行する順序が重要となり、処理を記述する順番をきちんと決める必要があります。そのため、ロジックの組み間違いからバグが発生する可能性があります。予期せぬ場所で予期せぬ値の変更が起こり、それがバグの原因になることもあります。事実、ロジックの組み違いを減らすために、ソフトウェアの設計をし、個々のコンポーネントの機能を明確、簡潔にし、予期せぬ値の変更を減らすためにカプセル化、といった手法が取り入れられ、今日でも使われています。(これは、極度なカプセル化ともいえるかもしれません。関する記事はあまり見かけません。副作用の分離とそれによって得られる利点について説明していきます。デバイスとの入出力は基本的にコンピュータの論理的な状態を変化させるために行われるからです。制御をすることはできません。制御を行って文字列を返す関数とします。引数として与えられた文字列を改行付きで標準出力に出力する関数です。これらの関数の型の定義は、以下のような感じです。型の定義は厳密に言うとやや違うのですが、簡単のためこうしています。