クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
クラス名、変数名のつけ方に悩んだら書き込むスレです。
命名規則や設計の善し悪しについて議論するのは基本的に禁止。
前スレ
クラス名・変数名に迷ったら書き込むスレ。Part27
http://echo.2ch.net/test/read.cgi/tech/1476572490/ >>254
草
スレタイを『クラス名・変数名「とか」に迷ったら〜』ってすればええんちゃう このスレの前身スレである「ネーミング倶楽部」の復活来る!? 昔は、板名を見ずに検索で飛んできて
頓珍漢な質問する人って結構いたなあと思いだした メソッド名について相談です。
c#ですが、
public static Func<SqlConnection> CreatSqlConnection{xxxx}(string connectionString)
みたいな、「インスタンスを作るメソッド」を作るメソッドの場合、{xxxx}には何をいれたら良いでしょうか?
また、もっとより良い名前があれば教えてください。 素直にこうすれば無理名前考えずに済むんじゃないのかなと...
public static SqlConnection CreateSqlConnection(string connectionString){ ... }
....
Func<SqlConnection > creator = CreateSqlConnection; ごめんこうか...
Func<SqlConnection > creator = () => CreateSqlConnection("debu"); getSqlConnectionSupplier
頭と末尾の動詞はニュアンスに応じてお好みで
変数名をフルスペルで書いたときこうなる感じ
Func<SqlConnection> sqlConnectionSupplier = getSqlConnectionSupplier("debu");
関数型の変数についての良い命名ガイドラインって無いのかな
SupplierはJava8から拝借した >>260 261
ありがとうございます。
例に出したものに限らず、
「インスタンスを作るメソッド」を作る(返す)メソッド郡を作っているので、何かしら定型的なものがあればと思っています。
>>262
ありがとうございます。
creator,maker等は思い付いたのですが、supplierってのもあるのですね。
勉強になります。 >>263
「Func<T>を返すメソッド」自体が抽象的で分かりづらい。
どうしてもGetFuncToCreateSqlConnectionみたいに長くなると思う
例外は
static class SqlConnectionHelper
{
public static Func<SqlConnection> GetCreator(string connectionString) { ... }
...
}
みたいにメソッドが置かれた文脈が十分に明示的な場合だけ
しつこくて申し訳ないけど、そもそも本当に「Func<T>を返すメソッド」に
固執する必要があるのか再考した方が俺はいいんじゃないかと思うけどなあ。
ラムダ式で簡単にTを返すメソッドからFunc<T>を作れるんだから >>264
抽象的でわかりにくいとおまえが思うのは、おまえが質問者の状況を想像できてないから。
質問者がいいと言っているのだから、それでいいのだ。 >>263
create factory predicate
○なにかをつくるなにかはやはりfactoryだろう。FactoryパターンとかFactoryメソッドとかいうしね。
○個人的に、Action/Funcには総称してpredicateと名付けることにしている。 >>265
それでいいと思うならスレの趣旨にそったレスをしろ馬鹿者 >>266
いやpredicateは全然違うからw 昔、関数ポを返すのを書いたときは
GetFooFunctionだったかGetBarMethodだったか、そんな感じにしたなあ
今考えるとちょっと野暮ったい 仮に運よく>>264みたいに簡潔なメソッド名が使えるとしても、
var creator = SqlConnectionHelper.GetCreator("Hage");
こう書けるだけ。
これが、
Func<SqlConnection > creator = () => CreateSqlConnection("debu");
より簡潔でより読みやすいと言えるか、かなり微妙だと思うけどね。
むしろ後者の方が可読的と思うけどなあ >>264
提案ありがとう。
都度都度ラムダで作れるのはそうだけどConnectionは1つの例で、(disposeの有無に関わらず)他にもラップしたいのはいくつかあるんですよ。
今は「インスタンスを作るメソッド」を作る(返す)メソッドってテーマで色々やってるんで。
他皆様もありがとうございます。 殺伐としたスレにPredicateが!
public delegate string IntToStringAction(int i); predicateって1つ以上の引数を取ってbool型を返す関数(関数オブジェクト)じゃねーの?
関数名が断定する名称でさ、例えば、Equal(A, B) → bool それであってるよ
https://msdn.microsoft.com/ja-jp/library/bfcke1bz(v=vs.110).aspx
専ら条件式を記述するときに使う代物で、一般に「何かを受け取って真か偽か判定する」関数をpredicateと呼ぶ
>>266みたいに何でもかんでもpredicateと名付けるのは論外
覚えたての言葉を使いたがるガキかと >>273
案をありがとう。
これだと、C#にすでにはActionって名前のデリゲートがあるから、そっちに意味を取られないかね?
これは各々の認識の話になるけれども。
だったらサフィックスをFuncにしろよって話だけど、
なんかね、、、カッコ悪いしね >>276
C#にはPredicateというさらに別の意味のデリゲートもあって、Predicateと言いつつActionという名前が付いたFuncですよね!いい加減にしてください!
と言われたいだけのネタだったんだ… お詫びに案を挙げますね
//取得
Func<SqlConnection> createSqlConnection = x.GetCreatingSqlConnection("debu");
// 実行
createSqlConnection(); >>274
C#とかJavaでそういうデリケート/インターフェイスが定義されてるとしても、「predicate」の本来の意味は「述部」だから。
C#の場合は、comparerとかの名前を先にインターフェイスとして使ってしまってるから、ヤケクソ的にpredicateを使ったのでは?w
単体では意味が広すぎると思う。 >>275
たまたま知ってるひとつの意味にこだわるとか、まさにバカガキ。 classの本来の意味が「部類・種類」だからと言ってenumに付けてまわったら紛らわしいことこの上ないじゃん
JavaやC#といったメジャーな言語で定義されてるもんを勝手に使うのは良くない
しかも今回はActionやFuncが登場する言語での話だし
たまたま知ってたじゃなくて>>280が無知なだけ >>279
少なくともプログラミングの世界のpredicateの普通の用法はこれw
https://en.wikipedia.org/wiki/Predicate_(mathematical_logic)
仮に君の言う「述部」とやらの意味だったとして、
そんな意味の用語がプログラミングの世界で必要とされる余地が果たして存在するかねw >>279
命名ってのは英和辞書で引いてみて意味があってりゃいいってもんじゃねえだろ。
例えば「モノを作るなにか」でもcreaterやfactory、maker、manufacturerなどなど似たような単語はいっぱいあるが、その中でも最も適切な単語を選ぶのが命名だ。
「述語=predicate」と言うたまたま知ってた1つの単語に固執してるのは君だろう
初めて英単語を覚えた中学生じゃあるまいし まあ業界用語はテキトーに決められてる奴もあるから元の意味ガーとか言ってもしょうがないわな
ネットワーク用語のpromiscuousなんて元の意味は人前でつかうのを憚られるし w >>281
言語要素といっしょくたにする意味がわからん。
名前空間のどこかにある名前とかぶってはイカンとか現実的じゃないし。
>>282
それは「プログラミングの世界」じゃなくて、数理論理学や一階述語論理における用法。
>>283
じゃあ「述語」に相当する英語は? >>286
>言語要素といっしょくたにする意味がわからん。
言語要素よりは、そりゃ回避優先度は高いだろうが
次元としては同じじゃないかなあ すまん、>288の日本語がおかしい
誤:回避優先度は高いだろうが
正:回避優先度は低いだろうが >>286
一連の処理の総称を言いたいならmethodやfuncと名付けるのが一般的だわな
ガキンチョはちょっと周りと違う言葉を使おうとしてトンチンカンなチョイスをするから困る そもそも質問者がC#を使ってるのに、そのC#で多用するPredicateを別の意味で再定義しようとしてる時点でアホやろ
そんなアホ新人がいたら試用期間で切るわ predicateの名詞用法のうち最も代表的なものは「述語」だから広義に用いても間違いという訳ではないんだけど、英英辞典を引くと動詞の「断定する」や「命題の述部」というニュアンスも色濃く現れてきて無視できない
https://www.dictionary.com/browse/predicate
語源としてもその辺から由来し、広義の述語へと転じた経緯がある模様
特にプログラミングや論理学の分野でどう用いられているかを見れば答えは自ずと決まる C#(特にLINQ)を触り始めたばかりの初心者だとPredicateとラムダ式を混同してることが多いからその類じゃないかね?
Predicateを引数にとる各種メソッド群も、一定の規則を守ったラムダ式ならコンパイラが自動的に解釈・変換してくれるもんだから勘違いしがち >>294
何を言いたいのかよくわからん
この際、おまえがしてた、若しくは現在進行形でしている勘違いを
洗いざらい吐き出しちまえよ >>295
「FuncにもActionにも何でもかんでもPredicateと名付けてしまうのはこれら全てがラムダ式と同一のものだと勘違いしてるんじゃないの?」ってこと
俺じゃなくて今春の新米PGにいたんだわ >>296
ラムダ式と同一のものというのがよく分からんが
ラムダ式ならLambdaでええやん
それがなぜPredicateになるんや? >>297
同じ意味をもつ別名ぐらいに考えてたらしい
そこで謎の選択をした理由はそんなの本人にしかわからんがな
カッコいいとでも思ったんじゃね? この人はPredicateとDelegateを混同してるのではないだろうか >>266が発狂してスレ伸ばしてるのこれ?
>>300
かもねえ >>300
最後の3文字しかあってないじゃないかwww
そんなバカがいるわけが…いや、そんな、まさか、ねえ? >>300
いいだしっぺ本人だが、混同はしていないつもり。
C#ではdelegateは言語機能だけど、あくまでpredicateは一般名詞。数理論理なんかを記述してるわけではないし。
lambdaは抽象的な機能とか無名関数とかをあらわす印象。
>>293
英語は同じ単語を別の用途に使い回すことはよくあるからね。
あんまり気にしない。w >>303
このスレでも何度も書いたことだが、
英語という言語は日本語のように新しい概念に対して語彙を増やして対応する言語じゃない。
同じ言葉を文脈によってまったく別の意味に使い分ける傾向が強い言語だ。
だから、
>あくまでpredicateは一般名詞
これナンセンス。
だから何度も言ってるだろう。
プログラミングの分野では(数学と同じく)boolで評価する関数のことをpredicateを言うの。
いい加減恥を知った方がいいよ。 >>303
言語機能か一般名詞かの違いしかないと思ってるんならそれは混同してるってことだよ だいたいコードの中の普通の日本語でいう述語なんか出てこないだろうってw
お前はコードの中に、
(空は)青い
(地球ま)回る
とか書くのかとw
ダイクストラ先生の時代からコードってのはデータと手続きで出来てるんだよw
それは宣言型の言語だろうが同じこと なんやまたどえらいアホが現れたなあw結構結構wwww >>303
キミ、「述語」って言葉の意味すらよく分かってないんじゃない? 混同というのはID:nnyWdGJKに対して言ったんだけどな
余計な飛び火をさせてしまった >>305
英語にも外来語は多いよね
新しい概念に対して語彙を増やさないというのが何を指してるのか詳しく知りたい
漢字がない分、同音異義語が多いという話なら分かる >>308
if (sky is blue) earth.evolute()
プログラミングで述語は書くと思うよ あらゆるメソッド名、クラス名にSentenceと名付けてしまうかのような暴挙 あらゆるメソッド名、クラス名にSentenceと名付けたらコンパイル通らんやんwwww
アホしかおらんのかここはwwww その理屈で言えば>>266もコンパイル通らんやろ… >>316
スコープ内で一意なら普通にコンパイル通るわw
おまえプログラミングしたことあるんかwwwww >>317
その理屈で言えばSentenceも通るやろ
マジレスするとプレフィックスないしサフィックスの話やろ >>318
どの理屈やねんwwww
言い訳すんなアホw つーか何度も言ってるが、C#で多用されるLINQの引数型としてPredicateはあちらこちらで使われるんだから
それに別の意味を持たせて再定義してる時点で脳味噌スッカスカだろと >>319
スコープ内でSentenceが一意ならコンパイルが通ることも知らんのかいな(呆れ)
プログラミングしたことあるか? delegate(委任、委譲)とpredicate(断定)の区別すら出来ない子がいるとは…一般名詞とか言語仕様以前の問題だろう
中学生ぐらいで英語力が止まってるのか? >>312
何を指すも英語はそんな文脈に依存して意味が変わる単語だらけ
atomic, bit, function
日本語は英語より文脈に依存する表現を好まない傾向が強い
分割不可能性みたいに明示的な漢語を作り出すか、ビットのようにカタカナ表記にするか
(日本語でビットといえば普通文脈に関係なくそのビットしかない)関数のように音訳する 電動ドライバーのビットはあるかw
でも日本語が同じ言葉より語彙を増やすことを好む言語なのはちょっと考えれば
大方同意するよね
スレ違いなのでこれで終わりで × 同じ言葉より語彙を増やすことを好む
〇 同じ言葉を使いまわすより語彙を増やすことを好む傾向が強い valueをgetするメソッド名に悩んでるのですが、一般的にはどんな名前になるんですかね? >>320
いうほど使わないが。
Func<T,bool>としか書かないからな。 >>326, >>327
変数のようにその値が意味する名称にする(例えば、string.length)、あるいはgetValueのように動詞始まりで書く
個人的には、状態を取得する関数は他の関数(手続き、メソッド)と完全に区別しているから、名詞にするよ
状態を表すbool型を返す場合は、trueを想定した命題にする特殊なルールがある(例えば、iterator.hasNext)
ValueGetterって名称の場合、関数は動詞始まりが一般的だから、(get)ValueGetterのように省略していると解釈され
意地悪を言っちゃうと、Valueを取得するGetterオブジェクトを返すって意味に取られかねない >329は解答として満点に近いと思うのでこれに賛成しておこう >>324
ありがとう把握した
個人的にはやまと言葉は1単語の広がりがとても広く
漢語はその豊富な表意文字と音素の恩恵から狭めって認識だわ
それと外来語学習者のバイアスがあって
学習者はコアとなる概念をそのまま理解できずに
母語の単語に置き換えて把握するから
例えば英語話者は日本語の核という言葉が
atomic, core, nucleus, kernelの4つに当てはまることを見て
使い回しの多い言語デスネーと感じる傾向があると思う
スレチなんで俺もこのくらいにしておきます >>326
言語とクラス名にも依るけど、その感じだとJavaかな
JavaならThreadLocalやOptionalのような変数のコンテナクラスにはget()というメソッド名が与えられてるから、それに倣うと自然な感じになると思う 20年前ならともかく、
getだけでJava前提にするのは厳しいかなと思いますがw モダンな言語は大概プロパティがサポートされているから、getterメソッドを使う慣習があって、小文字で書くそこそこシェアのある言語ってことでJavaかなーと思ったんだけどな
Rubyも候補に入るのかな >>328
コンパイラが暗黙的にキャストしてくれるからって、それに頼り切って本来の引数型を見てみぬふりしちゃいかんだろう >>334
プロパティあっても、アクセサ的なメソッドを作ることは珍しくないかなと >>334
C#でもありえーるでしょ。
リフレクション前提とか。
プロパティはメソッドと別扱いだから。 >>339
小文字でと書いたのは、C#のようにメソッド名先頭を大文字とするのが主流の言語は
推測の第一候補にはならなかったっていう意味ね
もし>>332でJavaと推測・仮定したことがナンセンスだというツッコミを入れるなら
他の言語である可能性がゼロでないことを示しても論拠として弱い
Javaではない蓋然性の方が高いだろという主旨でないと 今週のぱいじょ132話
https://paiza.jp/paijo
『大事な変数名』だってよ よーしパパ、ハンガリアンでバリバリコード書いちゃうぞ! 変数名はだいじだな
ハンガリアン(に汚染されていたことの発覚)はおおごとだな カッコさんもこれほど存在感のない使われ方するとは思ってもみなかったやろなw ハンガリアン悪くない
悪いのは型名をプレフィクスに使う事 ハンガリアン悪くない
private変数の
m_
とか推奨 >>352
何が言いたいのかよく分からない
英語にケチつけてるなら、それ相応の板へどうぞとしか ■ このスレッドは過去ログ倉庫に格納されています