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

idiom ? coding pattern ?

例えば、0~59の数列を扱うのに

int second = 0;
for (;;) {
    /* secondを使う */
    second++;
    if (second > 59) {
        second = 0;
    }
}

みたいなコードを見ることがある。
こういうのは、

int count = 0;
for (;;) {
    /* secondを使う */
    second = (second + 1) % (59 + 1);
}

と書くべきである、というのはidiomと呼ぶのか、coding patternとでも呼ぶのか?
昔読んだ本(GoF本だったかな)では、idiomは言語依存のパターンで、その上の層にはdesign patternとなっていた。
このような、言語に依存するわけではないけどdesign patternと呼ぶには大げさすぎるものは、なんと呼ぶのだろう。

ちなみに、1~12の数列であれば

month = (((month - 1) + 1) % 12) + 1;

と書ける。一度0~11にしてから剰余を求め、その後にオフセットを足してやればいい。

もうちょっと一般化すると、n~mの整数列(step刻み)は

count = (((count - n) + step) % (m - n + 1)) + n;

で得られる。nが負の値でも一緒。
stepが負の場合は、(step + (m - n + 1) * r)が正になるようなrを選んでstepとする。
stepを-1にしたmonthの例だと、stepは-1 + 12 * 1になり

month = (((month - 1) + 11) % 12) + 1;

で12, 11, 10, … , 2, 1, 12, … という数列が得られる。

 

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/anaka/idiom-coding-pattern/tbping
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.