連載:[完全版]究極の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)抜きに、複数の値に演算を行っている。そして、すでに書いたとおり、「ソースコードの量と質を大きく変えてしまう可能性」を現実のものにしたわけである。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter4 Findメソッド
    1.4.1 MATステートメントの思い出
    2.4.2 ForEachメソッドのbreak問題
    3.4.3 ForEachだけではない繰り返しメソッド
    4.4.4 複数の結果がほしい場合
  5.4.5 偉大なる前進とは何か?
    6.4.6 そして、LINQへ続く/【Exercise】練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間