クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net

1ネミ子2017/05/07(日) 18:01:52.03ID:akuyRduv
クラス名、変数名のつけ方に悩んだら書き込むスレです。

命名規則や設計の善し悪しについて議論するのは基本的に禁止。

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part27
http://echo.2ch.net/test/read.cgi/tech/1476572490/

354デフォルトの名無しさん2018/09/22(土) 09:01:46.06ID:4dEHSzz5
訳し方ひとつじゃないだろ

プログラマーのメンタルに悪い

355デフォルトの名無しさん2018/09/22(土) 09:41:14.17ID:i8+E3FCQ
こうですね、理解ります

DEAD_LINE
死の線
モノの死にやすい部分
直死の魔眼により視ることができ、切られたものは死ぬ

356デフォルトの名無しさん2018/09/22(土) 10:17:47.73ID:mXZbGj0b
>>354
一般的な日本人がそのまま読んでも意味が通じる
実に最適な選択だろ

357デフォルトの名無しさん2018/09/22(土) 11:07:39.01ID:4dEHSzz5
納期=死線

ちがう絶対ちがう遅れたっていいんだ誰も死なないんだ

358デフォルトの名無しさん2018/09/22(土) 11:23:11.52ID:TIOG2Ben
due date使えよ

359デフォルトの名無しさん2018/09/22(土) 11:26:12.67ID:i8+E3FCQ
最適解について考えるなら俺も due date を推したい
時刻もあり得る deadline と違って日付であることが明確
deadline は守るべき締め切りというニュアンスが乗りすぎてフラットでない感もある
ただアッパーケースで書いてるし、ザ・期日というべき値ならDUE_DATEよりDEAD_LINEのニュアンスが相応しい文脈なのかもと思ったり
due date という英語は難しいから避けた方がいい、なんて環境ならレベルが低すぎるからとっととおさらばしたい

360デフォルトの名無しさん2018/09/22(土) 11:33:19.06ID:i8+E3FCQ
いや納期だったか
じゃあ delivery date だな

361デフォルトの名無しさん2018/09/22(土) 12:34:11.88ID:TIOG2Ben
delivery dateだと、その日だけって感じにならん?
due dateならそれより前でも可ってわかるけど

362デフォルトの名無しさん2018/09/22(土) 13:49:40.09ID:kFAOP0FY
英辞郎で「納期」で検索した感じ、ニュアンス的には納品側の用語としてはdeadline、
発注側の用語としてはdue dateが適切のように感じるね

個人的にはそこまでこだわる必要はなく、普通にdeadlineでよいと思う

363デフォルトの名無しさん2018/09/22(土) 13:51:25.09ID:4dEHSzz5
俺のメンタルに悪いっつってんだろgじゃkじゃあjsふぁ

364デフォルトの名無しさん2018/09/22(土) 14:24:37.52ID:mXZbGj0b
日本語には「〜です」って言葉をよく使うんだけど
生きづらそうだね

365デフォルトの名無しさん2018/09/22(土) 15:15:34.07ID:4dEHSzz5
それは直接的な意味ではないし回避するために毎回文章を考えるのが面倒なので仕方ないdeath

366デフォルトの名無しさん2018/09/27(木) 19:49:12.84ID:JSlkPqQs
自社スタンドアロンアプリでデータをCSVにエクスポートする機能があるので、
ExportXXX()みたいな関数名が付けられていたんだけど、
この機能を使い回して自社WEBサービス版でも一部利用しようということに
なったものの、こっちで使うときもExportでいいのかどうか
くだらないことに引っかかってる次第。

スタンドアロン←→WEBの間にユーザーは一切関与せず、どちらもまとめて
一つのシステムという扱いなので、Exportでは外に出して自由に使える
イメージが強くて違和感が。

気にしすぎですかね?

367デフォルトの名無しさん2018/09/27(木) 19:55:39.03ID:lMgw/m73
気にしすぎというか何言っとるのかわからん

368デフォルトの名無しさん2018/09/27(木) 20:14:19.43ID:7LpaKKmv
もはや気にしてもしょうがない
出来ているものの名前は変えなくていい
とはいえ違和感が強いならExportというネーミングが最初から微妙だった可能性を省みてもいいかも
システム外部へのエクスポートはCSV出力のひとつの役割で
当初はその側面しか見てなかったけど
本質を表してはいなかった可能性がある
例えば別案はWriteXXXToCSV

369デフォルトの名無しさん2018/09/27(木) 20:15:54.50ID:314u9gDI
Web版でExportXXXしたら何が起きるの?

370デフォルトの名無しさん2018/09/27(木) 20:40:57.03ID:sTtGwCQ3
何言ってるのか分からないねw

Exportっていうのは普通に考えれば「データを他所のアプリに対してexport」ってニュアンスなので、
もしCSVをそのアプリ自身でも読むのならちょっと違うとは思う。

371デフォルトの名無しさん2018/09/27(木) 21:05:18.71ID:JSlkPqQs
>>367
スタンドアロンというのが意味が違うんですかね。
Windowsにインストールしてるソフトがあり、それのことを書いてました。
旧来のそのソフトにWEBサービス版が加わり、そっちとデータの
やりとりが必要となったという流れです。

>>368
仰るとおりです。当初は外部に出してしまって好きに使ってもらう
ことしか考えてなかったのですが、WEB版にデータを渡すのに
一々新規でそのプログラムを作らないで、Export部分を使い回した方が
工数削減出来るだろうし、その後の保守も手間を省けるというところです。
ただ、この場合システム内部で完結するのでExportとは言わないかなあと。

既に開発スタートしてて、既存のExport部とは関係ないデータを吐き出すのに
MakeXXXXCSVみたいなのを作ってから、後でExport処理も使い回す際に
ネーミングに疑問が出てきました次第で。

>>369
WEB版にはExport機能はありません。
スタンドアロン運用で不便な点のみWEB版として追加してます。

>>370
すみません。
ニュアンスとしては同感でして、そこから今回の質問の流れとなりました。


とりあえずは、やはりExportのままだと本来の意味からするとちょっと
違う感じですよね。
もうちょっと考えてみます。どうもありがとうございました。

372デフォルトの名無しさん2018/09/28(金) 20:32:14.35ID:SyXcx5uH
>>366
エクスポートは取り出した結果を外部に公開するイメージだから、スタンドアロンとかwebとかは関係ないと思う。

373デフォルトの名無しさん2018/09/29(土) 01:06:55.25ID:QC2tzjvw
おまえのイメージも関係ないと思う

374デフォルトの名無しさん2018/09/29(土) 02:02:39.43ID:4/x0Bpme
>>372
そう、関係ないですよ。一行で書けば、
既にあるExport機能を内部で完結する形で流用するので関数名がExportだと意味が違ってくるけど変えた方がいいかな考えすぎ?
という主旨です。

開発内部からみれば一応二つのシステム間でExport,Importしてるのは間違いないですが。

375デフォルトの名無しさん2018/09/29(土) 12:46:33.16ID:x2fX+cFc
最初から通信などの内部処理用として用意するならserializeとかにすると思うけど、
既存の処理を使い回すならexportでも別にいいかなあって印象

自分で自由に出来るなら、出力部分のコードをserialize側に移して
export側ではserializeを呼び出すようにしちゃってもいいんだろうけど

376デフォルトの名無しさん2018/10/06(土) 01:13:06.07ID:JjdhAE/r
「システム・ハンガリアン記法」を嫌う人がいるようだけど、個人的には実際に長年使ってみて、
コーディング効率が上がっていると感じる。

ネット上でよく見かける反論に、「システム・ハンガリアン記法は、(代入などで型が異なれば)コンパイラ
がエラーを出してくれるのだから不要」というものがある。

しかし、システム・ハンガリアン記法を使っていれば、たとえば、代入のコードをコーディングしたい最中に
周囲の変数の変数名を見て、エラーが起きない組み合わせを探すと、実は、非常にわずかな組み合わせ
しか無いことが多い。

そして、そのわずかな組み合わせの中に必ず正しいコードがあるので、人間の作業は、
そのわずかな組み合わせの中から選ぶだけでよくなるので、思考の節約になってくれる。

もし、システム・ハンガリアンを使っていなければ、この思考の節約が働かないので、
本格的に考えないといけないことがあり、余計に時間がかかってしまうことがある。

正しいコードが次のようなものだったとする:

pXxxx = pYyyy + ofsAaa;

周囲には、pXxx, pYyy, ofsAaa 位しか変数がないとすれば、頭を使わなくても、可能な組み合わせは、
上記のコードを含む少数のパターンしかないことがすぐに分かる。

そのうちから正しいコードを「選ぶ」事と、意味で考えることを二重に行うことで、早く正解のコードを
書くことが出来るようになる。

ところが、システム・ハンガリアン記法を使っていなければ、意味で考えることしか出来なくなり、
思考パターンを減らすことが出来ない。また、コンパイルしてみないと「検算」もも出来ない。

377デフォルトの名無しさん2018/10/06(土) 01:42:44.00ID:JjdhAE/r
さらに、文字列などを使っている時、

CString     strText;
const char   *pszText = (const char *)strText; // operator char *() 演算子による型変換
int        lenText = strText.GetLength();

などと、同じ Text という名前の文字列に対して、CString 文字列や、それを高速アクセスするための
文字列へのポインタ、文字列の長さ、の各々に対する変数名を機械的に付けられるのは重宝している。

さらに、よくあるのは、メンバ変数と全く同じ意味のローカル変数や仮引数がある状況。

この場合、毎回、新しい生を考え出すのは大変なので、メンバ変数には必ず先頭に m_ を
つけていると便利。今の場合、

m_strText   = strText;
m_lenText   = lenText;

のように美しくバランスするのがとても好きだ。
これだと、エラーが正しいコードであることがとても分かりやすい。

また、「m_」の接頭辞は、次のようなコンストラクタでも重宝する:
CPerson::CPerson( const CString &strName ) {
m_strName = strName;
}
さらに、引数が同じ文字列でも、0終端文字列の場合は、
CPerson::CPerson( const char *pszName ) {
m_strName = pszName;
}
とすればよいだけなので、とても美しい。

378デフォルトの名無しさん2018/10/06(土) 02:54:17.48ID:hIftmu0Z
唐突にどうしたのw
真面目に言ってるのかネタのつもりかのか知らんけど、畢竟

「書きっぱなしで他人も自分も後でメンテしない」

コードならどんな表記法使おうが何の問題もないのよ。
ハンガリアンが批判されるのは、この条件を満たさない(世の中のコードの9割はそうだと思うけど)
場合に問題が起こるから

もちろんハンガリアンがダメって言ったって教条主義的に全部捨てる必要はない。
メンバ変数のプリフィクスなんか誰も文句言わないよ

こんな20年前に決着が付いてる話を今頃して何が楽しいの

379デフォルトの名無しさん2018/10/06(土) 03:14:51.07ID:wpWp2JW+
ワイはアプリもシステムも混在するハンガリアン
とりあえず事故は皆無

アプリケーションで使うのは、大体座標系かな
x,y,cx,cyとか、コイツらをシステムの方でやっちゃうと変数名が長くなるだけ
ならまだいいんだけど、計算がちと複雑化してくるとあああああってなる

380デフォルトの名無しさん2018/10/06(土) 07:22:44.97ID:hM5EPMW3
グローバル変数でなければハンガリアンオッケーだ。

381デフォルトの名無しさん2018/10/06(土) 11:05:40.90ID:Ba25Qv4b
個人的にはこうだな
・ポインタ変数にpを接頭するのは分かりやすい
・メンバ変数にm_も悪くない
・型を接頭するのはやめて

382デフォルトの名無しさん2018/10/06(土) 11:06:26.33ID:Ba25Qv4b
lenTextがintLenTextじゃないのは気になった
デフォルト扱い?

383デフォルトの名無しさん2018/10/06(土) 11:10:52.47ID:Ba25Qv4b
型の接頭がいいと思うのは関数内で型変換するときくらい

384デフォルトの名無しさん2018/10/06(土) 11:17:28.61ID:Ba25Qv4b
ポインタと型変換とメンバ変数に共通することを一般化して考えると、同じ情報を異なる形式で2つ持ちたいときにハンガリアンは活きる

385デフォルトの名無しさん2018/10/06(土) 14:07:26.85ID:1KPazL3D
>>381
今時pXxxはないわ
普通にPtrToXxxかXxxPtrでいい

PtrToReadPtr
これなら何を意味してるかだいたいわかるが
ppRead
こんなのは勘弁してもらいたい

386デフォルトの名無しさん2018/10/06(土) 15:03:56.04ID:evMRo/Iv
C++相談室 part137
https://mevius.5ch.net/test/read.cgi/tech/1535353320/962


962 デフォルトの名無しさん (ワッチョイ 6ee3-BkfR) [sage] 2018/10/05(金) 18:51:17.31 ID:4ThlZrTR0 [3/7]
>>947
最初の従業員のデータについては、
EmployeeInfo

二番目の dictionary の方は、
g_dictCompanyEmploeeInfo_s

387デフォルトの名無しさん2018/10/06(土) 15:21:42.95ID:1KPazL3D
コピペマン参上!!!まで読んだ

388デフォルトの名無しさん2018/10/06(土) 16:32:09.02ID:pORM0fWU
pFooとbarPtr/PtrToBazの間に
そこまで大きな差があるとも思えないんだが

>>381
個人的には、メンバ変数の m_ はバッドノウハウに見える

389デフォルトの名無しさん2018/10/06(土) 20:13:22.49ID:rmt6Q6pM
>>388
pは適当すぎたか
PointerToCompanyNameよりは
ptrCompanyNameのほうが好み程度のことが言いたかった

390デフォルトの名無しさん2018/10/06(土) 21:13:34.32ID:pORM0fWU
>>389
どっちもプリフィクスなの変わらなくない?って聞きたかったんだけど

391デフォルトの名無しさん2018/10/06(土) 22:43:56.02ID:rmt6Q6pM
>>390
別にサフィックスでもいいんじゃない?
そこは気にしてなかったわ

392デフォルトの名無しさん2018/10/06(土) 22:52:54.09ID:rmt6Q6pM
変なプレフィックスを使うことに忌避感情はあるけどptrというやや古典的な略語を使うことについてマイナスイメージはないということか

393デフォルトの名無しさん2018/10/06(土) 23:10:54.72ID:pORM0fWU
>>391-392
よく分からんが、pFoo を否定したのは>385だぞ

394デフォルトの名無しさん2018/10/06(土) 23:46:24.65ID:rmt6Q6pM
>>393
ゴメン間違えた

395デフォルトの名無しさん2018/10/07(日) 11:54:03.14ID:9wt2o7WS
>>385
何故、ハンガリアン記法が支持され、否定されてきたか

PtrToReadやPointerToReadなんて記法は、そのオブジェクトのデザインとしての命名ではなく
ハンガリアン記法と同じくプログラマの都合のような命名でしょ
文章的にそれをやってしまうと、ハンガリアン記法よりも余計にウザったい命名規則になると思うがな
そのPointer(Ptr)って名前は、システムとしてのポインタ(型)なのか
デザインとしてのポインタ(指し示すもの)なのか、って分かりづらくなる

396デフォルトの名無しさん2018/10/07(日) 12:09:03.29ID:TpDmbWu/
>>395
何を言ってるのか意味が分からないよ
システムとかデザインとか何のこっちゃw

世の中いろんなプログラマがいるが、PtrToReadなんて命名をする奴は誰もいないだろうw

よく見てみ
ReadPtrって書いてあるでしょうw
これは例えばキューみたいなものを実装する時に次のデータの読み出し位置をポイントするポインタ(読み出しポインタ)だ
だからPtrToReadPtr は「読み出しポインタへのポインタ」だw

397デフォルトの名無しさん2018/10/07(日) 13:54:56.07ID:nLJ8SV7e
>>395
だからどっちのハンガリアンだよ

398デフォルトの名無しさん2018/10/07(日) 16:58:32.70ID:9wt2o7WS
>>396
>PtrToReadなんて命名をする奴は誰もいないだろう
「普通にPtrToXxxかXxxPtrでいい」って>>385に書いてあるじゃん

>だからPtrToReadPtr は「読み出しポインタへのポインタ」だw
意気揚々と説明しなくても、そんなことは分かってるよ

>システムとかデザインとか何のこっちゃw
意味分からんか?
本来デザインとしての名称にシステムとしての名称が加味される状態だろ(strFoo、iBarなどのシステムハンガリアンみたいに)
PtrToXXXでもXXXPtrでもそれと同じな上に変に文章的な書き方をしたことでデザイン上の名称なのか区別がつき難い
fooPointerって変数があった時、それがポインタ型を表すのか、デザインとして指し示すモノって意味でつけたのか、分からないだろ
そんなのなら、まだpFooのような無機質な記号の方がまだマシだよ
こんなの、Bool型を返すプロパティを命題にするとか、プロパティ名は名詞にするとかと同じように特殊ルールなんだからさ

>>397
システムハンガリアンだよ

399デフォルトの名無しさん2018/10/07(日) 17:11:57.27ID:XEfeABUd
>>398
よっしゃ、今日はこれぐらいにしといたるワ、まで読んだ

しかし、前置詞のtoと不定詞のtoに区別が付かないって真面目にいう人初めて見たよw

400デフォルトの名無しさん2018/10/07(日) 17:17:10.53ID:9wt2o7WS
>>399
その区別の話をしていないよ
文章の書き方が悪かったら申し訳ないけど、何でそんなふうに捉えるんだ?

401デフォルトの名無しさん2018/10/07(日) 17:42:41.95ID:vaPxBKbp
よしじゃあMemoryAddressPointerToReadにしよう

402デフォルトの名無しさん2018/10/08(月) 00:52:41.08ID:U3W9vOBu
とりあえず、生ポインタ使うのはやめようぜ

403デフォルトの名無しさん2018/10/08(月) 01:47:59.04ID:PsSZQ0gM
(´∀`)<なまぽ

404デフォルトの名無しさん2018/10/08(月) 05:15:16.84ID:l0nZ7S5V
ギュッ❤

新着レスの表示
レスを投稿する