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

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

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

前スレ
クラス名・変数名に迷ったら書き込むスレ。Part27
http://echo.2ch.net/test/read.cgi/tech/1476572490/
2ネミ子
垢版 |
2017/05/07(日) 18:03:36.48ID:akuyRduv
無関係スレ
設計・命名スレ
http://echo.2ch.net/test/read.cgi/tech/1477368563/

設計から喧々諤々されたい殿方は別スレがございますので、そちらをご利用ください。
2017/05/07(日) 18:17:56.16ID:/2PQHse0
2017/05/10(水) 02:45:04.00ID:YgxPtTuh
データベース的なものを想像して欲しい。
あるデータ群(オブジェクトの配列)を画面出力するとき、出力イベントをフックして

 ・「表示/非表示」を切り替える(単純にreturn falseだけで済むような処理ではない)
 ・「見た目」を切り替える(色変更や予め用意した画像に変更など)

の2つが必要なとき、それぞれどんな単語を使えばいい?
紛らわしくなく、かつ統一感のある関数名にしたい。

上記2つは呼び出すタイミングが微妙に異なるため、一括にはしにくい。
また、出力を切り替えると言っても、実際には個々のオブジェクトに含まれている値やメンバ変数を読み込み、
その設定を適用させるといった内容になる。
2017/05/10(水) 07:56:10.53ID:oAoKVhQv
visibityとstyle
2017/05/10(水) 08:06:31.31ID:YgxPtTuh
ありがとう、それでいく
出社前にスレ確認できてよかった
2017/05/16(火) 21:12:59.38ID:5gubPtqb
通信やファイルへ書込を伴う処理で
一旦変数に代入(書き込み予約)してから、任意のタイミングで確定させて処理したい

確定処理ってupdate? apply? commit? finalize? save?
それとこの場合の代入ってsetでいい?
2017/05/16(火) 21:43:09.50ID:AGzM1pll
もう少し詳しく書かないと何とも状況が分からんね
2017/05/16(火) 22:08:11.06ID:5HaY8++G
むしろ確定の方をsetにした方がいいような…

を確定するの英訳|英辞郎 on the WEB:アルク
https://eow.alc.co.jp/search?q=%E3%82%92%E7%A2%BA%E5%AE%9A%E3%81%99%E3%82%8B

予約、だと自分はreserveをよく使うな…
2017/05/16(火) 22:12:30.84ID:64KrDfHK
stageとcommitかな
でもwriteやsendといった実際の物理的な動作をイメージさせる名前を差し置いてまで強調するようなことだとは俺は思わないけどな
抽象的な名前は基本的に糞
2017/05/16(火) 23:16:14.08ID:5gubPtqb
ReserveFoo()とかが並ぶのか
代入の接頭詞はset、みたいなイメージあると代入にしろ確定にしろ結構離れる感じね


>>10
一応、write()と同じくらいのレベルでsave()を想定してた
2017/05/17(水) 10:22:15.30ID:vwwaD4yq
>>7
その言語でよく使われているORマッパーとか参考にすると
他の人にも理解してもらえそう
2017/05/17(水) 10:24:01.10ID:vwwaD4yq
setかどうかはmodelかviewかによるかな
modelならset
2017/05/17(水) 11:04:25.83ID:GJ9WSlKV
>>7
BufferedFile f;
f.write(data);
f.flush();

BufferedConnection c;
c.write(data); // or c.send(data)
c.flush();
2017/05/18(木) 12:25:59.00ID:xXCtzo0J
Series を列挙する型と、それを格納する変数。
C# だと

enum Series {
 A,
 B
}
Series Series;

とできなくはないけど、別にしたい。
たいていは列挙の方を複数、変数を単数にするんだけど、複数と単数で変化がないものはどうしたもんか。
2017/05/18(木) 12:39:39.31ID:eX+vCwZM
>>15
靴に足を合わせた方がいいと思うよ

型名と変数名が同じだと気持ち悪いという感覚が時代遅れだから、
名前を小細工するより自分の感覚を修正した方がいいんじゃないかしら
2017/05/18(木) 13:22:41.48ID:nmM7QGeO
>>15
型名は大文字から、変数名は小文字から始めればよい
2017/05/18(木) 21:24:31.73ID:3g1FRJ8u
十分にスコープが狭いならsでも別にいいや感
2017/05/19(金) 01:40:19.91ID:4aXBqFa1
1年後に1画面に入らないくらいまで広がっててsってなんだっけー
2017/05/19(金) 02:53:52.81ID:mnhKNMJ9
1画面くらいならそこまで問題にならんだろw
2115
垢版 |
2017/05/19(金) 08:38:09.61ID:mmCvLNpl
んー、時代遅れか。
C# の例は挙げたけど、できない言語の場合にどうしようかってのもあったんだがな。
大文字小文字の場合も。
これといった案はなさそうだね。
いろいろ意見ありがとう。
2017/05/19(金) 15:07:17.02ID:/r/R+k8J
>>21
> できない言語の場合にどうしようかってのもあったんだがな。
> 大文字小文字の場合も。

enum SeruesOption {A, B}
SeriesOption series = A
2017/05/20(土) 03:47:13.80ID:zc92SfK6
最初の質問で「できなくはないけど」と言いつつ
「できない言語の場合」って追記するの、ちょっとずるくない?
2017/05/20(土) 09:02:34.55ID:m4galLui
>>23
やり取りを円滑にするために最初に忘れず言おうな、とは思う。

が、ズルくはないだろ。
それで質問者が何か得したわけでもないし、
君が何か論破された訳でもないんだから。
2017/05/20(土) 09:52:00.08ID:I6OViHCS
まあできない言語なら >>16 みたいな回答はないから初めから書いとけ
って言うのは正しいと思う
でももう終わった話だしいちいち蒸し返す意味ない
2017/05/20(土) 09:58:35.64ID:/WJez+wG
言語に関わらず共通のスタイルを使うという発想自体がそもそもの大間違い
郷に入れば郷に従え
C#では型名とプロパティ名に同じ名前を付けることが推奨されていてenumにXXEnumみたいなのは禁止されている
他の言語には違ったルールがある、それに従うだけ
その良し悪しを判断するのはお前でもこのスレでもない
2017/05/20(土) 10:00:30.34ID:/WJez+wG
あとC#ならenumの型名にs付けていいのはビットフラグの場合だけだ
2017/05/20(土) 15:02:41.50ID:zc92SfK6
>>27
そんな違いあるのか。ちょっと面白い
2017/05/20(土) 16:07:08.58ID:LUvMfIz7
型の名前は型自身じゃなくてインスタンスの性質を表しているべきだって
発想かもしれんけど、拡張メソッドの入れ物の静的クラスにExtensionsなんてのもあったりして
ちょっと統一感ないね
2017/05/22(月) 08:56:31.87ID:zv0b6nGa
>>29
インスタンスの性質は分かるけど、型自身の名前って例えばどんなの?

Extensions だって性質を表してるんじゃない?
詳しく表してるとは言い難いけど。
2017/05/22(月) 10:19:43.12ID:SMVCp6Um
The name of a type should express the charactor of not a type itself, but the instance
2017/05/22(月) 23:54:30.25ID:9Hmi5Lo6
確かに、やや低レベルな名前って気はするかな
具体的にどうすればいいかは分からんけど
2017/06/21(水) 16:36:34.47ID:dvfsnCQH
現時点ではスレチだけど、いずれ設定周りの名称に出没しそうなのでご容赦ください。

スタンドアロンのシステムが既に稼働していますが、一部機能をクラウド化して併用する計画があります。
クラウド化してもスタンドアロンの方もそのまま運用を続けます。
いわゆる半クラウド?とでも言うのでしょうか、このようなシステムの場合、
何と呼べばいいでしょうか?
2017/06/21(水) 16:54:36.57ID:kzV2so42
ぐぐったらこんなのが見つかった
https://www.ibm.com/blogs/solutions/jp-ja/what-is-hybrid-cloud/
なんかベタだねw
2017/06/21(水) 18:34:51.54ID:dvfsnCQH
>>34
ありがとうございます。
色々調べましたが、ハイブリッドクラウドとは
パブリッククラウドとプライベートクラウドなどの複数のインフラ周りを
組み合わせた場合に呼ぶようです。
サーバーデータの保全や負荷分散という説明も見ると、
今回のケースに該当するのかというと、う〜ん。。。
2017/07/01(土) 12:23:57.34ID:41xGfxtK
単項検証: SingleFieldValidation
相関検証: MultiFieldsValidation

データベースで行と行を比較する検証や表を超えて検証する場合はなんと言いますか?
日本語と英語の両方ともわからない
2017/07/08(土) 15:58:43.96ID:FfZt44/H
>>36
相関 correlated
行 row または record
表 table
2017/07/15(土) 09:19:26.23ID:nrvPEg51
ちょっと物事を単純化して話しますが
オブジェクトの有効期間を変数として持たせたいんです
リストの中にぶっこんでいって
リストを触る奴がその値によってリストから削除したりをさせたい

このとき、有効期限をどう表現しますか?

色々考えた結果
long lifetime = now + duration;
と初期化しておいて
if (obj.lifetime < now) list.remove(obj);
というふにしました

もっと名前、初期化、運用に他のやり方があったかなと心配しています
名前は単にtime_to_removeでもよかったかなと思ってます
2017/07/15(土) 10:13:38.40ID:qqsDF0t/
クッキーを参考にしたまえ
2017/07/15(土) 10:41:48.41ID:zuAt7dHe
expire
2017/07/15(土) 13:45:28.74ID:GNjnjteo
>>38
有効期限が本当にそのオブジェクトが管理すべき情報なのか、それともそのオブジェクトを使う側が
管理すべき情報なのか、それだけじゃ分からんけど、前者だとして

CreationTime(作られた時)
LifeSpan(寿命)
TimeToLive(余命 CreationTime + LIfeSpan - now)
IsAlive(TimeToLive > 0)

こんだけの情報を持たせた方が扱いやすいかも
2017/07/15(土) 14:31:14.53ID:nrvPEg51
>>39 ありがとうございます見てみます
>>40 expireは既に別のとこで使っておりまして

>>41 もう少し正確にお話すると
class WithLifetime<T> {
public final T org;
public final long lifetime;
WithLifetime(T org, long duration) {
this.org = org;this.lifetime = System.currentTimeMillis() + duration;
}
}
こういうのを
list.add(new WithLifetime<Foo>(foo, TimeUnit.HOURS.toMillis(5)));
こう使ってますね
あくまでlistありきで
list中の生存期間を、listを使う側の都合で勝手に決めてるという
List<Foo> listのままで、Map<Foo, Long> lifetimeみたいなのを併用
っていうのも最初は考えたりもしたんですが、それでいくと
list0, map0, list1, map1, list2, map2みたいな煩雑さがチラついてきますんで
この形式にしました
2017/07/16(日) 03:26:58.87ID:yo5XpH/o
>>42
そのlistを拡張した方がいいんじゃないの
管理対象のobjectは何も知らない方がいい
listを使う側も同期とか以外は知らなくていいくらいに
そしたら汎用でも使える
2017/07/16(日) 12:39:20.68ID:Jr85n6Sz
>>43
ありがとうございます
とても有力な手だと思います

ただ、みなさんも覚えがあるかもしれませんが
こういうコンテナラッパーを気軽に書いても
意外とスッキリしていかねえな、ということです

1) 最初から十分なインタフェースをそろえるのはめんどい(主に指の疲労)
2) だから最初はsize, add, removeくらいで始めるのだが
あとで結局また加筆していくことになる
3) コンテナクラスの理想は中身を知らないこと
でもこういう作りにするとそこに想定が入ることになる
だからと言ってすぐ困りはしないが、そのことに小さい不満が残る
removeExpired()みたいなこともさせたいが、何か不満が残る
それに引数を与えてやりたいが、ここでその引数の名前が難しすぎる
何をどういう基準でremoveしてるかを表現しきるメソッド名も難しい

最後までぐだぐだ申しましてすみません
不満ばかりできりが無いのでこれにて閉じさせてくだしあ
2017/07/16(日) 16:29:38.83ID:yo5XpH/o
Listのextendできない環境なのか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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