クラス名・変数名に迷ったら書き込むスレ。Part20
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2011/07/29(金) 21:32:01.00命名規則や設計の善し悪しについて議論するのは基本的に禁止。
前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
0894デフォルトの名無しさん
2012/01/15(日) 20:37:52.40virtual ~Base(void) {}
virtual char const * GetName() const = 0;
};
class Hoge : public Base {
public:
static char const * GetName_() { return "Hoge"; }
char const * GetName() const { return GetName_(); }
};
名前かぶっちゃったんだけどどうしよう
両方共publicにしたいからアンダースコアとかで誤魔化したくない
0895デフォルトの名無しさん
2012/01/15(日) 20:56:12.170896デフォルトの名無しさん
2012/01/15(日) 21:03:42.26その情報だけでは、スレの趣旨に反するが、設計が悪いとしか言えない
そもそもクラスメソッドの GetName_ とインスタンスメソッドの GetName は、
それぞれどういう役目なの?
0897デフォルトの名無しさん
2012/01/15(日) 22:39:55.63GetDynamicName
0898デフォルトの名無しさん
2012/01/15(日) 22:44:23.990899デフォルトの名無しさん
2012/01/15(日) 22:44:30.00既に突っ込まれてるとおり質問が無茶振り過ぎ
0900デフォルトの名無しさん
2012/01/15(日) 22:55:42.59最近はCでもキャメルが多いでしょ。
Win32なんて昔からそうだけど。
ヤクザさんは胃の中の蛙だなw
0901デフォルトの名無しさん
2012/01/15(日) 23:14:02.95おまえ職場や学校で疎外感感じるだろ?
0902デフォルトの名無しさん
2012/01/15(日) 23:16:21.91おまえ.isBaka() == TRUE
0903デフォルトの名無しさん
2012/01/15(日) 23:26:40.60言われた本人が無視してるんだからスルーしようよ。
頼むよ...
0904デフォルトの名無しさん
2012/01/15(日) 23:32:27.64パスカルの間違い?
0905デフォルトの名無しさん
2012/01/15(日) 23:41:49.09その通りだねすまんです。
0906デフォルトの名無しさん
2012/01/15(日) 23:58:08.16>>901-903がつっこまなかったあたりにいろいろ考えざるを得ないねw
0907デフォルトの名無しさん
2012/01/15(日) 23:59:06.05あなたって凄いのね!!!!!!!!!!!!!!!!!
0908デフォルトの名無しさん
2012/01/16(月) 07:54:26.24俺はそういうばあいはHoge.GetName()とHoge::GetStaticName()にする
0909デフォルトの名無しさん
2012/01/16(月) 10:25:25.96~にょろ
|たてぼう
.てん
,こんま
0910デフォルトの名無しさん
2012/01/16(月) 11:06:43.25~ チルダ
| セパレート
. ドット
, カンマ
0911デフォルトの名無しさん
2012/01/16(月) 11:57:19.36~ チルダ
| オア
. ドット
, てん
0912デフォルトの名無しさん
2012/01/16(月) 12:39:08.54~ チンコ
| もっとチンコ
. 玉
, 毛玉
0913デフォルトの名無しさん
2012/01/16(月) 15:52:13.19息子が帰宅後、自分の部屋に直行
こんなレスを書いていたとは・・・
0914デフォルトの名無しさん
2012/01/16(月) 17:59:32.580915デフォルトの名無しさん
2012/01/16(月) 19:22:09.930916デフォルトの名無しさん
2012/01/16(月) 21:18:09.76再帰的に辿って探すのを find_recursively() という名前にしています。
しかしよく使うのは find_recursively() のほうで、find()のほうはほとんど使いません。
そのため、よくつかう方のfind_recursively()をもっと短い名前にしたいと思います。
どんな名前がいいでしょうか。
find_recursively()をfind()にして、find()をもっと別の名前にするのが吉?
0917デフォルトの名無しさん
2012/01/16(月) 21:34:38.140918デフォルトの名無しさん
2012/01/16(月) 21:53:21.02指定するディレクトリ内に指定する名前が存在するかどうかを検査する方をexistsにするとか。
そもそも「一段だけ探す」って日本語は変だ。
「あるかないか調べる」でしょ。だからexists。
0919デフォルトの名無しさん
2012/01/16(月) 21:55:27.06find <--> findR
findAt <--> find
0920デフォルトの名無しさん
2012/01/17(火) 14:50:05.09>1
0921デフォルトの名無しさん
2012/01/17(火) 21:10:01.90find_recursivelyをfindにして、findをfind_no_recursively。
個人的にはfind(bool recursive)。
ついでに質問。
countとspanという名前のプロパティを持つクラスで、引数xを取るメソッドが繰り返し呼び出される。
メソッドは x と count + span を比較し、x の方が大きければ count へ x を代入し、trueを返す。
そうでなければfalseを返す。
という振る舞いをするクラスなんだが、なんて名前にしたものかと。
0922デフォルトの名無しさん
2012/01/17(火) 21:35:05.29日本語でおk
0923デフォルトの名無しさん
2012/01/17(火) 21:43:30.69だから質問が無茶振りだって....
っていうか、それって(x - count)の絶対値とspanを比較しなくて大丈夫なの?
電子回路のシュミットトリガー的というか、大昔のTVゲームのグラディウスのオプション的な
挙動が目的だと想像するんだけど。
0924デフォルトの名無しさん
2012/01/17(火) 22:03:58.59用途で命名するべきでは
0925デフォルトの名無しさん
2012/01/17(火) 22:06:22.72細かい内容は隠蔽されてるから良いんじゃねーか
しきい値超えた時だけたされようがたされまいがぜんぜん違う値がたされようが
そんなことはクラス利用者にとってはどうでもいいんだよ
0926デフォルトの名無しさん
2012/01/17(火) 22:06:46.45それのメソッドはクラス内だけの計算の為に使われる非公開メソッドではなく、
そのクラスを利用する側に対して公開するものなのだろう
であれば、メソッド名はそのクラス自身が持つ役割と無関係ではあり得ない
そのクラスの役割は何だろう?
それともう一つ
そのメソッドはクラスが持つ状態を変化させるものでろあう
そして、引数によって無条件に変化させるのではなく、
count + span と比較することによってある種の制約を課している
つまり状態変化とその制約
この事もメソッドの命名に影響を与える
メソッドを利用するプログラマには、メソッド名から
状態が変化する事を読み取ってほしいのか、
制約がある事を読み取ってほしいのか、両方なのか
状態変化の内容も読み取れるようにしたいのか
どのような制約があるのかも取れるようにしたいのか
などなど
どのような情報をメソッド名から読み取ってほしいのだろう?
全ての情報をメソッド名に盛り込むと返って分かりにくくなるから、
もっとも重要な情報を簡潔にしてメソッド名に、
あとの情報はコメントやドキュメントに回す必要がある
0927デフォルトの名無しさん
2012/01/17(火) 22:10:16.00乱暴すぎ
そんなことがクラス利用者にとってどうでもいいかどうかは、場合による
今はどのような「場合」なのかを質問者が明確に説明していないのが問題
0928デフォルトの名無しさん
2012/01/17(火) 22:14:57.56利用者はxを足すことを考えてるがその結果がどうなるかはクラスによる
「しきい値以上なら足す」なんて馬鹿正直にめんどくさいメソッド付けちまったら変更に弱すぎる
しきい値以上でなかったら半分足す仕様に変えたいなーって上司がぼやいたら関数名と利用者すべて書き換えるつもりか?
処理の詳細を匂わせるメソッド名じゃカプセル化の意味が無いんだよ
0929デフォルトの名無しさん
2012/01/17(火) 22:20:35.280930デフォルトの名無しさん
2012/01/17(火) 22:22:36.820931デフォルトの名無しさん
2012/01/17(火) 22:26:16.460932デフォルトの名無しさん
2012/01/17(火) 22:26:51.880933デフォルトの名無しさん
2012/01/17(火) 22:29:04.250934デフォルトの名無しさん
2012/01/17(火) 22:29:58.07もっともあの文章が質問者の意図を正確に表現したものかどうか怪しいけどw
どのスレでもそうだけど、質問者は書き込みボタンを早漏気味にクリックする前に
よくてめえの文章を推敲して欲しいもんだよね。
0935921
2012/01/17(火) 22:41:50.76具体的に書くと、16ミリ秒単位で回ってるスレッド内でキー入力をチェックしてる
んだが、不用意にキー入力判定が連続入力されないようにしたい、と。
一度キー入力を受け付けたら100ミリ秒(前回の例でのspan)経つまでは
入力を拒否(falseを返す)、それ以上経っていたら入力を許容(trueを返す)。
countは入力を受け付けた時間を記録しているだけで、countもspanも
別に名前にこだわりはない。固定してるように読めるね。すまん。
で、当初はKeyCheckerって名前にしようと思っていたんだが、他に16ミリ秒毎に
実施する必要がない処理がいくつかあるので、汎用的に
「前回受け付けてから一定期間が経過しているかどうか」を表すクラスにして
あっちこっちで使い回そう、と思ったわけですわ。
で、そのクラス名をなんにしたもんか、と。中途半端に処理内容を書く
んじゃなくてどういう目的のクラスなのかを書くべきだったね。すまん。
というわけで、内部的に値を足し込むことが目的じゃないのでAdd(x)やTryAdd(x)は
ちょっとアレな感じ。すまんねわざわざ書いてもらったのに。
0936デフォルトの名無しさん
2012/01/17(火) 22:55:06.34入力クラスを利用する側からすれば入力クラスが実際には内部的に少し待ってるなんてことを意識したくないはずだ
0937デフォルトの名無しさん
2012/01/17(火) 22:57:11.46でも、これって普通はクラスにするまでもないような気もするけどねえ....
0938デフォルトの名無しさん
2012/01/17(火) 23:04:15.830939921
2012/01/17(火) 23:19:26.83なんとなく目覚まし時計的なイメージでAlarmにしてたんだけど
警報的な意味合いが感じられてイマイチだよなぁ、と思ってて。
他の人もどうもありがとう。助かりました。
0940デフォルトの名無しさん
2012/01/17(火) 23:22:47.870941デフォルトの名無しさん
2012/01/17(火) 23:33:07.14自分で提案しといてあれだけど、この名前にはちょっと疑問がないわけでもないんだよね。
というのは、使い方としてはたぶん、
void start(int countDown)
みたいなメソッドを呼んでカウントダウンを開始することになると思うんだが、
(1) このメソッドを呼ぶ前
(2) このメソッドを読んでから指定時間経過後
たぶん欲しいのは、この二つのどちらかの場合trueを返すメソッドな訳だよね?
仮にこれをクラス名に引きずられてIsTimoutとかしちゃうと、上の(1)の場合にも
trueを返すのが不自然に感じられるような気がしないでもない。
まあ気にしなきゃ済む問題かもしれんが。
0942デフォルトの名無しさん
2012/01/17(火) 23:40:41.31命名規則についてはどこで議論しろというんだ
0943デフォルトの名無しさん
2012/01/17(火) 23:47:58.74その後の流れ次第ではスレ立てしてもいいよ
http://toro.2ch.net/test/read.cgi/tech/1326081866/
0944921
2012/01/18(水) 00:36:46.11isTimeoutが最初に呼ばれる時は初期値0と比較して、カウントダウンではなく
カウントアップで経過確認してるのでまぁいいかなと。
疑似コード的に書くと以下のような感じ。
void main() {
TimeoutChecker keyChecker(100), fpsChecker(1000), ...;
while (true) {
time = timeGetTime();
...;
if (keyChecker.isTimeout(time)) ...;
if (fpsChecker.isTimeout(time)) ...;
...;
}
}
とまぁ、FPSみたいにせいぜい1秒単位で処理すればいいものや、
パフォーマンスが悪いときに動的に一部の処理の実行頻度を落としたり、
ということをやろうとするとクラス化してまとめておいた方が
管理しやすいよね、というだけの話です。
0945デフォルトの名無しさん
2012/01/18(水) 02:21:45.77なんでAddAdd言ってるのかわからないんだけど、
メソッドの処理としては、countにxを代入するかしないか、だよな。
0946デフォルトの名無しさん
2012/01/18(水) 02:23:36.006フレに1回しか入力できないとかシンクロ連射涙目じゃん
0947デフォルトの名無しさん
2012/01/18(水) 10:04:05.00いい名前が思い浮かばなかったらまずはコードを見直すことから始めよう
今回のケースはまさにそれです
0948デフォルトの名無しさん
2012/01/18(水) 14:16:35.330949デフォルトの名無しさん
2012/01/18(水) 15:47:31.05しみじみ同意。
俺もその境地にたどり着いた。
0950デフォルトの名無しさん
2012/01/18(水) 15:54:12.01抜け出せず思考停止状態に成ってるだけだわ
0951デフォルトの名無しさん
2012/01/18(水) 16:03:58.02FPS fps;
FrameCount frameCountForKeyInput;
String getKeyStateInsensitive()
{
if (frameCountForKeyInput.getSecond(fps) > 0.1) {
frameCountForKeyInput.reset();
return getKeyState();
}
return "";
}
でいいんじゃない
個人的にタイムアウトチェッカーとかカタカナ英語過ぎて許せないな
0952デフォルトの名無しさん
2012/01/18(水) 16:10:46.190953デフォルトの名無しさん
2012/01/18(水) 16:14:44.080954デフォルトの名無しさん
2012/01/18(水) 16:20:46.51100ms経たないとキーステートを取得できない関数をほしがってる人がどこに
0955デフォルトの名無しさん
2012/01/18(水) 16:47:38.05すぐ気づいたけど直すの簡単だし変数名のスレだからまあいいかとそのまま投稿w
0956デフォルトの名無しさん
2012/01/18(水) 16:53:33.24> FPSみたいにせいぜい1秒単位で処理すればいいもの
何このクソゲー
0957デフォルトの名無しさん
2012/01/18(水) 16:55:05.850958デフォルトの名無しさん
2012/01/18(水) 17:22:48.93これを実現するためのコードが無駄に重いっていう本末転倒
0959デフォルトの名無しさん
2012/01/18(水) 20:50:48.38ど素人が
0960デフォルトの名無しさん
2012/01/18(水) 22:31:07.560961デフォルトの名無しさん
2012/01/18(水) 22:42:36.51オブジェクト群を生成し適切に参照関係を結びそれぞれを適切な管理クラスに登録して
初めてユーザーがその機能を扱える状態になる
この「オブジェクト群を生成し適切に参照関係を結びそれぞれを適切な管理クラスに登録する」までを隠蔽して一つの命令にしたんだが何かいい名前はないだろうか
CreateXXXだと単一オブジェクトの生成のみのイメージがあるのでちょっと気に入らない
0962デフォルトの名無しさん
2012/01/18(水) 22:52:12.620963デフォルトの名無しさん
2012/01/18(水) 22:53:29.430964デフォルトの名無しさん
2012/01/18(水) 22:57:03.88Abstract Factoryパターン的な発想?
だとしたら、メソッド名よりもそのオブジェクト郡の生成と関連付けを行う
クラスのクラス名に凝った方が良いのでは?
メソッド名は普通にgetXXXXで良いように思うけど。
0965デフォルトの名無しさん
2012/01/18(水) 23:17:42.54オブジェクト群の生成や管理を隠しておいて十分なら、
クラスの中にぶち込んで、そいつをユーザに使わせたら?
シンプルなインタフェースだけ公開して。
隠し切れずに部分的に外に出てたり、外の物を積極的に使ったりする場合は、
GoF的にはFacadeパターンってのがある。
0966デフォルトの名無しさん
2012/01/18(水) 23:28:40.52setup
prepare
0967デフォルトの名無しさん
2012/01/18(水) 23:29:57.40BuildXXX
0968デフォルトの名無しさん
2012/01/18(水) 23:33:50.83追記
BuidXXXと書いたけど
XXXはオブジェクト群の意味するものの名前
DirectShowで言えばBuildFilterじゃなくてBuildGraphという感じ
0969デフォルトの名無しさん
2012/01/18(水) 23:48:49.390970961
2012/01/19(木) 00:22:35.33辞書で日本語訳を見たところdeployが感覚的に一番近い感じでした
システムに要素を配置する的なニュアンスで
0971デフォルトの名無しさん
2012/01/19(木) 00:28:30.570972デフォルトの名無しさん
2012/01/19(木) 00:51:12.40オブジェクト群;
public:
コンストラクタ(登録するべき管理クラス群) {/*生成リンク登録*/}
} ;
寿命管理用のホルダー.insert(new アプリ上での機能の名前(管理クラス群)) ;
0973デフォルトの名無しさん
2012/01/19(木) 20:41:55.190974デフォルトの名無しさん
2012/01/21(土) 22:30:58.65コードを延々と書き進めていたら、変数命名の要素でchrとcharが
入り乱れているのに気が付いた。 chrcodeとかchardataとかchrlistとか。
どちらも伝統ある省略法だけど、使い分ける事は可能かな?
それとも、単純に短い方が正義?
0975デフォルトの名無しさん
2012/01/21(土) 22:36:32.01略しないのがトレンド
0976974
2012/01/21(土) 23:00:39.15CharacterCode、CharacterData、CharacterList・・・長過ぎませんか?(^^;
まあいいや、試しに実際にコードを置き換えてみます。
早い回答有難う御座います。
0977デフォルトの名無しさん
2012/01/21(土) 23:08:16.20親切のつもりだろうが現実的には可読性を著しく低下させる
変数名は省略しコメントにロングネームを添えよ
0978デフォルトの名無しさん
2012/01/21(土) 23:30:45.44コメントが必要な変数名はソースの可読性を低下させる
コメントは「処理や計算」を目で追う場合のサポートとして付けるべき
サポートが必要な変数名はクソ
0979デフォルトの名無しさん
2012/01/21(土) 23:37:53.54大量の省略表記規約がある環境はストレスマッハ
だが、あらゆる省略表記が混在する地獄よりはまし
変数が適切な空間にあれば変数名は短くシンプルに済むはずなんだ
0980デフォルトの名無しさん
2012/01/21(土) 23:44:02.95識別子を適切に設定してさえいれば短いほうが円滑に物事が回る
いちいち長い名前を付けなければ混乱するという状況に落った場合
それは名前付以け前のどこかに問題があるはずだ
名前空間の使い方を間違えてるとか、スコープが不適切な変数とかね
0981デフォルトの名無しさん
2012/01/22(日) 01:31:21.050982デフォルトの名無しさん
2012/01/22(日) 01:38:40.76また病気が始まったな。
職場の人間はよく知っているし、そもそも人の名前は機能や意味を表すためのものではないから
ここでの類推としてはまったく不適切。
名前空間まで含めた完全修飾名を普通は使わないたとえとしてなら適切。
>>976
名前に求められることは、そこから変数や関数の意味や機能を読み取れることだから、
その意味では個人的はcharなら許容範囲だとは思う。
0983デフォルトの名無しさん
2012/01/22(日) 01:43:33.97chrとかcharとかcharacterって一体何の情報何だろう
もしかして型名?
0984デフォルトの名無しさん
2012/01/22(日) 02:07:34.73「参照先のビット列を文字コードとして解釈することが求められている」
と読み取れる
0985デフォルトの名無しさん
2012/01/22(日) 02:09:29.45スコープ狭いのはぶっちゃけ1文字とかでもいい。
0986デフォルトの名無しさん
2012/01/22(日) 02:29:59.04・母音を抜く
・文字数で切る
・語素の境界で切る
・複合語の頭文字を並べる
追加して
0987デフォルトの名無しさん
2012/01/22(日) 02:46:03.850988デフォルトの名無しさん
2012/01/22(日) 03:09:09.05db, id, ok くらいはまあいいとして、グローバルスコープでxferとか付けちゃうのは微妙
0989デフォルトの名無しさん
2012/01/22(日) 04:38:21.16× count → cnt
0990デフォルトの名無しさん
2012/01/22(日) 04:43:28.28だったらutf8だとかeucだとか文字エンコードも併記すべきな気がするぞ…
0991デフォルトの名無しさん
2012/01/22(日) 10:09:32.31それが正解だね
スコープが狭くて文脈や宣言部分で意味がすぐわかるのにだらだら長い名前かくと
アルゴリズムの構造を記述している部分より識別子のほうが長くなって逆に読みにくくなる
何でもかんでも長くてはっきりした名前を付けないと気が済まない人って偏執狂的で頭の固い、応用や機転の効かない老害なんだろうなーって感じるよ
0992デフォルトの名無しさん
2012/01/22(日) 10:17:54.23違うだろ
複雑な機能や概念について対話するときにその対象のことを指し示すのにいちいち詳細を語っていてはきりがないから
その機能や概念を示すものとして何か短い字句を割り当てているだけ
ようするに名前の本来の役割は面倒な詳細を隠蔽してより上位のレベルでの対話を円滑にするためのものだ
内容を細かく示そうとする名前の付け方は原理的に間違っている
0993デフォルトの名無しさん
2012/01/22(日) 10:56:30.09逆
お前の感覚と違って現実は老害ほど略したがる
レス数が950を超えています。1000を超えると書き込みができなくなります。