エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

「繰り返さない」再び

「繰り返さない」という話を先日書きました。
実際、ソフトウェアを設計していると、機能として、繰り返しを必要とすることに出くわすことはあまりないように感じます。むしろ言語などの制約から、必要な機能を繰り返しで実現しているだけのほうが多いのではないでしょうか。

例えば、数値の合計を取ることを考えます。実装では、例えば、合計を格納する変数に最初の値を代入して、続いて次の値を加えて、続いてその次の値を加えて…と続きます。繰り返してます。合計を計算するとき、本当は、繰り返しなんてどうでもよくて、合計が得られればいいわけです。繰り返すのは実装の制約だったりします。

実装の制約として、どうしてもどこかで繰り返さなければならないのなら、それを見えないところに隠してしまえ。そうすれば「繰り返さない」を実現できそうです。実際、C++の標準ライブラリにあるアルゴリズムでは、繰り返しはライブラリの背後に隠されています。

と、こんな考えを持つと、どうしても思い出すものがあります。数学のΣです。Σは総和を表す記号で、総和を得るためのたくさんの計算と同じ意味を持つわけですが、Σはただそこにあるだけでいいわけです。あるだけで総和の値を持つわけです。だから、無限数列の総和も表せたりします。

Σを理解しやすいと感じるか否かと、プログラミングがうまいか否かとのあいだに、関連があるとは思っていませんが、プログラミングのスタイルには、どこか、影響がありそうな気がします。気がするだけですが。