Personal tools
You are here: Home ブログ nakayama idiom ? coding pattern ? part2
Document Actions

idiom ? coding pattern ? part2

http://dev.ariel-networks.com/Members/anaka/idiom-coding-pattern の続き。

なんと呼べばいいのか分からない粒度のpatternだが、

StringBuilder sb = new StringBuilder();
for (int i = 0; i < array.length; i++) {
    if (i > 0) {
        sb.append(", ");
    }
    sb.append(array[i]);
}

といったコードもよく見る。
#文字列の配列["ab", "cde", "f", "ghi"]を渡すと文字列"ab, cde, f, ghi"が返ってくる。

ループ変数で条件判断をするのはループの本質に合わない(同じことを繰り返すからループである)ので、このケースなら

StringBuilder sb = new StringBuilder();
String delim = "";
for (int i = 0; i < array.length; i++) {
    sb.append(delim);
    sb.append(array[i]);
    delim = ", ";
}

とすべきだと思っているのだが、この書き方はあまり人気がないような気がする。

#念のために書いておくが、if文を書いたら負けかなと思っているわけではない。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/anaka/idiom-coding-pattern-part2/tbping

コメントが消された (Re:idiom ? coding pattern ? part2)

Posted by inoue at 2006-12-12 13:40
コメントが消された...

もしかして英語のタイトルのコメントは問答無用に消す設定ですか?

Re:idiom ? coding pattern ? part2

Posted by jian at 2007-03-23 12:04
基本的にはループから抜いた時点でchompします。
(chompはあっているかどうかわからないが、要するに最後のコンマをsubstringでカットします)

Re:idiom ? coding pattern ? part2

Posted by inoue at 2007-03-23 15:45
元のコメント(消された)には同様のことを書いていました。

ちなみに、コンテナの型によるchompのコストを気にすべき局面もあります(要素数が多い場合)。ただのLinked Listだと、chompのコストはO(n)です。

Re:idiom ? coding pattern ? part2

Posted by inoue at 2007-03-24 00:41
考えてみれば、Linked Listに大量のappendを繰り返す時点で負けです。appendのコストが低いコンテナ型なら、chompのコストも低いはずなので、jianさんの答えで正しいです。
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.