トップページ⇒tech
1001コメント266KB

クラス名・変数名に迷ったら書き込むスレ。Part20

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/07/29(金) 21:32:01.00
クラス名、変数名のつけ方に悩んだら書き込むスレです。

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part19
http://hibari.2ch.net/test/read.cgi/tech/1293201229/
0239デフォルトの名無しさん2011/11/03(木) 11:35:13.60
>>237
俺なら、そういう「適切な利用方法」に関する情報は名前には入れない
名前には「それは何か」という情報だけを入れる

外部で保持されてはまずい生ハンドルがどうしてGetで取得できちゃうの?
0240デフォルトの名無しさん2011/11/03(木) 11:44:32.43
そういう情報はコメントで書くもんだ
0241デフォルトの名無しさん2011/11/03(木) 11:49:45.20
DangerousGetHandle()
0242デフォルトの名無しさん2011/11/03(木) 12:21:54.03
>>236
ありがとう MovableEntityにしてみる
0243デフォルトの名無しさん2011/11/03(木) 12:33:41.70
>>237
.NETだと下層のAPIをラップしたものなど、動作に関して使用者が責任を
持つ必要がある安全でない型やメンバーはUnsafeプレフィックスが付く

この例だと、UnsafeGetHandle()かUnsafeHandle()あたり
後はドキュメントに取得したハンドルの有効期限などを記述すれば良い
0244デフォルトの名無しさん2011/11/03(木) 13:05:49.72
.NETだとほんとにヤバいのはDangerous
0245デフォルトの名無しさん2011/11/03(木) 15:50:41.16
.NETにある機能の名前ってよく質問に出るね
これくらいググれないものなのかね
0246デフォルトの名無しさん2011/11/03(木) 15:52:53.23
機能から名前って、意外にググるの難しいだろ
余計なものがいっぱい混ざってるし
だから、逆引き辞典の需要があるわけだし
0247デフォルトの名無しさん2011/11/03(木) 15:59:49.02
そうかな
まあ俺が上手いだけか
0248デフォルトの名無しさん2011/11/03(木) 16:39:21.37
そうだよ

だからコツを教えてあげなよ
0249デフォルトの名無しさん2011/11/03(木) 16:42:50.06
247 さんかっこいー
0250デフォルトの名無しさん2011/11/03(木) 20:21:03.48
getAllXXX
のXXXは単数形?複数形?
0251デフォルトの名無しさん2011/11/03(木) 20:28:39.76
複数
0252デフォルトの名無しさん2011/11/03(木) 20:46:55.47
それは、中学英語の範疇ではないのか
0253デフォルトの名無しさん2011/11/03(木) 20:48:43.60
単数にしてる人多いんだよね
0254デフォルトの名無しさん2011/11/03(木) 21:01:57.14
英語的にはallの場合は可算名詞であっても単数になる場合があったと思ったけどね。
プログラムでは常に複数形にするのが無難だとは思うけど
0255デフォルトの名無しさん2011/11/03(木) 21:26:41.46
あれ、念のため確認してみたら、all+可算名詞の場合は常に複数形が正しいみたいだな。

ただ可算名詞であっても、同じ名詞が抽象名詞として使われる場合単数形になる、
ということはあるみたいで、それとごっちゃになって覚えていたのかな。
0256デフォルトの名無しさん2011/11/03(木) 22:47:02.39
複数が前提だけどひとつしか値が返らない場合はどうするんですか?
別に複数形にしなくたってわかるから1byte節約して書かないほうがマシ
0257デフォルトの名無しさん2011/11/04(金) 01:20:06.06
自分の場合、配列など複数の要素を持つ変数は複数形で名付けてる。
そのルールに従うと、今回のメソッドも複数形になる。

が、そもそも自分はAllを省いて getXXXs() で良いと思う派。
0258デフォルトの名無しさん2011/11/04(金) 01:29:43.73
ああ、確かに何か特別な理由でもない限りAllなんて付けないのが普通だな。
0259デフォルトの名無しさん2011/11/04(金) 09:00:21.45
複数形にするだけだとデータ構造が見えないから困る
0260デフォルトの名無しさん2011/11/04(金) 09:10:25.08
そういうものはコメントやドキュメントに書けばいい
0261デフォルトの名無しさん2011/11/04(金) 09:20:56.56
ドキュメント読む手間をなるべく少なくするような命名を模索してんだろ
なんでもドキュメント読めばいいで終わらせてたら名前なんていらんわ
0262デフォルトの名無しさん2011/11/04(金) 09:25:01.92
データ構造は型情報って気もするなあ。
下手するとシステムハンガリアン() と言われかねないし。
0263デフォルトの名無しさん2011/11/04(金) 09:36:47.14
〜sって「抽象的なコンテナ型である」って意味のハンガリアンみたいなもんだろ
「〜のよくわからない集合」って書くのと「〜のリスト」「〜のスタック」
と書くのどっちがましかという話
まともな神経をしてれば後者を選ぶだろう
コンテナの抽象化はパフォーマンスに直結する悪手だよ
0264デフォルトの名無しさん2011/11/04(金) 09:52:21.50
>>259
困ったことが一度としてないんだがw
0265デフォルトの名無しさん2011/11/04(金) 10:12:37.98
名前に情報を詰め込むには限度がある
「〜の集合」てのが最も重要でこれが基本
データ構造を付け足すかどうかはオプション

0266デフォルトの名無しさん2011/11/04(金) 10:16:33.14
データ構造ってリストやスタックみたいな簡単なものばかりじゃないしなぁ
0267デフォルトの名無しさん2011/11/04(金) 10:23:55.59
OOPで考えるとデータ構造はModelクラスとして扱えば十分だからなぁ。
下位の、より小さなコンテナの変数を、getterで外に出すような展開もべつに無いし。
0268デフォルトの名無しさん2011/11/04(金) 10:27:03.38
パフォーマンス気にするならなおさらドキュメント類は読むべきだな
名前だけで判断しようとしてるからコケる
0269デフォルトの名無しさん2011/11/04(金) 10:48:34.99
hogesってところまでしかわかっていない場合は
例えば検索するときにどのアルゴリズムを選択するかとかが判断しにくくなる
出社してそれほど時間が経過していなくて頭がすっきりしていて型が完全に頭に入った状況でのコーディングならhogesで問題はないが
何時間もディスプレイやキーボードと格闘して疲労の溜まったPGが5分前の記憶を覚えてるとは限らない
そのたびにhogesってどんな集合だっけとプロトタイプを確認する作業が追加される
さいしょからsortedHogeVectorと名前がついてれば3日徹夜した後であろうとも直ちにランダムアクセス可能、二分探索が有効とわかる
0270デフォルトの名無しさん2011/11/04(金) 10:52:39.18
SortedVector hoges;
でおk
0271デフォルトの名無しさん2011/11/04(金) 10:55:59.53
変数の型を忘れるほど「遠くに」書いてしまうようでは、
変数名を工夫したところで負担の小さいコードにはならない。
02722712011/11/04(金) 10:56:53.26
>>270
同意。
0273デフォルトの名無しさん2011/11/04(金) 11:27:20.40
動的型言語だったらどうするの?
0274デフォルトの名無しさん2011/11/04(金) 11:41:05.22
パフォーマンス気にして動的型付けねぇ
へぇ
0275デフォルトの名無しさん2011/11/04(金) 11:41:12.28
変数名に実装方法を現すような単語まで入れちゃうと、
やっぱ遅いから同じインターフェイスのあっちの実装にとかなったら、
変数名ぜんぶ変えなきゃいけなくなっちゃう。
0276デフォルトの名無しさん2011/11/04(金) 11:42:13.30
表す
0277デフォルトの名無しさん2011/11/04(金) 12:42:11.06
>>275
同意

>>269 なんか、パフォーマンス考えたら配列から
ツリー構造(順序付きキュー)に変わる可能性も大いにある

そうなったら、
何時間もディスプレイやキーボードと格闘して疲労の溜まったPGが
sortedHogeVector を全部変えるんだぞ

まぁ、普通そういう探索アルゴリズムとかは、
コンテナを利用する側ではなく提供する側が実装すべきだけどな
まさに実装方法に依存するんだし
0278デフォルトの名無しさん2011/11/04(金) 12:43:47.07
フルボッコわろた
0279デフォルトの名無しさん2011/11/04(金) 15:07:25.73
コンテナ代わったらメソッドも変わるから書き換え作業しなきゃならないのは同じだろ
0280デフォルトの名無しさん2011/11/04(金) 15:50:57.20
ぶっちゃけ名前が原因で問題が出るぐらいにあちこちで変数に直接触ってる時点で負けと気がつくべきだろうね
メンバ関数やインラインのヘルパ関数を適切に使っていれば変数名なんて長くても三文字(気をきかせるなら一行コメント)もあれば十分と気がつくよ
0281デフォルトの名無しさん2011/11/04(金) 15:57:52.32
さらにアホが寄ってきた
0282デフォルトの名無しさん2011/11/04(金) 16:00:40.89
いや言ってることは正しいだろ。3文字で十分はネーヨって思うけど
0283デフォルトの名無しさん2011/11/04(金) 18:00:57.78
昔のベーシックは2文字だったよな
0284デフォルトの名無しさん2011/11/04(金) 18:01:53.94
あ、識別子として区別されるのが頭2文字で、
変数名自体は何文字でも良かったか
0285デフォルトの名無しさん2011/11/04(金) 18:25:16.40
たしかスコープも配列初期化も無かったろ
0286デフォルトの名無しさん2011/11/04(金) 23:37:36.00
>>269
お前はメモ帳でコーディングしてんのか?
0287デフォルトの名無しさん2011/11/04(金) 23:42:28.20
ったりメーだろバカ
0288デフォルトの名無しさん2011/11/06(日) 11:24:21.19
λが有るとまじで変数名いらないな
0289デフォルトの名無しさん2011/11/10(木) 17:19:22.13
商品が表示されるページが店舗別か全体表示かのフラグの名前で悩んでます。
isStore にしてるんですが、何か違う気がしてます。
〜別、という場合はどんな名前が良いでしょうか?
0290デフォルトの名無しさん2011/11/10(木) 18:13:31.63
>>289
〜別だとpartとかsectionとかsegmentとか
どれもフラグっぽくないな
store_sectionとかするとcobolっぽくなるな
0291デフォルトの名無しさん2011/11/10(木) 18:46:29.75
isStoreLocalView
0292デフォルトの名無しさん2011/11/10(木) 18:49:43.52
もうcatalogDisplayModeにしとけば?
0293デフォルトの名無しさん2011/11/10(木) 19:01:35.59
データベースだと、group by store とかになりそうだし、そこからヒントに出来ないものか
0294デフォルトの名無しさん2011/11/10(木) 22:21:25.52
店舗別に表示するかどうか
SetShowsByStore(value : bool) : void { showsByStore = value; }
ShowsByStore() : bool { return showsByStore; }
0295デフォルトの名無しさん2011/11/11(金) 00:29:16.13
なにそのデタラメ
0296デフォルトの名無しさん2011/11/11(金) 08:13:53.47
至るところで細かく

if( isStore ){
    〜
}

とかやってると思うとゾワッと来た
0297デフォルトの名無しさん2011/11/11(金) 08:37:57.01
主語がねえ
0298デフォルトの名無しさん2011/11/11(金) 11:02:00.51
言語は?Java?
0299デフォルトの名無しさん2011/11/11(金) 18:25:55.53
isHogeは疑問文じゃなくて Object is hoge だって主張を何処かで見た気がするんだけど、
これってOOの場合のみなんだろうか
0300デフォルトの名無しさん2011/11/11(金) 18:29:52.42
Cでもisdigitとかあるじゃん
0301デフォルトの名無しさん2011/11/11(金) 19:37:22.88
hoge is Valid object.
↓
hoge.isValidObject();
↓
hoge.isValid();
0302デフォルトの名無しさん2011/11/12(土) 04:33:37.34
>300は>297に対し?
0303デフォルトの名無しさん2011/11/12(土) 05:33:05.62
直前のレスに対してだろ・・・
0304デフォルトの名無しさん2011/11/12(土) 07:59:33.42
>>303
is〜の形式が、疑問文かどうかという問いに一切触れてなくね?
0305デフォルトの名無しさん2011/11/12(土) 10:00:33.43
XXX.isYYYとかisYYY(XXX)は疑問文じゃないよ
「XXXはYYYである」
という命題の真偽を返り値として返すということ
だって疑問文だとnotしたときにおかしくなるだろ?
0306デフォルトの名無しさん2011/11/12(土) 11:08:47.58
>>305
でも、「bool変数やboolを返す関数は、疑問形で命名してね」
ってガイドラインはちらほらあるのが現実なんだよね(´・ω・`)

ところで、notしたときってのは !isHoge がおかしいってこと?
まさか isNotHoge じゃないよね?
0307デフォルトの名無しさん2011/11/12(土) 11:19:20.11
?が入れられない時点でくだらない話題だ
0308デフォルトの名無しさん2011/11/12(土) 11:24:06.83
isXXXは引数の値が単数のときだよね
配列とか渡してそこからXXXの場合だったらhasXXX?
0309デフォルトの名無しさん2011/11/12(土) 11:27:48.19
Isn't object valid ?
に対して
有効ならyes
そうでないならno
直感的にはyesはtrue、noはfalseだ

if(!obj.isValid()) { homuhomu(obj); }

と書いた時に、!obj.isValid()を否定疑問文(つまりIsn't obj valid ?)であるとすると
英語圏の人間はobjが有効(yes)ならhomuhomu(obj)すると認識してしまう
ところが!obj.isValid()をたんなる否定命題(Obj isn't valid.)で返り値がその真偽であるとすれば直感との齟齬は生じない
英語圏の人間でもobjが無効の場合にhomuhomu(obj)するのだと直ちに理解できる

03103002011/11/12(土) 11:30:54.14
>>306-309
ttp://www.aerith.net/design/bool-j.html
0311デフォルトの名無しさん2011/11/12(土) 11:39:02.53
>>309
ああ、そういうことか。
確かにそうだな。

で、何故HogeじゃなくHomuになってるか釈明を。
0312デフォルトの名無しさん2011/11/12(土) 12:02:42.14
一連すべてちょっと何を言っているかわからない
0313デフォルトの名無しさん2011/11/12(土) 12:23:51.20
ではお引き取りを
0314デフォルトの名無しさん2011/11/12(土) 12:34:11.30
>>313
中学英語をやり直せば理解は深まると思います
0315デフォルトの名無しさん2011/11/12(土) 12:34:42.76
>>312 でした

>>313 さんごめんなさい
0316デフォルトの名無しさん2011/11/12(土) 12:49:45.93
やり直せるとは限らん



やり直すためには既に一度はやっている必要がある
0317デフォルトの名無しさん2011/11/12(土) 13:00:27.62
それは大変失礼なことを言いました
今後慎みます
0318デフォルトの名無しさん2011/11/12(土) 13:41:17.36
>>309
一瞬なるほど、と思ったがちょっと違う気もするね。

確かにtrueにyes、falseにnoが対応していると考えるとそういう論理が成り立つけど、
trueにright、falseにwrongが対応していると考えると話は変わってくる。
0319デフォルトの名無しさん2011/11/12(土) 13:47:26.12
英語圏だとnoがnot、yesはnot以外、以上の意味はないだろ・・
0320デフォルトの名無しさん2011/11/12(土) 13:53:49.73
He is not a dirty old man, is he ?
You are wrong.
Yes, he is ( a dirty old man).
0321デフォルトの名無しさん2011/11/12(土) 14:11:50.52
if文は普通にブール代数で考えるけど.
そんな文学的な解釈をしているやつがいるのか.
0322デフォルトの名無しさん2011/11/12(土) 14:19:47.96
>>309
センスないやつがよくこういう余計な事考えるんだな
0323デフォルトの名無しさん2011/11/12(土) 14:24:08.44
>>321
既存の知識だけで納得しようとして陥る罠だな
0324デフォルトの名無しさん2011/11/12(土) 17:17:44.22
まあこのへんは英語できない子が足切りされるポイントだからわからない人がいても不思議ではないよ
まさか!?って思うけど本気でわからない子いるからね

0325デフォルトの名無しさん2011/11/12(土) 17:55:22.34
ネイティブがどう感じるかまでは、なかなか分からんよなあ…
0326デフォルトの名無しさん2011/11/12(土) 20:44:04.42
いや、言語仕様的にブール代数なわけだから
NOT(obj.isValid())
ってだけだろ
プログラミングを知らない英語圏の人ならどう読むか分からないが
知らない時点でどうせ読めないのでどうでもいいだろ
アホカ
0327デフォルトの名無しさん2011/11/12(土) 20:47:12.12
結論
命名は適当でよい
ドキュメントを読まないバカはいないし
ドキュメントを読めば名前などオマケにすぎないからである
0328デフォルトの名無しさん2011/11/12(土) 21:46:45.32
名前に悩んで生産性減らすバカは死ね
0329デフォルトの名無しさん2011/11/12(土) 23:42:52.06
悩むことがなく適当(適切という意味で)な命名ができるようになれれば、それがベスト
0330デフォルトの名無しさん2011/11/12(土) 23:58:09.41
開発してる時は、自分(チーム)の中だけで最も分かりやすい名前を付けとけば良い

開発が終わったら「すぐに」、後の人間や英語圏の人間にも分かるように、
メンテナンス担当の人間が全ての名前を適切に置換しておく
ついでに、変更しまくった仕様もちゃんとドキュメントにまとめておく
0331デフォルトの名無しさん2011/11/13(日) 00:02:27.98
コードの錬金術師は日常会話に擬態した暗号でコードを書くのでまるで自然言語の文書を読んでいるように感じる
0332デフォルトの名無しさん2011/11/13(日) 00:06:59.43
>>331
そこまでのコードはまだ見たことがないなぁ

例えばどんなの?
0333デフォルトの名無しさん2011/11/13(日) 08:16:47.43
日本語プログラミング言語「なでしこ」のことだろ
0334デフォルトの名無しさん2011/11/13(日) 12:04:25.90
>>333
それは違うだろ
「コードの錬金術師」や「日常会話に擬態した暗号」との絡みが全くない

一般的に錬金術師は金でないものを金にする人のことなんだから、
もともと自然言語の文書とはほど遠い文法やキーワードを持つ言語を使って、
自然言語の文書であるかのようなコードを書く人を「コードの錬金術師」と喩えているのだろう

それがどの言語のどのコードのことか、誰のことを言っているのか全く分からん
0335デフォルトの名無しさん2011/11/13(日) 12:33:18.01
>コードの錬金術師
>一般的に錬金術師は金でないものを金にする人のことなんだから、

>331の造語か、英語の和訳なのかで全く意味が変わってくるなw
0336デフォルトの名無しさん2011/11/13(日) 13:00:23.08
単にコードの可読性は書き手によって大きく違うという、当たり前の事実を
言ってるだけだと思うよw

ノストラダムスの解読じゃあるまいし、錬金術師という言葉の本来の意味なんか
ほじくり返しても意味ないでしょw

彦麻呂のフレーズみたいなもんで、そこまでの含意なんかないと思うよ。
単にその能力の非凡さ(可読的なコードを書ける人は意外と少ない)を表現してるだけでしょ。
0337デフォルトの名無しさん2011/11/13(日) 13:41:22.82
しかし、「まるで自然言語の文書を読んでいるように」というのは、
いくら何でも言い過ぎではないか?

もしそんなコードが書けるのなら、
そのテクニックや考え方などを是非教えてほしい
0338デフォルトの名無しさん2011/11/13(日) 13:47:06.66
外人的な過剰な表現だろ
0339デフォルトの名無しさん2011/11/13(日) 13:54:19.19
ただ>>334がアスペなだけだろ
■ このスレッドは過去ログ倉庫に格納されています