- PR -

差を算出する、あるいはソースとデスティネーションがある場合、メソッド引数の順序は?

投票結果総投票数:19
昨日、今日 / src、dst 7 36.84%
昨日、今日 / dst、src 1 5.26%
今日、昨日 / src、dst 11 57.89%
今日、昨日 / dst、src 0 0.00%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-03-28 02:01
コーディング規約に近い話題になります。
2つの日時の差を算出するメソッドや、あるいはコピーのようにソースとデスティネーションを持つメソッドの場合、引数が2つありますが、その順序はどう統一すれば良いでしょうか?

(とくに言語を問わないのですが、私個人的には最近 C# を使っているので、この会議室(Insider.NET)に投稿しています。)

差をとるメソッドだと、たとえば、
DateDiff(昨日, 今日) = +1日間
か?
それとも、
DateDiff(今日, 昨日) = +1日間 (すなわち、DateDiff(昨日, 今日) = -1日間)
か?で悩みます。
後者だと、
今日 - 昨日 = +1日間
という差演算と同じ順序で扱えます。

コピーは、
Copy(source, destination)
か?
それとも、
Copy(destination, source)
か?
どっちでもいいと言えばそうなのですが、どっちか決めがほしいものです。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-03-28 08:06
.NET の標準ライブラリは (src, dst) になっていますね。
また op_Subtruct も minuend - subtrahend は (minuend, subtrahend) です。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2008-03-28 08:29
こんちは

2番を選択しました。
日付関係は From To の順序で呼ぶようにしてます。
というか設問が昨日、今日という表現で曖昧です。
左側に基準となる日にちをおくようにしてます。
DiffDate(昨日, 今日)の場合昨日を基準にして+1日
DiffDate(今日, 昨日)の場合今日を基準にして−1日

Copyはそのレベルによりますが、低レベルな呼び出し(文字列のコピーなど)は
Destination, Source の順序にしています。
アセンブラが opecode destination, source なのでその影響を受けてます。

高レベルの呼び出し(ファイルのコピー、ディレクトリのコピーなど)は
Source, Destination の順序にしています。
シェルの呼び出しに影響されてます。

WindowsAPIだと似たようなAPIで引数が逆のものとかあって困りますよね?
GetCurrentDirectory(nBuffLen, lpBuff)
GetSystemDirectory(lpBuff, nBuffLen)
まぁ通常はコンパイル時にエラーになるから問題ないけど...
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-03-28 09:09
例題でいうとDiffDate(今日, 昨日)かなぁ。

分け方として、
Copy A To B
Rewrite B By A
とか英文にあわせるとか。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-03-28 09:21
3番に投票しました。
DateDiffはちょうど同名の関数がVBにありますが、
新しい日付, 古い日付 の場合に 正の数を返すという形になっています。
減算と同じ構成でわかりやすいと思います。

SourceとDestinationの場合は、SourceからDestinationへという意味合いで、この順番にします。
私の場合はWindowsAPIのBitBltの影響を受けているだけかもしれません。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-28 09:34
あまり気にしたことはないですが
私的には(1)ですかね

いろいろなコンピュータ文化(源流)によって
変わってきてますね。

ただ、ちょっと見た限りではDateDiffにsrc/dstみたいな関係は
無いような気がします。
しいて言えば基準日と比較対象では?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-28 10:11
私も 3 ですね。

減算が目的なら (大きい値, 小さい値) が直感的だと思います。 ただし AddMonth メソッドのように基準から正負の数をどうこうするメソッドの場合は (基準, 足しこむ値) という順番になります。 Source と Destination なら (Source, Destination) 以外はもう気持ち悪くて無理です。 元 >> 目的先 と矢印は常に右向きにしたいわけです。

判断に困る時は NCL に合わせることにしています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-28 10:51
DiffDate(A, B) というのは、Aという日付をBという日付にするために必要な差分を算出するためのメソッドだと思います。
なのでAを基準としてB-Aを結果として返す、という意見に賛成です。

もっとも、diffコマンドの説明からそう連想しただけだったりしますが。
http://docs.sun.com/app/docs/doc/816-5165/diff-1?l=ja&a=view
引用:

The diff utility will compare the contents of file1 and file2 and write to standard output a list of changes necessary to convert file1 into file2.

スキルアップ/キャリアアップ(JOB@IT)