|  |  | 
 
| 連載:[完全版]究極の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 記事ランキング
		
		
			本日
			月間