中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

ループはループしているようにみえているべきか?

1行でかけることは効率のいいことなのか?
http://blogs.wankuma.com/naka/archive/2006/06/22/31119.aspx

少し前にこのようなエントリをかきました、Jittaさんのコメントですが

>> 表面上ループしていないように見えた
>これは、困る。。。ループしていることが読み取ってもらえないと、困る。

これは本当にそうでしょうか?

逆にプログラマは、内部でどのような処理が行われているかを類推する義務があると思います。

以下の構文はすべて内部でループ処理をしています。あなたは読み取れますか?

C#-1
string X = "ABCDE";
X.Contains("C");

C#-2
ListA.ForEach(functionA)

VB-1
Instr("ABC", "B")

ASP.NET-1
<asp:GridView ID="GridView1" runat="server" DataSourceID="DataSource1">

Haskell-1
x []      = 0
x (c:cs) = x cs

#最後のHaskellは冗談に近いわけですが・・・(^^

投稿日時 : 2006年6月25日 0:03

コメントを追加

# re: ループはループしているようにみえているべきか? 2006/06/25 11:42 渋木宏明(ひどり)

>これは本当にそうでしょうか?

対コレクションてことなら、ほとんどの場合NOでしょうね。
本当にやりたいことは「コレクションの要素(可能なら、特定の条件に合致する)に対して特定の演算を行いたい=ベクトル演算したい」のであって、「ループしたい」のではないからです。
これまでは、「ループする」ことがベクトル演算を実装するもっとも単純で一般的な手法でしたが、今後、計算機のマルチスレッド/マルチコア志向が進むに従って、別な実装方法に親しんでいく必要があると思います。

# re: ループはループしているようにみえているべきか? 2006/06/26 11:02 G.O.R.N

私もコレクションについてなら、Yesになるケースは多数ではないと思います。演繹して考えれば、Jittaさんの考えというのはループしていることが自明でなければパフォーマンスのチューンで困るとかそういったところではないかと考えます。しかし、実際にはループに見えるようなところでも実際のありようはいろいろですし、現在変革の進んでいる領域でもあります。
そういったところでは、お気持ちは汲むが、かならずしも自明ではないといったところでしょうか。

# re: ループはループしているようにみえているべきか? 2006/06/27 6:18 Jitta

 ん~。。。全部が全部、ではないですね。

 誰が、どの様に保守して、どの様な改修が入る可能性があるか、ということではないでしょうか。
ループしていることに意味があるのに、“実行しないと”ループしていることが分かってもらえないのは、困ります。
または、「改造」を“やらされる”のが経験の浅い人の場合、コードを正しく読めないと、とんでもないことをしてくれるかもしれません。

 より多くの人が読み解けることを優先するように、言われてきたので。

# re: ループはループしているようにみえているべきか? 2006/07/06 10:42 ef

コレクションの場合もループで実装されているか、よりも対象コレクションの内容を書き換えるのか、結果を別のコレクションインスタンスで返すのかの方が重要になるケースが多いでしょう。

また、C#-1 の場合 contain の内部の実装は線形探査ではなくBMサーチかもしれません。C#-2の場合も CLI の JIT がループアンローリングして実行速度を稼ぐ選択を(将来)とるかもしれません。

結局ループであることが判る事よりも、プログラムのインターフェースや繰り返しの実行オーダを知りたい(換えられたくない)と言うのが根っこにあるのではないでしょうか。

タイトル
名前
URL
コメント