|
|
連載:[完全版]究極のC#プログラミング
Chapter4 Findメソッド
川俣 晶
2009/09/14 |
|
|
4.5 偉大なる前進とは何か?
さて、これらのコードを見てどう思うだろうか? 筆者は、ここに「偉大なる前進」の歴然とした証拠を見る。
はたして何が前進したのだろうか? 順を追って説明しよう。
ソースコードから重複を見つけ出し、それを1つにまとめる作業は、リファクタリングの典型的な作業の1つである。しかし、それはコンピュータ史の黎明期に「サブルーチン」という機能が発明されて以来、繰り返されてきた「古い常識」でもある。
だが、この「古い常識」はしばしばうまく利用できない。たとえば、繰り返し構文は、繰り返される文だけを抜き出すのは容易でも、繰り返し構文そのものをうまく抜き出せないことが多かった。
単純な例を出せば、たとえば次のようなコードがあったとき、同じ繰り返し文が2つあるから1つにまとめよう……と思っても、そう簡単には1つにまとめられなかったわけである。繰り返し文には後ろにブロックが付いていて、ブロックは共通ではないからだ。
繰り返し文
{
func1(i);
}
繰り返し文
{
func2(i);
}
|
|
しかし、繰り返し文を検索機能と捉え、実行文と分離できれば、そのような面倒は消滅する。
結果 = 検索
func1(結果);
結果 = 検索
func2(結果);
|
|
結果 = 検索
func1(結果);
func2(結果); |
|
このような書き方は、プログラミング言語自身が持つ処理の単位が、「値」から「値の集まり」に変化しつつあることを示す。いいかえれば、「値の処理」+「繰り返し」によって実現していた機能が「値の集まりに対する処理」へと変化していくわけである。
つまり、本章の冒頭の昔話で書いた「単独の値ではなく、値の集まりに対して行われる演算機能」が実現されたことを意味するわけである。そこでは「明示的な繰り返し構文なしで複数の値に演算を行うことができる」と書いたが、これらのFindメソッドを使ったサンプルコードはまさに明示的な繰り返し構文(foreach/for/while/do)抜きに、複数の値に演算を行っている。そして、すでに書いたとおり、「ソースコードの量と質を大きく変えてしまう可能性」を現実のものにしたわけである。
Insider.NET 記事ランキング
本日
月間