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

■ このスレッドは過去ログ倉庫に格納されています
1ネミ子
垢版 |
2017/05/07(日) 18:01:52.03ID:akuyRduv
クラス名、変数名のつけ方に悩んだら書き込むスレです。

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part27
http://echo.2ch.net/test/read.cgi/tech/1476572490/
2018/08/14(火) 20:23:17.89ID:I6V3xwhV
>>263
create factory predicate

○なにかをつくるなにかはやはりfactoryだろう。FactoryパターンとかFactoryメソッドとかいうしね。
○個人的に、Action/Funcには総称してpredicateと名付けることにしている。
2018/08/14(火) 20:43:35.35ID:45jA2HfC
>>265
それでいいと思うならスレの趣旨にそったレスをしろ馬鹿者
2018/08/14(火) 20:44:34.23ID:45jA2HfC
>>266
いやpredicateは全然違うからw
2018/08/14(火) 20:47:13.97ID:/EKv3YIo
昔、関数ポを返すのを書いたときは
GetFooFunctionだったかGetBarMethodだったか、そんな感じにしたなあ
今考えるとちょっと野暮ったい
2018/08/14(火) 20:57:39.85ID:45jA2HfC
仮に運よく>>264みたいに簡潔なメソッド名が使えるとしても、
var creator = SqlConnectionHelper.GetCreator("Hage");
こう書けるだけ。

これが、
Func<SqlConnection > creator = () => CreateSqlConnection("debu");

より簡潔でより読みやすいと言えるか、かなり微妙だと思うけどね。
むしろ後者の方が可読的と思うけどなあ
2018/08/14(火) 21:02:43.21ID:kXwDSKTz
>>264
提案ありがとう。
都度都度ラムダで作れるのはそうだけどConnectionは1つの例で、(disposeの有無に関わらず)他にもラップしたいのはいくつかあるんですよ。
今は「インスタンスを作るメソッド」を作る(返す)メソッドってテーマで色々やってるんで。

他皆様もありがとうございます。
2018/08/15(水) 01:42:50.33ID:tWimvAnq
>>268
どう違うのか言え。馬鹿者。
2018/08/15(水) 02:21:33.52ID:2FmXo3U+
殺伐としたスレにPredicateが!

public delegate string IntToStringAction(int i);
2018/08/16(木) 17:17:21.85ID:FfzoHzI3
predicateって1つ以上の引数を取ってbool型を返す関数(関数オブジェクト)じゃねーの?
関数名が断定する名称でさ、例えば、Equal(A, B) → bool
2018/08/16(木) 23:05:16.48ID:p8ZUZr7l
それであってるよ
https://msdn.microsoft.com/ja-jp/library/bfcke1bz(v=vs.110).aspx
専ら条件式を記述するときに使う代物で、一般に「何かを受け取って真か偽か判定する」関数をpredicateと呼ぶ

>>266みたいに何でもかんでもpredicateと名付けるのは論外
覚えたての言葉を使いたがるガキかと
2018/08/17(金) 05:57:44.08ID:kUuVSKQh
>>273
案をありがとう。
これだと、C#にすでにはActionって名前のデリゲートがあるから、そっちに意味を取られないかね?
これは各々の認識の話になるけれども。
だったらサフィックスをFuncにしろよって話だけど、
なんかね、、、カッコ悪いしね
2018/08/17(金) 07:26:31.99ID:V/i+u2Gb
>>276
C#にはPredicateというさらに別の意味のデリゲートもあって、Predicateと言いつつActionという名前が付いたFuncですよね!いい加減にしてください!
と言われたいだけのネタだったんだ…
2018/08/17(金) 07:28:20.40ID:V/i+u2Gb
お詫びに案を挙げますね

//取得
Func<SqlConnection> createSqlConnection = x.GetCreatingSqlConnection("debu");

// 実行
createSqlConnection();
2018/08/17(金) 13:08:13.08ID:7gyaHV45
>>274
C#とかJavaでそういうデリケート/インターフェイスが定義されてるとしても、「predicate」の本来の意味は「述部」だから。

C#の場合は、comparerとかの名前を先にインターフェイスとして使ってしまってるから、ヤケクソ的にpredicateを使ったのでは?w
単体では意味が広すぎると思う。
2018/08/17(金) 13:10:30.52ID:7gyaHV45
>>275
たまたま知ってるひとつの意味にこだわるとか、まさにバカガキ。
2018/08/17(金) 13:20:48.82ID:rrElr8rg
classの本来の意味が「部類・種類」だからと言ってenumに付けてまわったら紛らわしいことこの上ないじゃん
JavaやC#といったメジャーな言語で定義されてるもんを勝手に使うのは良くない
しかも今回はActionやFuncが登場する言語での話だし

たまたま知ってたじゃなくて>>280が無知なだけ
2018/08/17(金) 13:33:11.89ID:fY7CNqGl
>>279
少なくともプログラミングの世界のpredicateの普通の用法はこれw
https://en.wikipedia.org/wiki/Predicate_(mathematical_logic)

仮に君の言う「述部」とやらの意味だったとして、
そんな意味の用語がプログラミングの世界で必要とされる余地が果たして存在するかねw
2018/08/17(金) 13:37:28.17ID:E8kXAg+Z
>>279
命名ってのは英和辞書で引いてみて意味があってりゃいいってもんじゃねえだろ。
例えば「モノを作るなにか」でもcreaterやfactory、maker、manufacturerなどなど似たような単語はいっぱいあるが、その中でも最も適切な単語を選ぶのが命名だ。

「述語=predicate」と言うたまたま知ってた1つの単語に固執してるのは君だろう
初めて英単語を覚えた中学生じゃあるまいし
2018/08/17(金) 13:54:48.34ID:FrC0luOi
関数名より仮引数なイメージあるわ
2018/08/17(金) 14:58:06.31ID:KaaDwp63
まあ業界用語はテキトーに決められてる奴もあるから元の意味ガーとか言ってもしょうがないわな
ネットワーク用語のpromiscuousなんて元の意味は人前でつかうのを憚られるし w
2018/08/17(金) 16:19:33.11ID:7gyaHV45
>>281
言語要素といっしょくたにする意味がわからん。
名前空間のどこかにある名前とかぶってはイカンとか現実的じゃないし。

>>282
それは「プログラミングの世界」じゃなくて、数理論理学や一階述語論理における用法。

>>283
じゃあ「述語」に相当する英語は?
2018/08/17(金) 16:20:20.21ID:7gyaHV45
>>285
abortとかね。w
2018/08/17(金) 16:25:58.31ID:FrC0luOi
>>286
>言語要素といっしょくたにする意味がわからん。

言語要素よりは、そりゃ回避優先度は高いだろうが
次元としては同じじゃないかなあ
2018/08/17(金) 16:27:08.26ID:FrC0luOi
すまん、>288の日本語がおかしい

誤:回避優先度は高いだろうが
正:回避優先度は低いだろうが
2018/08/17(金) 16:37:36.53ID:E8kXAg+Z
>>286
一連の処理の総称を言いたいならmethodやfuncと名付けるのが一般的だわな
ガキンチョはちょっと周りと違う言葉を使おうとしてトンチンカンなチョイスをするから困る
2018/08/17(金) 16:44:51.48ID:5lcaj0TK
そもそも質問者がC#を使ってるのに、そのC#で多用するPredicateを別の意味で再定義しようとしてる時点でアホやろ
そんなアホ新人がいたら試用期間で切るわ
2018/08/17(金) 17:12:26.42ID:fY7CNqGl
>>286
ここまで見苦しい奴も珍しいなw
2018/08/17(金) 18:35:11.36ID:V/i+u2Gb
predicateの名詞用法のうち最も代表的なものは「述語」だから広義に用いても間違いという訳ではないんだけど、英英辞典を引くと動詞の「断定する」や「命題の述部」というニュアンスも色濃く現れてきて無視できない
https://www.dictionary.com/browse/predicate
語源としてもその辺から由来し、広義の述語へと転じた経緯がある模様
特にプログラミングや論理学の分野でどう用いられているかを見れば答えは自ずと決まる
2018/08/17(金) 19:08:31.34ID:nnyWdGJK
C#(特にLINQ)を触り始めたばかりの初心者だとPredicateとラムダ式を混同してることが多いからその類じゃないかね?
Predicateを引数にとる各種メソッド群も、一定の規則を守ったラムダ式ならコンパイラが自動的に解釈・変換してくれるもんだから勘違いしがち
295デフォルトの名無しさん
垢版 |
2018/08/17(金) 19:30:14.24ID:zD2h2oDf
>>294
何を言いたいのかよくわからん
この際、おまえがしてた、若しくは現在進行形でしている勘違いを
洗いざらい吐き出しちまえよ
2018/08/17(金) 19:33:30.25ID:nnyWdGJK
>>295
「FuncにもActionにも何でもかんでもPredicateと名付けてしまうのはこれら全てがラムダ式と同一のものだと勘違いしてるんじゃないの?」ってこと
俺じゃなくて今春の新米PGにいたんだわ
297デフォルトの名無しさん
垢版 |
2018/08/17(金) 20:02:32.47ID:zD2h2oDf
>>296
ラムダ式と同一のものというのがよく分からんが
ラムダ式ならLambdaでええやん
それがなぜPredicateになるんや?
2018/08/17(金) 20:39:16.72ID:nnyWdGJK
>>297
同じ意味をもつ別名ぐらいに考えてたらしい
そこで謎の選択をした理由はそんなの本人にしかわからんがな
カッコいいとでも思ったんじゃね?
299デフォルトの名無しさん
垢版 |
2018/08/17(金) 21:36:39.65ID:zD2h2oDf
なんや結局謎のままやんけw
2018/08/17(金) 22:29:26.14ID:V/i+u2Gb
この人はPredicateとDelegateを混同してるのではないだろうか
2018/08/17(金) 23:06:48.61ID:hTsqlHEP
>>266が発狂してスレ伸ばしてるのこれ?

>>300
かもねえ
2018/08/17(金) 23:27:59.94ID:QIXEpzAH
>>300
最後の3文字しかあってないじゃないかwww
そんなバカがいるわけが…いや、そんな、まさか、ねえ?
2018/08/17(金) 23:33:12.06ID:7gyaHV45
>>300
いいだしっぺ本人だが、混同はしていないつもり。
C#ではdelegateは言語機能だけど、あくまでpredicateは一般名詞。数理論理なんかを記述してるわけではないし。
lambdaは抽象的な機能とか無名関数とかをあらわす印象。

>>293
英語は同じ単語を別の用途に使い回すことはよくあるからね。
あんまり気にしない。w
2018/08/17(金) 23:36:41.12ID:QIXEpzAH
まーた恥の上塗りが始まった
2018/08/17(金) 23:48:25.74ID:w9bXgbFB
>>303
このスレでも何度も書いたことだが、
英語という言語は日本語のように新しい概念に対して語彙を増やして対応する言語じゃない。

同じ言葉を文脈によってまったく別の意味に使い分ける傾向が強い言語だ。

だから、
>あくまでpredicateは一般名詞
これナンセンス。

だから何度も言ってるだろう。
プログラミングの分野では(数学と同じく)boolで評価する関数のことをpredicateを言うの。

いい加減恥を知った方がいいよ。
2018/08/17(金) 23:51:44.07ID:QIXEpzAH
しかし夏だねえ
2018/08/17(金) 23:53:05.85ID:9uI3JlhI
>>303
言語機能か一般名詞かの違いしかないと思ってるんならそれは混同してるってことだよ
2018/08/18(土) 00:08:59.00ID:LOkpLZfD
だいたいコードの中の普通の日本語でいう述語なんか出てこないだろうってw

お前はコードの中に、

(空は)青い
(地球ま)回る

とか書くのかとw
ダイクストラ先生の時代からコードってのはデータと手続きで出来てるんだよw
それは宣言型の言語だろうが同じこと
309デフォルトの名無しさん
垢版 |
2018/08/18(土) 00:13:12.08ID:QJ6qXFdU
なんやまたどえらいアホが現れたなあw結構結構wwww
2018/08/18(土) 00:44:17.20ID:N7wT67Om
>>303
キミ、「述語」って言葉の意味すらよく分かってないんじゃない?
2018/08/18(土) 01:00:41.41ID:MgtGkUH1
混同というのはID:nnyWdGJKに対して言ったんだけどな
余計な飛び火をさせてしまった
2018/08/18(土) 01:06:13.96ID:MgtGkUH1
>>305
英語にも外来語は多いよね
新しい概念に対して語彙を増やさないというのが何を指してるのか詳しく知りたい
漢字がない分、同音異義語が多いという話なら分かる
2018/08/18(土) 01:10:28.56ID:MgtGkUH1
>>308
if (sky is blue) earth.evolute()
プログラミングで述語は書くと思うよ
2018/08/18(土) 01:13:07.29ID:CxOhf3ss
あらゆるメソッド名、クラス名にSentenceと名付けてしまうかのような暴挙
315デフォルトの名無しさん
垢版 |
2018/08/18(土) 01:14:41.34ID:QJ6qXFdU
あらゆるメソッド名、クラス名にSentenceと名付けたらコンパイル通らんやんwwww
アホしかおらんのかここはwwww
2018/08/18(土) 01:16:34.23ID:tAHy4SpI
その理屈で言えば>>266もコンパイル通らんやろ…
317デフォルトの名無しさん
垢版 |
2018/08/18(土) 01:18:38.83ID:QJ6qXFdU
>>316
スコープ内で一意なら普通にコンパイル通るわw
おまえプログラミングしたことあるんかwwwww
2018/08/18(土) 01:25:33.36ID:tAHy4SpI
>>317
その理屈で言えばSentenceも通るやろ

マジレスするとプレフィックスないしサフィックスの話やろ
319デフォルトの名無しさん
垢版 |
2018/08/18(土) 01:27:40.92ID:QJ6qXFdU
>>318
どの理屈やねんwwww
言い訳すんなアホw
2018/08/18(土) 01:28:57.12ID:N7wT67Om
つーか何度も言ってるが、C#で多用されるLINQの引数型としてPredicateはあちらこちらで使われるんだから
それに別の意味を持たせて再定義してる時点で脳味噌スッカスカだろと
2018/08/18(土) 01:30:10.58ID:tAHy4SpI
>>319
スコープ内でSentenceが一意ならコンパイルが通ることも知らんのかいな(呆れ)
プログラミングしたことあるか?
2018/08/18(土) 01:44:39.95ID:X2Z3Uu8P
delegate(委任、委譲)とpredicate(断定)の区別すら出来ない子がいるとは…一般名詞とか言語仕様以前の問題だろう
中学生ぐらいで英語力が止まってるのか?
2018/08/18(土) 01:56:59.73ID:LOkpLZfD
>>312
何を指すも英語はそんな文脈に依存して意味が変わる単語だらけ
atomic, bit, function

日本語は英語より文脈に依存する表現を好まない傾向が強い

分割不可能性みたいに明示的な漢語を作り出すか、ビットのようにカタカナ表記にするか
(日本語でビットといえば普通文脈に関係なくそのビットしかない)関数のように音訳する
2018/08/18(土) 02:12:07.58ID:LOkpLZfD
電動ドライバーのビットはあるかw
でも日本語が同じ言葉より語彙を増やすことを好む言語なのはちょっと考えれば
大方同意するよね

スレ違いなのでこれで終わりで
2018/08/18(土) 02:14:44.60ID:LOkpLZfD
× 同じ言葉より語彙を増やすことを好む
〇 同じ言葉を使いまわすより語彙を増やすことを好む傾向が強い
326デフォルトの名無しさん
垢版 |
2018/08/18(土) 02:58:17.88ID:hnx9JO2D
valueをgetするメソッド名に悩んでるのですが、一般的にはどんな名前になるんですかね?
327デフォルトの名無しさん
垢版 |
2018/08/18(土) 02:59:09.12ID:hnx9JO2D
valueGetterでいいのかな?
2018/08/18(土) 04:05:49.01ID:CDhAkOpw
>>320
いうほど使わないが。
Func<T,bool>としか書かないからな。
2018/08/18(土) 05:31:12.42ID:g/WMhA69
>>326, >>327
変数のようにその値が意味する名称にする(例えば、string.length)、あるいはgetValueのように動詞始まりで書く
個人的には、状態を取得する関数は他の関数(手続き、メソッド)と完全に区別しているから、名詞にするよ
状態を表すbool型を返す場合は、trueを想定した命題にする特殊なルールがある(例えば、iterator.hasNext)

ValueGetterって名称の場合、関数は動詞始まりが一般的だから、(get)ValueGetterのように省略していると解釈され
意地悪を言っちゃうと、Valueを取得するGetterオブジェクトを返すって意味に取られかねない
2018/08/18(土) 06:39:02.57ID:0oOTxqO8
>329は解答として満点に近いと思うのでこれに賛成しておこう
2018/08/18(土) 07:44:29.19ID:MgtGkUH1
>>324
ありがとう把握した
個人的にはやまと言葉は1単語の広がりがとても広く
漢語はその豊富な表意文字と音素の恩恵から狭めって認識だわ
それと外来語学習者のバイアスがあって
学習者はコアとなる概念をそのまま理解できずに
母語の単語に置き換えて把握するから
例えば英語話者は日本語の核という言葉が
atomic, core, nucleus, kernelの4つに当てはまることを見て
使い回しの多い言語デスネーと感じる傾向があると思う
スレチなんで俺もこのくらいにしておきます
2018/08/18(土) 07:56:57.22ID:MgtGkUH1
>>326
言語とクラス名にも依るけど、その感じだとJavaかな
JavaならThreadLocalやOptionalのような変数のコンテナクラスにはget()というメソッド名が与えられてるから、それに倣うと自然な感じになると思う
2018/08/18(土) 08:21:05.22ID:0oOTxqO8
20年前ならともかく、
getだけでJava前提にするのは厳しいかなと思いますがw
2018/08/18(土) 12:28:24.34ID:MgtGkUH1
モダンな言語は大概プロパティがサポートされているから、getterメソッドを使う慣習があって、小文字で書くそこそこシェアのある言語ってことでJavaかなーと思ったんだけどな
Rubyも候補に入るのかな
2018/08/18(土) 12:46:29.75ID:uDYXPxxS
>>328
コンパイラが暗黙的にキャストしてくれるからって、それに頼り切って本来の引数型を見てみぬふりしちゃいかんだろう
2018/08/18(土) 13:03:31.24ID:CDhAkOpw
>>335
その本来がFuncだが。
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.where
2018/08/18(土) 13:33:47.43ID:0oOTxqO8
>>334
プロパティあっても、アクセサ的なメソッドを作ることは珍しくないかなと
338デフォルトの名無しさん
垢版 |
2018/08/18(土) 21:18:57.24ID:hnx9JO2D
ルッビーアックバール!
2018/08/19(日) 00:30:14.49ID:EuNb7t2q
>>334
C#でもありえーるでしょ。
リフレクション前提とか。
プロパティはメソッドと別扱いだから。
2018/08/19(日) 07:29:43.11ID:Owr7PcVA
>>339
小文字でと書いたのは、C#のようにメソッド名先頭を大文字とするのが主流の言語は
推測の第一候補にはならなかったっていう意味ね

もし>>332でJavaと推測・仮定したことがナンセンスだというツッコミを入れるなら
他の言語である可能性がゼロでないことを示しても論拠として弱い
Javaではない蓋然性の方が高いだろという主旨でないと
2018/08/19(日) 12:34:21.72ID:tEQmuEnO
1段落目だけでいいです
2018/09/18(火) 13:04:45.53ID:ub4FiyyP
今週のぱいじょ132話
https://paiza.jp/paijo

『大事な変数名』だってよ
343デフォルトの名無しさん
垢版 |
2018/09/19(水) 10:54:47.56ID:B2R8NLhN
変数名は大事だな
2018/09/19(水) 14:27:36.07ID:MoqoniL9
よーしパパ、ハンガリアンでバリバリコード書いちゃうぞ!
2018/09/20(木) 20:05:21.32ID:9QTub7MD
ハンガリアンは大事だな
2018/09/20(木) 20:50:07.90ID:l42nckct
変数名はだいじだな
ハンガリアン(に汚染されていたことの発覚)はおおごとだな
347デフォルトの名無しさん
垢版 |
2018/09/20(木) 20:51:25.89ID:DBWB48iV
カッコさんもこれほど存在感のない使われ方するとは思ってもみなかったやろなw
348デフォルトの名無しさん
垢版 |
2018/09/21(金) 22:58:36.14ID:zRb9Ordj
ハンガリアン悪くない
悪いのは型名をプレフィクスに使う事
349デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:17:13.00ID:MqKbhYRD
型名が何フィクサーやったらええんや?
2018/09/21(金) 23:30:33.48ID:0BdmXKlD
NYのフィクサーならカッコいいと思います
2018/09/21(金) 23:40:14.17ID:O7oYqnzQ
ハンガリアン悪くない

private変数の
m_
とか推奨
2018/09/22(土) 00:07:18.77ID:Elm8N2Dm
納期

DEAD_LINE

死ぬんか
2018/09/22(土) 01:02:58.20ID:mXZbGj0b
>>352
何が言いたいのかよく分からない
英語にケチつけてるなら、それ相応の板へどうぞとしか
2018/09/22(土) 09:01:46.06ID:4dEHSzz5
訳し方ひとつじゃないだろ

プログラマーのメンタルに悪い
2018/09/22(土) 09:41:14.17ID:i8+E3FCQ
こうですね、理解ります

DEAD_LINE
死の線
モノの死にやすい部分
直死の魔眼により視ることができ、切られたものは死ぬ
2018/09/22(土) 10:17:47.73ID:mXZbGj0b
>>354
一般的な日本人がそのまま読んでも意味が通じる
実に最適な選択だろ
2018/09/22(土) 11:07:39.01ID:4dEHSzz5
納期=死線

ちがう絶対ちがう遅れたっていいんだ誰も死なないんだ
2018/09/22(土) 11:23:11.52ID:TIOG2Ben
due date使えよ
2018/09/22(土) 11:26:12.67ID:i8+E3FCQ
最適解について考えるなら俺も due date を推したい
時刻もあり得る deadline と違って日付であることが明確
deadline は守るべき締め切りというニュアンスが乗りすぎてフラットでない感もある
ただアッパーケースで書いてるし、ザ・期日というべき値ならDUE_DATEよりDEAD_LINEのニュアンスが相応しい文脈なのかもと思ったり
due date という英語は難しいから避けた方がいい、なんて環境ならレベルが低すぎるからとっととおさらばしたい
2018/09/22(土) 11:33:19.06ID:i8+E3FCQ
いや納期だったか
じゃあ delivery date だな
2018/09/22(土) 12:34:11.88ID:TIOG2Ben
delivery dateだと、その日だけって感じにならん?
due dateならそれより前でも可ってわかるけど
2018/09/22(土) 13:49:40.09ID:kFAOP0FY
英辞郎で「納期」で検索した感じ、ニュアンス的には納品側の用語としてはdeadline、
発注側の用語としてはdue dateが適切のように感じるね

個人的にはそこまでこだわる必要はなく、普通にdeadlineでよいと思う
2018/09/22(土) 13:51:25.09ID:4dEHSzz5
俺のメンタルに悪いっつってんだろgじゃkじゃあjsふぁ
2018/09/22(土) 14:24:37.52ID:mXZbGj0b
日本語には「〜です」って言葉をよく使うんだけど
生きづらそうだね
2018/09/22(土) 15:15:34.07ID:4dEHSzz5
それは直接的な意味ではないし回避するために毎回文章を考えるのが面倒なので仕方ないdeath
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況