ふらっと C#,C♯,C#(初心者用) Part134
レス数が1000を超えています。これ以上書き込みはできません。
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 調子にのって式形式の略記しまくったら=>まみれになったでござる using dispose は便利な機能だが実装の闇が深くて台無し。魔剣ダイナシ。 SQL鯖へのConnectionもUsingの中に入れちゃっていいのかな?
昔は最初にConnection開いて、ずっと開きっぱなしの中で処理して、最後にCloseすることが多かったけど
不安定な接続(スリープで回線断)やミラーリングサーバーを考慮すると、いちいちOpen/Closeしたほうがいい。
だけど、usingの中に入れることで、いちいちDisposeされたら
接続キャッシュが機能せずに体感速度が落ちる、って風になる? 接続管理はコネクションプーリングに任せてプログラム上は最短でOpen-Close >>8
SQL鯖でusing多用はいかん
try/finally使ってopen/closeしとけ
速度はopenしっぱなしとほぼ変わらん >>10
それdisposeと一緒やん。
ってか、disposeじゃん。
なにいってんの? >>13
disposeじゃねぇ。usingだわ。まちげーた >>13
disposeしてないよ
何言ってんの? >>15
やってることが、using使ったdisposeと等価なんだけど。
usingはtry/finalyの糖衣構文
(sql鯖のコネクションについては)closeとdisposeは等価
何か違いがあんの? var SqlConn = new System.Data.SqlClient.SqlConnection(xxxx);
という感じの宣言は try/finaly の外でやっておいて
open/close は try/finaly の中でやる
って意味で書いたと思ってたけど、そうだよね? >>16
msdnのSqlConnectionメソッドの
closeとdisposeの説明をちゃんと嫁 >>19
おじさん?
アフォな専門学校の生徒かと思ったわw
放置プレイしま〜す SqlConnectionメソッドってのはちょっと分からなかったけど
SqlConnection.Closeにはこう書かれてるな
> SqlConnection は、適用範囲外では閉じられません。
> そのため、Close または Dispose を呼び出して、明示的に接続を閉じる必要があります。
> Close と Dispose は、機能的に同じです。
DisposeはComponent.Disposeに飛ばされたから
そもそもSqlConnection.Disposeのページが存在しない >>18
msdnに機能的に等価って書いてあるんだけど、なに読めば良いの?
>>17
try/finalyの外で宣言した変数を使い回すってこと?
usingを抜けなければ、disposeは走らないから、一度開いた同一の接続を使い回すのであればusingの中で、接続(open)を複数回するのであれば、個別の変数を切り直した方が良いと思うよ?
前提が違ってたらごめんね。 アプリは生きててDBだけリセットかけたらもう一回接続しないと駄目?
なんかアクセス毎に開いて閉じて入れておかないと面倒な感じじゃね? 最近はMicrosoftDocsに飛ばされるね、MSDNもあるけど英語がメイン
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-statement
ついこないだIDisposable実装したけど、これまたクイックアクションで親切すぎるコメントつきテンプレが流し込まれる iPhoneのキーボードのこれhttps://i.imgur.com/PStMLdz.jpgはプログラム書くときのダブルクォーテーションとは違うんだな。ideoneでなぜかエラーが出たので気づいた。
https://i.imgur.com/wyCNyNM.jpgこれだと使える。
英字キーボードのやつ “””””””””””
ABCのほう """"""""""" >>25
C#と関係無いけど、この業界にはよくある事
U+301CとU+FF5Eの違いとかな ソフトウェアキーボードでコード書くとか苦行過ぎるw ideoneでちょっとした動作を試したりするときだけだな C#ってmalloc・calloc・realloc的なかんすえはありますか?
全部自動? いやmalloc的なのは普通の配列のnewかMarshal.AllocHGlobalだろ ただいま勉強中なのですが、↓のようなコードの設計、ネーミングその他は適切でしょうか?
身近に現役プログラマーの方がいないためいろいろと聞けないのが現状です。
なんでも指摘してくださると助かります。
public static class DirectoryUtils{
public static string ErrorMessage { get; private set; } = null;
public static bool DeleteFiles(string directoryPath) {
if (!Directory.Exists(directoryPath)){
ErrorMessage = "ディレクトリが存在しません";
return false;
}
try {
foreach (var file in Directory.GetFiles(directoryPath)){
File.Delete(file);
}
}catch (Exception exc){
ErrorMessage = exc.Message;
return false;
}
return true;
}
}
使う側
var success = DirectoryUtils.DeleteFiles(directoryPath);
if (!success){
MessageBox.Show(DirectoryUtils.ErrorMessage);
return;
}
//総変換数を求める
var totalNumber = GetNumberOfTotalConverting()
//Converting,Conversion,All,Total,Number,Count等々、悩んでいます 自分だったら
public class DeleteFilesResult
{
public string ErrorMessage { get; set; }
public bool Success { get; set; }
}
みたいなクラス作ってそれを結果として返すかな >>36
エラーならエラー文字列返して、正常なら空文字かnull返すのが素直じゃないかな? successならsucceededとかじゃないの
もしくは構造体なりで
if (result == RESULT.OK)
とか さっそくでたな
try catchはDeleteFilesメソッドの中じゃなくて
外で使うべき >>36
静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
エラー情報は普通に例外を投げようよ。
単に失敗成功が分かってエラーメッセージが取得できればよいだけなら、
エラーメッセージはoutな引数で戻せばいい
あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
失敗しても継続する方が自然なような気もするけど...
DeleteFilesより明示的にDeleteAllFiilesの方がいいんじゃないか?
GetNumberOfTotalConvertingは長すぎ
それを含むクラスに適切な名前がついてればそんな冗長な名前にする必要ないでしょ >>41
以前暴れていた
CsvHelper例外で落ちるな糞野郎くんだろう DeleteFiles内部でtry catch受けていいのは
そのファイルをスキップして残りを消す場合など 例外が飛んでそれをもとに制御が変わるなら
適切なtry catchの場所を考えるべき あと、例外についてはとにかく何でもキャッチしたがる人と、
それに対するアンチテーゼで「例外は絶対キャッチするな」と主張する人がいるけど、
どっちも何か盛大に勘違いしてる極論だから眉唾で聞いた方がいいと思う そうだね
例外利用するならFile.Deleteのページを見て
どんな例外をスローするか調べたほうがいい
権限無くて削除できないとかあるから 頻繁な例外を想定するならロギングで出力した方がいいよ
エラーを毎回表示なんて非現実的だし無視してOK連打したら意味ないでしょ
それよりタイムスタンプつけてテキストファイルに保存した方が後から照会できる
問い合わせの多くは、何もしてないのに突然おかしくなった、というやつばかり
そういう時はログフォルダをzipで圧縮して添付してもらおうというわけ 状況が許すならDirectory.Delete (string path , bool recursive)を使いたい >>36
同じく静的メンバにエラー状態持たせるのは論外だけど
どうしてもやりたいなら成功時にそれをクリアしないとダメ
bool返すよりoptionalみたいなのを返すのがモダン そのフォルダが相手のミスでリードオンリーにされた場合は例外情報が全部死ぬけどな >>36です
こんなにレスがつくとは思いませんでした。みなさんありがとうございます。
@結果を格納するクラスを作成し、それを返し、参照する
Aエラー文字列を返す
B例外を投げるかoutな引数で戻す
どれもそういった発想が無かったので勉強になります。
ちなみにoutを使う場合はtupleを使って2つ返すのもありですか?
>静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
こういう風に指摘されるともっともっと勉強しようと励みになります。ありがとうございます。
>あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
>失敗しても継続する方が自然なような気もするけど...
たしかに処理の中断をするまでもないですね
例外処理についてはメソッドを呼ぶたびにtry catchを書くのが冗長という理由だけで中にいれてました。
制御が変わるかなど考慮すべきでした
optionalや>もしくは構造体なりでif (result == RESULT.OK)
などまだまだ理解できない部分が多いので調べてきます >>50
予期せぬ例外は
https://qiita.com/exliko/items/42715a0c9fd7519eb6d9
このような感じでログファイルに出力するようにしていたのですが、
たしかにエラー毎回表示も微妙なので、もっとログをとっていくようにしていきます >>47 >>48
例外が起きた際、個々の例外によって制御を変える場合は個別に書いて、
MessageやStackTraceをロギングして終了するだけの場合はExceptionですべて捕捉する感じですか?
当初はIOException,UnauthorizedAccessExceptionなど書いていたのですが、
結局Messageしか使っていなかったので全ての例外を捕捉するようにしていました。 Directory.GetFilesはファイルを全部探してから配列でそれを返すので色々と無駄
列挙するだけならDirectory.EnumerateFiles 教えてもらったことにお礼を言うのはいいとして変える必要があったのだろうか >>55
Tupleでいいけどちゃんと名前付けてね
もしvs使ってるならコード分析かけてみれば?
静的メンバーの公開とかは警告で教えてくれたはず >>57
基本的に例外を避けたい理由がなければ例外を使えば良い
ロギングしてアプリを終了するならExceptionでcatch
復帰可能のは個別に対処(ディレクトリが見つからない場合は再入力を求めるなど) >>55
outはもはや要らない子
名前付Tuple使っとけ bool ok,int unkor,int unkog,int unkob
var unkc = GetUnkoColor();
if(unkc.ok){
成功
}else{
失敗
}
みたいな? また、Exceptionが不遇な扱いを受けている
哀れすぎて何も言えねえ また、大して考えず産廃を作った予感
言語開発者暇なのか?
Getしようとしたけど要素がないときもあるじゃん
全部例外で飛ばされるとかマジやめて 例外が邪魔とかoutイラナイわめいてるのは大抵Dictonaryでしょ
連想配列は銀の弾丸ではない、期待しすぎ 今はout引数で変数宣言できるようになったからかなりスマートになった
むしろタプルの必要性が疑問なくらい
TryGetXならnull問題もないし 何が返されるか分かりにくいじゃん
タプルで返して分割代入すればいい outでもクラスでも構造体でもタプルでも好きなもの使えばいいよ
>>78
いらんというお前のレスがいらん
チラシに書いとけ outって呼び出す時に一々変数を定義しなきゃいけないのが面倒
Tupleは戻り値が分かりづらいって欠点がある
どちらも一長一短だから好きな方を使えばいい
.NETライブラリが使ってないから使わないって思考停止すぎんだろ 公認じゃない感あるし.NETの関数とマッチしないからな c#が気に入らなきゃMatzみたいにオレオレ言語作れよ 時間帯によってgpuの色味をコントロールするソフトを作りたいです
具体的にはf.luxみたいなソフトを作りたいのですが、かんたんですか?C#でいいんです?
f.luxはガンマ?が高目に設定されるようで、余計眩しく感じたりします >>94
たまに似たような人がいるけど仕様段階で先が見えないくらいならあきらめた方がいい
このスレは設計のアドバイスをする役割ではないから 画面関係ってOSのAPIレベルで標準化されてるのかな。
Win10だとそれっぽい機能がついてるから存在するのかもしれんが、それ以前のOSには存在しない気が
そもそも、昔よくあったOOPの責務の仕分け問題じゃないけど、画面の調整機能って
本来はモニター側が担当すべき機能でPC側でやるのはいかにも筋悪だよねw まあ、でも、一人も試みるやついないってのも寂しい話だ >>100
アドベガンマが昔からあるのでアプリケーションで変えることはできる
スレ違いだし興味も無いのでこれ以上調べる気にもならない
>>103
やりたい人はやればいい
要件整理からはじめてガチ初心者にずっと教えるのが覚悟できれば >>85
c#7の新機能に出力変数宣言(out-var)がある。
これはこれで変数宣言を見落としそうだけど。 >>106
愚者は厚顔無恥あり正しい事を指摘するとキレる 値渡しと参照渡しの違いって、エクセルの貼り付けの「値のみ貼り付け」と「すべて貼り付け」みたいなもんですか? 「図として貼り付け」と「リンクした図として貼り付け」の方が近いかな >>110
なるほど。そこまで外れてなかったようで安心しました。 >>109
変数:割り当てられたメモリー上の特定のアドレス範囲
値:変数の中身(変数に割り当てられたメモリーの範囲のバイト列)
参照:変数に割り当てられたメモリーの範囲の開始アドレス
まあ、値がwebページのコンテンツなら参照はそのURIみたいなもの >>112
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。 >>113
何も難しくないよw
2chで言えば参照渡しは人(メソッド)に対してレスのアンカーを示すだけで
中身は教えない。
値渡しはレスの内容のコピペ
参照渡し:
>>113
値渡し:
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。 C#の次期バージョンではin参照渡しとかreadonly ref structとか参照渡し周りが超絶複雑になるよ >>116
ライブラリってのが何を指してるのかしらんが、CLRはパフォーマンス向上のために採用するだろ なんの思想もなくただ思い付いた機能追加してんな
次世代の課題はどう考えてもコードの自動生成だからな
もうc#にそれを受け切るキャパはないと結論出してくだらん機能追加してんのかな?
この設計を実現するためのこの機能ってのがないよな >>119
ごもっともだがmsの言語拡張にいったい何パーセントのc#プログラマーがついて行けてるんだろ? >>120
基盤のためだから、馬鹿な一般プログラマーはついていけなくていい
パフォーマンス向上だ間接的な利益を受けるから 値型参照関連の新機能はパフォーマンス向上のために追加されるから
使わん奴は一生使わんだろうな >>122
>>102の法則が発動され中途半端な馬鹿がグダグダで複雑怪奇な(当然バグだらけ)の
コードを量産するから困るのです。 馬鹿と一緒に仕事しなければOK
馬鹿に仕事を発注しなければOK
そうもいかないって?馬鹿は大変だなw MicrosoftがVBを切り捨てたようにC#も底辺から切り捨てられていく
底辺プログラマの未来は暗い C#は他の言語で便利な機能があれば取り入れようとしてる時期
rubyみたいに何でも取り入れてごちゃごちゃにならなければいいけど
本当の意味で新しい機能はしばらく追加されないだろう >>128
それって簡単に言えばなんの思想もないから他言語パクって見ますって話でしょw >>129
全部入れてるわけじゃない
思想的にあってるものだけ入れてる
似たような感じだったjavaとも進化の仕方から違いが見て取れるはず
C#の下位がjavaと思ってたけど今は結構違いがある 技術力があれば不要なコミュニケーションを大幅ぬ削減できるという事実から目をそらさないで そりゃC#にはVisualStudioとRoslynという超強力な助っ人がいるからね
さらにReSharper買えばリファクタリングも楽々 outって使った記憶無いなぁってプログラム書いてたらTryParseで普通に使ってた >>123
うむ
ほとんどの人は気にする必要すらない Parallelで走らせてる処理を一時停止させる方法ない? private class Pixel
{
public byte R { get; }
public byte G { get; }
public byte B { get; }
public int Index { get; }
public Pixel(IList<byte> data, int index)
{
B = data[0];
G = data[1];
R = data[2];
Index = index;
}
}
private static (int x1, int x2, int y1, int y2) Solve(BitmapSource source)
{
var width = source.PixelWidth;
var height = source.PixelHeight;
var stride = width * source.Format.BitsPerPixel / 8;
var data = new byte[stride * height];
source.CopyPixels(data, stride, 0);
var pixels = data.Buffer(source.Format.BitsPerPixel / 8).Select((x, i) => new Pixel(x, i));
あるところのコピペですが、最後の行の data.Bufferで 「'byte[]' に 'Buffer' の定義が含まれておらず、型 'byte[]' の最初の引数を受け付ける拡張メソッド 'Buffer' が見つかりませんでした。」
となります。 Byte型にBufferメソッドはないのですが、なぜこのような記述になっているのでしょうか? >>140
多分元々はBufferメソッドは拡張メソッドとして定義されてたものだと思う。配列型のメンバに無くてもあとから追加したように見せるやつ。 みなさんどうもありがとうございます。
>>141
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
なので問題はないと思います。
>>142
古い.NET Frameworkしろってことですよね?
やってみたんたんですけど、Byte型に Bufferメソッドはなかったです。
>>143
自作した拡張メソッドなら他人にはわからないですね。
やってることはBitmapImageからピクセルデータの配列を取得してるので
べつのものに置き換えて済みそうな気がするんですが・・・
>>144
知らないのでググってみました。色々できそうなので調べてみます。 小さいから見えんかったけど
IListじゃん
ググると微妙に出てくる >>147
形式的にそう見えるようになっているけど、実際には通常のクラスの継承とは異なってるよ
配列は配列型という特別な種類の型であって、クラスや構造体とはまた異なるものだ AngleSharpの使い方について教えてください!
<div class="aaa" hoge="javascript:changeBackgroundColor(this);">
<span id="idxxx" class="laste_span">取得したい箇所</span>
</div>
このようなelementがあったとして、
// 指定したサイトのHTMLをストリームで取得する
var doc = default(IHtmlDocument);
using (var client = new HttpClient())
using (var stream = await client.GetStreamAsync(new Uri(urlstring))) {
// AngleSharp.Parser.Html.HtmlParserオブジェクトにHTMLをパースさせる
var parser = new HtmlParser();
doc = await parser.ParseAsync(stream);
}
ここからdocに対してどのようにすれば取得したい箇所が得られるのでしょうか? ...
}
var elm=doc.QuerySelector(“div.aaa span#idxxx”);
var text=elm.TextContent.Trim(); //文字列を取得 id よりも先祖の階層は、指定する必要がない
最も子孫の、id 以降を指定するだけでよい >>151
>>152
>>153
ありがとうございます!
明日確認してみます。 あるtextBox1と表示内容が同じtextBox2を作りたいのですが
textBox1.Text="hoge";
textBox2.Text="hoge";
と記述するのではなくて
visualstudioのデザイナーでコピーするだけでtextBox2を簡単に作れる様な方法はないでしょうか? すいません、Textの内容hogeは計算結果をstringに変換したもので毎回違うので
単にコピーしただけでは出来なくて困っています はい、連動させたいということです
データバインドというので出来るのかなと思ったのですが難しくてよくわかりませんでした… 複数のタブで色々な計算をしていて、その結果を見やすい様にひとつのタブにまとめて表示させたい
という感じです コンテクストクラスを作ってタブ開いたときにそのコンテクストオブジェクトの内容を表示させる 更新タイミングでそうなるように値入れればいいじゃん うむ。
textBox1.Text=res1;
textBox2.Text=res1;
textBox1.Text=res2;
textBox2.Text=res2;
こんな感じで毎回両方に代入すればいい。 なんで要素1つのタプルが宣言できねえんだよこのポンコツ >>155
文字通りに解釈すると表示が同期するコントロールを継承・またはユーザーコントロールとして新しく作るってなるけど
>>164とどっちが楽とか考えてみたらいいよ EF初心者なんですがPKが有るDBでsaveChangesしようとするとPKが重複してるというエラー出ます。解決策を教えてください。 増減する情報(例えば、車種、色、ナンバー等)を管理するのに適したものは何ですか?
自作クラスを作って
List<myClass> myList;
myList.Add(new myClass());
myList.Remove(〜);
とするのと、
DataTableで、車種、色、ナンバーを Columnsとし、
Row の Add と Remove するのと、
実行速度とかの面で、どちらがよいでしょうか。 ListのAddはO(1)、RemoveはO(n)
DictionaryのAddはO(1)、RemoveはほぼO(1)
なのでキーがユニークになるならDictionaryを使えばOK
あとDataTableは余程のことが無い限り使っちゃダメ >>170
それを保存するならDBを使うべき
SQLiteとか DataTable はダメなんですか?
別件ですが、日時を有する情報で、ある特定の期間の直近のデータを特定したい場合があり、
Selectを使いたいのでDataTableを使った経験があるのですが、よくなかったですか? >>173
保存はしません。あくまでも内部の情報としての利用です。 DataTableは土方臭いから、やり方に拘るタイプの人は嫌ってることが多い
DataTable自体は、パフォーマンスに優れ、クソ安定した優秀な技術
愛用してるプログラマがクソなだけ DataTable よりも List を使うと 10 倍早くなる
略
DataTable 8.32, 8.12, 8.12 sec
list 0.88, 0.83, 0.83 sec
とう具合に、DataTable よりも list のほうが 10 倍早くなっています。 >>178
質問者が実行速度にこだわっているのならどうでもよくはない
そんな話するのならこの質問がどうでもいいってなる 皆さん、ありがとうございます。
速度も速いしクソにはなりたくないので、今回の案件ではlistを使う方向で進めることにします。
先ほど書いたとおり、以前DateTime型の絞込みでSelectが便利だと思いDataTableを使ったことがあります。
この場合も、listで、自力でソードや比較を実装した方が良かったのでしょうか?
まぁ速度の兼ね合いかとは思うのですが、皆様ならどうしますか。 8秒と0.8秒だったら大騒ぎだが80msと8msの差だったら無視できるという意味では
どういうものをどのくらい扱うかで違うから本人がテストしなきゃ仕方ないね DataTableはオワコン
Microsoftも切捨てようとしたがクレーマーの圧力に負けてしぶしぶサポートすることになった >>180
まず用途が管理なのに保存しないとか意味不明なんだけど
データその都度読み込んで捨てるのなら作りやすい方で作って
速度アップ見込めそうなら形式を変えるだけ RemoveするならGetHashCodeとEqualsをちゃんと実装してHashSetにぶち込んだ方が良くない…? リストに重複データが存在するかもしれないしHashsetにしていいかは不明だな
設計書とか作って主キーやユニークキーにあたるデータを明示的にしてんならそれでいいけど大抵はIEqualityComparer指定する方が使い勝手がよさそう >>180
先ずは作り易い方で作れ
速度面の改善をするのは、一通り完成してからでいい
ボトルネックは大抵、標準ライブラリからどのクラスを採用するかなんてレベルには無いから気にすんな 皆さん、レスありがとうございます。
色々と馴染みのないキーワードが出てきたので少しずつ調べて行きたいと思います。 >>182
クレーマー言うな。
EFが普及してないんだから仕方ない。
msはDataTableよりvb6に引導を渡してくれ。 Webフォームを作っています。
サーバ上の特定のフォルダに、とあるファイルが不定期に生成されます。
それを監視してWebフォームに表示したいのですが、FileSystemWatherのようなコントロールはないでしょうか?
ない場合、Timerで回すしかない考え付かないのですが、通常Webフォームで1秒間隔程度なら許容されるインターバルでしょうか? >>192
無いと言うか、あったところでその状況をサーバに取りに行かないとどうにもならん。
ユースケースによるかと。
コネクション数を気にしないなら、ファイルが生成されるまでタイムアウトしないAPI作って、ajaxで呼ぶのが一番機敏に動くと思う。
一秒間隔でリクエストはちょっと多いんじゃないかな。生成されてない画面を10人が10分開いたままにしたら、それだけで6000行もログが埋まってしまう気がする。 >>192
問題ないけど不定期ならプッシュ通知の実装もありますよ >>193
言葉足らずですみません。
IISが動いているサーバにデータのファイルが不定期に生成されます。
それをWeb画面で様子をみたいという要望です。
動いてる様子が分かればいいのですが、ファイルがまとまって生成される事があるため、
ある程度短いインターバルにしたいとは思ってたのですが。
ローカルアプリも考えたのですが、その場合、複数のPCがサーバのファイルを覗きに行く事になるので、それはそれで嫌かなと思いまして。
> ファイルが生成されるまでタイムアウトしないAPI作って、ajaxで呼ぶ
もう少し教えてもらえないでしょうか。
APIって具体的に何で作ったどんな形式のものですか?
調べるヒントをください。
>>194
同じくもう少しヒントを!どんな感じの実装ですか? >>195
ごめん、Webプッシュと言うらしいけど未だ使ったことは無いんだ
グーグル先生に聞いてください C#を採用したTizen4.0っていうOSのスマホが発展途上国でバカ売れらしい この人と同一人物じゃないかと疑ってしまう
703 名前:デフォルトの名無しさん (ワッチョイ 02c2-8CrJ)[sage] 投稿日:2017/11/21(火) 21:20:36.17 ID:8K/pnPq30 [1/2]
最近のオシロスコープはWebサーバー機能を持っていて、Webブラウザでアクセスすると
計測画面を表示させることができますが、C#で同じような機能を簡単に実装することはできるでしょうか?
リモートデスクトップではなく、WinFormsのアプリ画面だけをネット越しに共有する感じです。 >>195
Web Socketかポーリングを使う
つまりSignalR ポーリング間隔はどっちにしろ決めないと話にならない ロングポーリングかWebSocketならポーリング間隔は不要だぞ サーバー側でクライアント数の把握をするの?
悪手じゃね? 通知が取得できるようになるまで長いことセッション張りっぱなしにするだけだぞ
悪手もクソも普通に使われてる手法 >>206
それってサーバー側でクライアントを管理してないとできないよね? >>208
それが何か?
普通のHTTPリクエスト処理だって、リクエストを受け付けてからレスポンスを返すまで、
君の言葉で言えばクライアントを管理してるだろ
そのレスポンスを返すまでの時間が長いだけだよ >>210
ファイル更新が丸一日無かったらどうなんの? >>211
リクエストにタイムアウト付けるに決まってるだろ 元の質問Timerで一秒間隔で呼び出すとかなんだが大丈夫なのか? >>213
5chのリクエスト数に比べると屁みたいなもんだろな。 そもそもサーバーのファイル一覧を表示するWebアプリなんか自分で作らなくても出来合いのOSSが腐るほどあるだろ
自分で作るより遥かに品質もいいよ webベースのファイル管理サービスでイケてるやつあったっけ? >>214
キャパシティ的な話をするなら、そもそもサーバーのディレクトリを各クライアントがネットワークドライブにマウントしても全く問題もないだろうな
用途的に、問題になるほどにクライアントの数が多いとは思えん って違うw釣られて間違えたw
クライアント側の話だよ >>219
ロングポーリングなら関係ないぞ
結局はサーバー側でのファイル生成イベントの発生頻度次第 >>218
タスクトレイ常駐型のデスクトップアプリでも作った方が使いやすいだろうな。 サーバー側はFileSystemWatcher(だったっけ?)でフォルダ監視してなんかあったらテキストファイルでもDBでも適当な保管場所に情報を保存するサービスと
その保存場所から自動更新でひたすら情報を読み取るWeb画面作ればよくね?
自分ならそうするわ
ボリューム的に半日仕事で終わるし 他のアプリにキーボードのコマンドを送りたいのですが、どの様な方法があるでしょうか?
sendinputなど調べてみたのですが例が少なく今一理解出来ませんでした >>222
> その保存場所から自動更新でひたすら情報を読み取るWeb画面作ればよくね?
だからそれやるとクライアントが多い時にサーバーがパンクするからSignalRとかでサーバーから通知するって話
まあサーバーから通知って言うけど仕組み的にはイベント発生までレスポンスを返さないって言うだけのことなんだけどな >>224
SendKeysで
sendinputは他のプロセスには送れない .netの場合クラスないでFontオブジェクトを生成した場合にはクラスを解放した場合は
Fontオブジェクトは解放されるの? Disposeすべきかどうかはどうやって調べたら
いいのだ? >>226
しないっつうのw どういう理解してる?
なんのためにわざわざ別にサービス作って保存してんだ
これでパンクするならごく普通のWebサービスも作れんわ >>229
パフォーマンスを要求するなら適切なタイミングで解放すべき。
どうでもいいならガーベッジコレクタに任せる >>229
IDisposable実装してないクラスは放置で良いと思ってる。 FontをDisposeするコードは見たことも発想も無かったな
newで作ったら全部Disposeする発想なのか >>234
Fontはコントロールを自作する場合は(ほとんどの場合手抜きで)コントロールと同じ寿命に
することもあるけど、usingで対処できる場合が大半でしょ >>230
見たときに最新情報になってりゃいいんじゃなくて、イベントが発生したらあまり遅れずにクライアント側の画面を更新するんだぞ?
なぜSignalRとかの話になってるのか理解してないだろ >>237
そもそもWeb画面で見たいっつう要望じゃん
つうか100台同時アクセスして毎秒更新してもカスみたいな負荷だわこんなもん
一体どんな骨董品で動かす想定してんだよ そうでなくてもSignalRなんているかよ
サービスでtcpポートlistenしてイベント発生する都度情報を垂れ流す古き良きソケット間通信で十分だろw >>239
ブ ブラウザ画面の話してるから要するにWebSocketってこと? >>241
いや
デスクトップアプリにするんでもソケット間通信でいいよねっつう話 質問者置いてけぼりでワロタ
いつの間にかサーバ側を何とかする話になってる 皆さん、単純なものを複雑に実装するスキルをお持ちのようでw C#でデーモン作って状況をDBに保管して、webシステムは普通にDBからページ作れば良いんじゃね?
セッション全てがフォルダアクセスに行くと面倒だからそれだけ避ければいい >>195
見たい時にボタンクリックして最新情報を取得すればいいやん。
常時モニターする必要性は無いだろ? 本当に初歩的なことで無知で予め謝るね、ごめんなさい。
var revokedPasswords = [
];
function getAuthenticationHash (password) {
var hasher = new jsSHA("SHA-256", "TEXT");
hasher.update("vira " + password.trim().toLowerCase() + " mate");
return hasher.getHash("HEX");
};
function isValidPassword (password) {
if (revokedPasswords.indexOf(hash) >= 0)
return false;
var hash = getAuthenticationHash(password);
if (validPasswords.indexOf(hash) >= 0)
return true;
return false;
};
context.getAuthenticationHash = getAuthenticationHash;
context.isValidPassword = isValidPassword;
というのがあって、これはパスワードを”SHA-256”ってやつで変換しろってことであってるのかな? >>227>>228
ありがとうございます
最終的にバックグラウンドでキー入力を他アプリに送りたいのですが
どういった方法があるでしょうか? >>252
バックグランドってタスクトレイ常駐アプリにしたいって事?
NotifyIcon使えば出来るけど。
バックグランドがWindowsサービスって意味なら無理かな。
.NETのSendKeysは、半角カナや&は化ける。
WSHのSendKeysを使えば化けないかも。 >>238
> そもそもWeb画面で見たいっつう要望じゃん
>>192と>>195を読んで自動更新したいんだ
って理解できないアホは黙ってろ >>238が言ってるのは、クライアントがサーバーに対してXHRでも使って1秒ごとにポーリングすればいいということだと思うぞ
リクエストのたびにサーバー側でも毎回ファイルシステム舐めてファイル一覧作ってたら遅いだろうけど、
サーバー側ではFileSystemWatcherなり定期的なポーリングなりで非同期でファイル一覧のキャッシュを更新していけば、
クライアントが頻繁にリクエストしてきてもまず問題にはならない >>256
普通誰が読んでもそういう理解になるよね (A)サーバー内でのファイルシステムに対するポーリング と、(B)クライアントによるサーバーへのポーリング がごっちゃになってるのがこの話の混乱の原因
そこを非同期で分離するのはまず常識的な大前提であって、
ABそれぞれをどう最適化するかはそれほど重要ではない
とりあえず実装が手っ取り早いのはABとも定期的に更新することだし、
効率と即時性を追求するならAはFileSystemWatcherでBはロングポーリングorWebSocketだろうね >>256-258
なんでそんなタコな設計するんだ?
って>>193に既に書いてあるのにバカすぎるだろ 質問主はWebアプリに拘ってるわけじゃないけど
沢山のクライアントPCからWebサーバのフォルダを共有したくないからWebアプリが良いかな程度に思ってるだけだろ。
Webサーバ上に監視サービス作るのならWebアプリに拘る必要は無いし。 >>260
>>193がバカだからね
仕方ないね
ファイルが生成されるまでタイムアウトしないAPIとか、1秒間隔のリクエストが多いとか、6000行のログとか
何もかも全てが意味不明だからね
どうしようもないね >>260
>>193と矛盾することは何も言ってないつもりだけどな
>>193は>>259でいうBの部分の実装例を挙げてるだけであって、Aの部分については何も言及してないぞ じゃあ会社でLINQを薦めようとしたら、その前にまずユニットテストを覚えさせなければと愕然とした話でいいのか ソケット通信はstunnelで暗号化するんだよね? >>263
そもそもAをどうのこうの言ってる奴は池沼の>>222ぐらいだろ w イベントの購読破棄って
どんなケースでも破棄されるように几帳面にやるものなの?
http://takachan.hatenablog.com/entry/2014/10/21/011333
これ見たら-=しなくても漏れないようなので
サボりたくなるんだけど
サボってはいけないケースとサボっていいケースがあるなら知っておきたい >>268
何やってるのかよー分からん記事だねw
イベントでリークが発生しうるのは相談室の方の97に書いてあるケースだけだと思う
それは違うって言ってる人もいるけど、たぶん何か勘違いしてるだけだと思うね {"status":"go","solution":{"Res":"0SpQ"},"endTime":1512663686}
っていうJSONデータがあって、その中のResの値をとりたいんですけど、
var seri = new DataContractJsonSerializer(typeof(recapres));
byte[] bytes = Encoding.UTF8.GetBytes(a);
var ms = new MemoryStream(bytes);
recapres info = (recapres)seri.ReadObject(ms);
ここまでは調べて書けたんですけど、
この先のResの値をとるコードの書き方がわかりません。
どのように記述すればいいのでしょうか?
solutionの部分は、
[DataMember]
public List<SOL> solution { get; set; }
としてしてます。 >>269
サボってはいけないのはイベント発行側のライフサイクルが長いとき
サボっていいのは発行側と購読側のライフサイクルがほぼ同じとき
という理解でOK? >>268
このリンク先の人はイベントとGCを正しく理解してない
この人、他の記事もバカっぽいのばっかりだから初心者はこんなの見ちゃだめ
>>272
間違ってはいないけど、補足するなら
発行側より購読側のライフサイクルが長いときもサボっていい
参照の向きは必ず発行側→購読側なので、イベントハンドラの登録そのものは発行側の寿命には影響しない
フォームとボタンのように、たいていは購読側も発行側への参照を握り続けているので、結果的に寿命は一致するケースが多いんだけどね >>273
SIerの中の人のブログだね
c#でメモリリークって「推して知るべし」 >>262
193だけどなんで?
普通にロングポーリングの実装かと。 イベントとかUIしか使わんしUIはデザイナーが勝手にコーディングするからイベントなんて使わんな +=を一切使わずに作るのか
コマンドバインディングを駆使する感じ?
それは確かに凄いな >>275
ロングポーリングの実装について勉強しといで
単にタイムアウトを無期限にする実装のことをロングポーリングとは言わない >>279
うん、実装次第だよね。
無期限か、プロキシに切られる寸前にするか、10分にするか、どうでも。
無期限はCouchDBのchange監視なんかは、ほっといたら無期限になるんじゃなかったっけ?
ログが大きくなったり他のを埋めるほどのリクエストは問題だと思うけど。特にイントラでの運用だと。
事例調べてきたらいいのになぁ >>282
無い人はそれでいいよ
自分には〜いらないとか〜必要ないとかそういうこと言いあうスレじゃないんで >>283
単純に興味がある
みんななにに使ってるだろう。
そもそも要らないとは一言も >>284
UIアプリつくったことないの?
イベントだらけやん >>285
うん。UIしか俺も使わん。
それ以外にある?
UIのはデザイナが勝手にコーディングするからイベントに触れることがない。 >>279
> 単にタイムアウトを無期限にする実装のことをロングポーリングとは言わない
そんなことを思ってるのは君だけ
マジでちょっと勉強してきた方がいいぞ
今だと単なるアホにしか見えてないし >>286
通信アプリとかデータが来たらオレオレイベント発生させる。 ID変わってるかもですが、>>192です。
反応できてないですが、皆さんの議論は参考にさせて頂いています。
SignalRですか?少し調べてみたのですが、目的に合致しているかもしれません。
ですが、後だしなのですが、今回対象になっているサーバがframework 3.5で、
現在運用されているwebアプリはVS2008で開発されています。
ここに追加する形で考えているため、SignalRは使えません。
(別の場所に同じようなサーバがあり、こちらは去年立ち上げたばかりで、水平展開することになり、かつ、私が担当する事になったら是非ともSignalRなりを勉強したいと思っています。)
そこで、やはりTimerを使う事になるかなと思っているのですが、気になる点があるので教えていただければありがたいです。
ログが大きくなるとあるのですが、意識してなくてもログが記録されているものなのですか?
そのログはどこで確認でき、ログを残さなくすることはできないのでしょうか? >>290
IISのログの事だろうけど気にしなくても良いでしょ。 プロパティー変化時の〜Changedイベントは普通に多用するでしょう。
非同期処理完了をイベントで通知するのは非同期メソッドが出来たので
流行らなくなったね。 最近はイベントも種類が増えたね
・x:Bindによるイベントバインディング
・EventAggregatorって言う集約イベント
・Rxや、その派生のReactiveProperty
従来型はあまり使わなくなったね。 >>286
最初の質問は「イベント使う機会ある?」だったけど、相手によってどんどん変えるの?
動的にコントロール追加する時とかデザイナでできない
イベントが多重発生する状況のときは処理中に止めて終わったらイベントを再開する
他にもあるだろうけど自分が遭遇する機会無いのならそれでいいじゃん
>>290
質問続けるのならどこまでサーバー側をいじれるかも書いてほしい
一番簡単なのが他の人も書いているけどサーバー側でステータス用意して
クライアント側がそれを取りに行くだけの処理の時だから PerformanceCounterって、
OS起動直後からしばらく立たないと使えないとかの制限あるんですかね? >>294
なんも変わってなくね
最初から「UIしか使わんやろ」オンリーですが? >自分が遭遇する機会無いのならそれでいいじゃん
なにをそんなにイカってるのか分からんわ。
「イベントってUIしか使わなくなくね?イベントの使い道他になにがあるの?」
単純な疑問に突然キレられても困惑よ。 ここのスレの住人は「C#の〜要らなくね?」って意見に過敏だからなwwwww C#信者だから当たり前かなw
要らないとは言ってなくてもそう解釈されるんじゃよw あのさぁ、c#の#って要らなくねえ?
って言ってみる。 #を取ったら、オブジェクト指向もジェネリックスもラムダ式も例外もイベントも無くなって平和になるべ? >>294
失礼しました。
サーバは、frameworkのインストールとか、既存の動いているソフトをいじるとかはできないですが、
新たなソフト(Webでもローカルexeでも)を動かしたり、フォルダやファイルの操作は自由にできます。
>一番簡単なのが他の人も書いているけどサーバー側でステータス用意して
>クライアント側がそれを取りに行くだけの処理の時だから
自分に理解できない事は脳内でスルーしてしまっているかも。
これは別途、更新したファイルのリストを作っておくとかって事でしょうか?
確かに作成されたファイルを、各リクエスト(=開いてるブラウザ、ですよね?)毎のTimerイベントで行うのは非効率ですね。
私のレベルでは、サーバでローカルアプリを動かして、何らかのファイルなりDBに出力するくらいしか思いつきません。
Webアプリ内で、同等の事とかできればいいんでしょうけど。 >>290
記録されてる。IISの設定次第。
残さないってのは、邪魔なログがある以上に困るのでやめて。
>>291
IISのログだけど、障害調査する側に回ったら、気にしてほしいと願うようになると思う。 C#だけの話では無いのですが、インスタンス作られたら自分の仕事するだけでフィールドもパブリックメソッドも無いクラスって、OOP的にはアンチパターンでしょうか >>304
パターンというのはみんなが繰り返しやるからパターンと呼ばれる
だれもそんな設計しないと思うので
何かのアンチではあってもアンチパターンではないと思う >>304
フィールドを使いたいなら分からないでもないが、フィールドも使わないんだったら単なる静的メソッドでいいだろ
あえて変なスタイルを採用する積極的理由がない >>304
コンストラクタの中で処理するのはアンチパターンに入るかも >>307
コンストラクタだけで完結させるのはやはりアンチパターンですよね
データベース相手で、パブリックメソッドが一つしかないクラスを作った時に、コンストラクタで全部やっちゃえば良いねと作っちゃったんですけど、こんなことしてるクラス見たこと無いので不安に思い コンストラクタ内で全部やっちゃうのは、
コンストラクタの責務を超えてる気がするなー 数年後とかに(または自分以外の人間が)、コードを改修するハメになった時に
うっかりその派生クラスとか作ると、ヘンな副作用を起こしそうなので
ちゃんとメソッドに分割した方がお行儀が良い、と思う >>304
既に指摘されてる通り、アンチどうこう以前に普通は無意味だからやらないけど、
staticクラスは多態できない(インターフェイスも実装できないし継承関係も作れない)ので、
多態を実現するために例え状態(フィールドやプロパティ)を持たなくてもインスタンスを
作ることは理屈上はありえると思う。
私しゃーやったことありませんが >>305
ところで設計じゃないよ
コーディングプランだからw C++でゲーム作っていた者ですが
今後はC#で作っていこうと勉強しています
C++あがりのプログラマがC#で間違い易い、
ありがちなミスを教えてください。 C++とかいう高度な言語使えないから分からんにゃーい >>315
C++プログラマがC#でよくやる間違い
・クラス名の頭にCを付ける
・名前空間やメソッド名を先頭小文字にしたりアンスコ入れたりする
・using 名前空間; を恐れる
・int を System.Int32 と書きたがる
・ループ大好き
・new を嫌う
・やたらとenumを多用する
・エラーを戻り値で返す あと、
・やたらとでかいクラスを作る
も追加で
C++はクラス定義が面倒なので心理的に大きなクラスを作る癖がつきがち C#はRADありきで細かい部分はちょくちょくリファレンスを読んで確認するしかない >>320
> ・やたらとenumを多用する
具体的な解説Please。
C#でもよく使うと思うけど。 templateの感覚でGenericを使おうとして発狂する >>323
C++で多態を使うなら便利なRAIIを捨てなくてはならない(スマポを使うこともできるが、普通は可能なら避けたいと考える)
多態を使う心理的ハードルが高くなるわけだ >>318
かなり持続性を求めるアプリ?FullGCの影響くらうのって1秒くらいだよね? 地雷原のC++を歩けるなら舗装道路のC#なんか楽勝だろと思うけど、
落とし穴があるとしたらこういう驕りかもしれんね。
C#出た頃C#によく分からん難癖付けてたのはJavaな人で、C++erはむしろ
好意的な評価の人が多かったような気がするから考えすぎかもしれんけど >>326
1秒ももたついたらクソゲーの烙印押されと思うぞ 動画でも音声でもリアルタイム処理が必要な場合は1秒でも止まると困るね。 大昔のPC-98じゃあるまいしそんな止まらないからw
何でGCの話になるといつもこうなのw
何十年前の話をしてるんだよw >>328
さすがにenumと多態が結びつかないのはオブジェクト指向の理解不足 んー、それでもC++の人が多用するって理由とそれがC#じゃ間違いって理由がよくわからん。 >>339
C++使いは多態を使いたがらないから、多態使わないならenumをなんの懸念もなく使えるから使いまくるってことかな? この流れは質問に対して必要なのか?
後今更だが
>>320
>・名前空間やメソッド名を先頭小文字にしたりアンスコ入れたりする
これは非推奨だがビルドが通るので間違いとは言えない >>341
エラーじゃないならいいってことならそれ以外のやつも当てはまるだろ?
なぜそれだけピックアップしたんだ? >>342
クラスの中にインナーenum(?)を定義したら、そのクラス継承してもそのenumが未定義になるってことかな? 最近enumが〜って言う初心者が一人紛れ込んだだけだから
相手にしなくていいよ 言語そのものの事ではないのだけど。
Windows10 の PC に入れっぱなしにしてた VS Community 2015 で C# で Webアプリ(MVC)の新規プロジェクトを作成して、
それをそのままビルド→実行するとブラウザが起動して(これは当たり前)、
サーバーエラーとなって「指定された引数は、有効な値の範囲内にありません。」て表示する&
ダイアログで「Mirosoft.VsHub.Server.HttpHost64.exeは動作を停止しました」って出ます。
HttpHost64.exeの方は連続して出てて、 KB3090034 を当てたら最初の1回だけになりました。
原因が分からないので同じような症状を経験、解決した人か心当たりのある方がいたら対処法を教えて欲しいです。 処理結果表すのに文字列やint使いたくないからenum使っているけど、他に良い方法あるかな? >>350
設計の筋が悪いんだと思うよ
たとえばデータ取得処理が返すべきは成功コードorエラーコードではなく
取得したデータそのものであり、失敗したら例外を投げる 質問があいまいな上に答えてもらった相手を例の子呼ばわりって何がしたいんだろう
文字列とint対応させて作りたいのならenum使うの自然だし変えようとしたらその設計変えるしかないわ 例外を使えないならOOPやめたほうがいい
というかプログラマやめたら?
同僚からしたらすげえ邪魔なんだけど >>355
>>358
例外の話じゃなかったのに処理結果=例外なんだ >>359
一般論的に言って例外使えない子は退職して欲しいってだけだよ
>>354に対する答えは>>358で出してるでしょ 例外も内部にステータス持つなら同じことだから、要はenumのかわりにクラスを使えということなんだろう。
必ずしもそれが筋が良いとは思わんけどな。 >>360
例外使えないとか使わない前提じゃないけどもう日本語通じないか
ファイルダイアログも使ったことないんだろうね >>360
>>>359
>一般論的に言って例外使えない子は退職して欲しいってだけだよ
>>>354に対する答えは>>358で出してるでしょ
安価ミス
>>354に対する答えは>>357で出してるでしょ >>363
ああごめん
アンカーまともに判断して意味不明な煽りだと勘違いしたわ enumで戻り値を返した先にはswitch〜case文の羅列が待っている
それは、オブジェクト指向として美しくない
とか言って見る メソッドの結果が何種類かある
どの結果なら何をするかはメソッド自体は知らない
なのでenumを返してクライアントに判断してもらう
って理由でenumならなんの問題もない
enum switch地獄に陥るのはクライアントの実装の問題なので解消できる問題だな
イベントでもいいけどイベントは管理しにくいからできれば避けたい >>348
ありがとうございます。
HttpHost64.exe のエラーダイアログは出ないんですが、「指定された引数は、有効な値の範囲内にありません。」は同じでした。
本当になんなんだろう。。 そんなもん地獄でもなんでもないわw
大袈裟なやつだなw なんでEnumダメなん?.NET標準ライブラリでもよく使われてるやん 補完効くから便利だもんね
switchとか全部書いてくれるし >>365
その主張一時期流行ったけど、今になって冷静に考えると
かなり羹に懲りて膾吹いてる感がある ケースバイケース
microsoftが使ってれば万能というわけでもないし使ってなければダメというわけでも無い ダメって言ってる奴の頭がおかしいだけ
enum の継承とか意味わからんし >>374
ステートマシン作ってそのクラスを継承すると欲しくなる ダメとは言わないがコード整理するとenumが自然と消える >>377
例えばこういう感じ
void ExternalCode(MyEnum e) {
int x = 0;
if (e == MyEnum.A) x = 1;
if (e == MyEnum.B) x = 2;
Console.WriteLine(x) }
↓
static class MyEnumEx {
public static int GetX(this MyEnum e) {
if (e == MyEnum.A) return 1;
if (e == MyEnum.B) return 2;
return 0; } }
void ExternalCode(MyEnum e) {
Console.WriteLine(e.GetX()); }
↓
class MyEnumBase {
public virtual int GetX() { return 0; } }
class MyEnumA : MyEnumBase {
public override int GetX() { return 1; } }
class MyEnumB : MyEnumBase {
public override int GetX() { return 2; } }
void ExternalCode(MyEnumBase e) {
Console.WriteLine(e.GetX()); } ありがとう。
言いたいことはわかったけど、それって整理されたの?という疑問は残る。
この例だとenumで分岐されるのがint xという単一の値を決定する処理だけだけど、
ExternalCode() には class MyEnumEx を用意して、MyEnumを使う別の処理には
また別のclassを用意して、ってなるわけだよね。 君のenumの使い方がそもそもおかしいだけで、普通はオプション的なものに使うからそうはならないだろう >>379
ならないわけだよ
MyEnumに関する責務が分散していることが問題だから整理して凝集させるわけだ
それなのに責務をまた複数のクラスに分散させてちゃ意味が無いだろう
別の場所でyを取得する処理が書かれてるなら
class MyEnumBase {
public virtual int GetX() { return 0; }
public virtual int GetY() { ... }
}
というように拡張していけばいい >>375
サブステートを定義するとかしかやりようがないような気がするけど...
enum 使わなきゃ綺麗に書けるの? >>368
最新の2017でないのなら専用スレで聞け
Visual Studio 2015 Part8
https://mevius.5ch.net/test/read.cgi/tech/1484855822/
VSは複数バージョン入れると干渉して稀に不具合起きるらしいけどその辺は自己責任 >>381
そこ集めちゃうの?という印象。
たとえば enum System.IO.FileMode のようなものを class で置き換えるとした場合、せっかく
抽象化したのに操作対象毎に異なる実装をそこに全部書くことを想定しているんだろうか。 >>384
操作対象はインターフェースで分離する
FileModeはFileModeに関連する責務だけを担当する
操作対象に関する責務はFileModeには無い むろん全てのenumをオブジェクトにすべきと言ってるわけではない
ビジネスレイヤではオブジェクトにしたほうが良い場面が圧倒的に多いが
単なるフラグセットとみなしたほうが有利な場面もそりゃあるだろう >操作対象に関する責務はFileModeには無い
だからね、例えばローカルファイルとネットワークドライブ上のファイルとで同じFileModeに対する
操作手順が異なるとした場合、それをどこに実装するかって話。
1つの class Enum に実装するのは論外として、インターフェースと実装クラスに分離するなら>>379の通り。
あるいはFileクラスに掛かる実装は class Enum 側に持たないというならenumのままでもいいじゃん、となる。
>>386
結局そうだよね。圧倒的かどうかは知らんけどw xがなにで1と2でどう違うのか分からんが
まずxをクラス(か構造体)にするべきだと思うんだが >>388
大した意味のないサンプルに深入りするの馬鹿馬鹿しくない? 例外も列挙体もLINQもインタフェースもイラネってかwwwwww 昔流行ったswitchを無くせって話は、元々はJavaみたいな関数ポインタもデリゲートも使えない言語で
ジャンプテーブルをどうやって実現するかって話(要するにいかに効率化するかって目線の話)
だったと思うんだけど、それが途中からこじつけか何か知らんけどOOP敵に美しいとか正しいって
話にすり替わった印象しかないね。
そりゃ多態使ってswitch無くした方が美しく可読的に書ける場合もあるけど、
そうじゃない場合の方が圧倒的に多い。
要するに上にも書いたけど、羹に懲りて膾を吹く類の話だよね。
今でもこういうこと言ってる人の話は真に受けちゃダメだと思う enumをクラス化でシンプルにできるのはシングルのenumで状態が決まる場合
複合的な状態を持ってるとまあ理解に苦しむコードになるよ
ifとswitchのほうが読みやすく理解しやすいならそっちを使えばいい >>389
例示されたサンプルがおかしいって言われてるって言うことをそろそろ気づこうか >>393
オブジェクト指向をやるならカプセル化や単一責務は基本中の基本
enum switchはそれを全部ぶち壊しにする
だからやめとけって世界中で言われてんだよ まあ初心者スレだしOOPわからんってのも仕方がないか…
何年後かには理解できてると思う >>378
このコートの最初が悪くてあとが良いとは限らないと思うが
これ100個あったとして
どこぞの言語みたいに一クラス一ファイル縛りがあったら100個ファイルが必要
それに見通しが非常に悪い
switchも見通しが悪いけど100個のクラスの100メソッドを検索で渡るよりまし 状態によって見やすいコードはかわるけどswitch==悪はfalseだろ >>401
すまんがまず100このenum値って時点で設計ミスだと思うぞ
普通の業務ロジックでそんな区分分けみたことないわ
大量のenumといったらせいぜいリソースIDのラベル化とか?
そんなんまでクラス化はしないよ
なんでもクラス化するわけじゃないってなんどもレスしてるよね?
まあ仮に区分が膨大な場合でもそれがビジネス上の振る舞いを持つならクラスにしたほうがいいぞ
クラスにしたら見通し悪いっていうけど
そりゃビジネスそのものが見通し悪いんだから仕方がないか
クラスっていう保護がなければもっと悲惨なことになる もともと責務と言いながら
状態を伝えるだけのenumをクラスに拡張しちゃって責務の内容を広げっちゃって
保守性を落としてるんだからまだまだだね >>405
1つ目と3つ目を比べると1つ目のほうがすぐれたコードだと思う
理解しやすい
それ以上優れてる理由はない enumが100個あってシステムのあっちこっちに分岐があります
仕様が変わりました値Aの仕様が変わりました
enumの場合:
システムをenumのAで検索
あっちこっちでヒットしたコードを慎重に整合性を確認しながら修正
もしかしたら見逃しがあるかもしれないと不安を抱えながら作業
Aを修正してるのに周りの他の値の場合の処理が凄まじいノイズになってめまいがする
コードが他の責務に埋め込まれてるのでテストは容易ではない
クラスの場合:
派生クラスAが定義されてるファイルを開く
1つのファイルに集中できるので楽々修正
Aに関する処理は全部このファイルにあるので見逃しも無い
他の値の処理が周りに無いのでクリアな視界で作業可能
クラスになってるのでテストは超簡単 enum値が削除されたら?
新しいenum値が追加されたら?
クラス化されてないと超しんどいぞ
システムにばら撒かれたenum100個なんて管理しきれないよ
OOPの言語と開発環境ならクラス100個は楽勝で管理できるけどな >>409
クラスを使うべき時は使う
そうじゃないときはswitch enumでも十分 enumなんて存在すら忘れてた
もうクセでデータ保持するクラス作っちゃってたわ
やっぱ固定値の列挙はenumの方がええんやろか >>411
それでいいよ
ビジネスが入り組んできたらクラスにリファクタリングすればいい
俺は最初からクラスにしてるけどね >>410
> システムにばら撒かれたenum100個なんて管理しきれないよ
enum 使ったことないのか?
なんか実務を知らないのに
http://iwa4.hatenablog.com/entry/2013/03/04/180521
とかを見て switch は悪 ⇒ enum 不要
とか拗らせてるって感じ w enumをクラスにするという考えがあることが根本的な設計のセンスの無さを感じる そのenumを置き換えたクラスを使う場所が100個あって後段でそれぞれ違う処理(メソッド)が必要なら
100個のクラス*100のメソッド=10000必要になる
本当に管理しきれるのかな
記号は記号でしかないと思う 君たちはさC#を使ってるけどOOPはできてないんじゃないかな?
たぶん昔ながらの手続き型のパラダイムから進歩してない
フィールドやプロパティは丸出しで
データベースの物理構造を色濃く反映したDTOを
ネストしまくり分岐しまくりのやけに長いトランザクションスクリプトで処理する
そんなコードばかり書いてるんだろ? >>416
仕切れるよ
疎結合高業務で責務がしっかり分けられてるからね
というかそれで管理できなかったらクラスという枠組みを失い無秩序状態になった同じ数(経験上もっと多くなるが)の処理なんて余計に管理できないだろ >>417
キミ自身、キミの言う「昔ながらの手続き型のパラダイム」でキミの考える最強の「OOP」をしとるんやで
もう少し脳を鍛えようか?ね? 滅茶苦茶レベルの低いところで仕事してるんだろうなあってのは伝わってくる >>418
いや、あんたの主張は疎結合どころか、enum相当のクラスに結合しまくりだろう。 >>421
疎結合だよ
クラスにすればenumを使う側はenumの振る舞いの実装を知らなくていい
クラスにすればある値と他の値の処理が同じスコープで干渉しなくて済む
こんな基本もわかってないんだよなぁ
ま、初心者スレってことか \
 ̄ヽ、 _ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
`'ー '´
○
O
,.- ‐── ‐- 、
,r'´ `ヽ
,イ jト、
/:.:! j i.::::゙,
i:.:.:| _,, ,、--、 !:;;;;|
|;;;;j ,r''"二ヽ r'⌒ヽ !;;;!
,ヘ;;i! ,,_r ・,ン.:! {〈・_,>、,, jヘi!
〈 j>j、 "´, イ `ヽ ,':::〉!
`ゝ.`, ノ、__,入 j::rソ
`゙i / ,r===ュ, `, '.:〔_
}! ! i.:::::::::::.:! ;! .!::::j::`` ー----─r- 、
, イ.:ト、 ゙===='′ ,イ!:::::!::.:.:.:. ゙, `ヽ
_ノ /j.:::!:トヽ、 ´ ̄` ,ノ´ ,リ::::.:!:::.:.. i. \
,.r'´ /.::!:::::::| `ヽ`"""´ /ノ.:.:.:.:.::!:.:. | !
/ .:|.:.:.:::ト、 リ / !:. ! |
/ l , へ\! /'7ヽ |: j |
. / l/^ヾ:::ト、! j! l 〉、 | | . |
/ i .::| i| j! | / `ー'′ ! j! ! はい!
ID:1RSLLPBxの勝ち!w
おまえらドンマイw enumの使い所を間違えるようなレベルの人間でないと共感は得られないと思う ステータス(状態)をクラスにしちゃうと色々と説明が必要になっちゃうけどな
もっと素直に設計できねぇの?
お前らの剣は無駄な動きが多過ぎる すみません。質問ですが、例外とエラーの違いって何ですか? 状態に複数の要素が絡んだ時、彼はどうクラスを設計するだろうか >>425
>>427
>>429
負け惜しみが見苦しすぎるw 例外は制御がぶっ飛ぶやつ。
エラーは、正常に処理ができなかったという意味。 状態数も20くらいまでなら把握できるが…それ以上はいやだねえ… >>428
ここで言っている例外はtry-catchでcatchで受けられる処理(Application Exceptionの類)の話
そのエラーの意味が何に対するエラーなのかわからないので違いは説明できない enumだらけの.net frameworkを、enumじゃなくてクラスにしろよなんて思いながら使ってないだろうよ >>434
ベーシックライブラリと業務システムのドメインロジックを同じ感覚で書くプログラマは居ないよ >>435
だから普通は使い所をわかってるから、こんなこと何の議論も起こらないよねって話じゃん このスレ来ている時点でみんな初心者。スレタイに「初心者用」ってちゃんと書いてあるから 初心者ならいいんだけど、初心者を卒業したと勘違いしてる ID:1RSLLPBx が痛々しいだけ 計算量の観点で比較すると
switchはコンパイラが2分探索にしてくれる場合がある O(log2(N))
クラス化はインスタンス生成された時点で仮想関数テーブルが紐付く O(1)+ディスパッチのコスト
で合ってる? >>443
switch でも状況によってジャンプテーブルにしたりするんじゃね? >>444
C#はジャンプテーブルも使うみたいですね
この比較はあんま意味ない気がしてきたので閉めます 俺以外でここまで書き込んだ奴は明日朝一で中央線に飛び込んで死ね 仮想メソッド呼び出しはJITがインラインキャッシュで展開するからコストはほぼゼロのはず 補足
展開っていってもインライン展開するわけじゃないよ
静的なメソッド呼び出しに置き換えるということ >>449
vtable を間に噛むんじゃないか? shapeクラスをベースに持つrectangleとcircleクラスの挙動をswitchで制御してるならOOPに反すると思うけど
確固たる概念も実体もないものをわざわざクラスにしてまでenumを消す理由はない
普通のマジックナンバー代わりの記号がenum
オブジェクト間でクラスがメッセージをenumで渡すだけ
上手に使えばいいだけ >>453
お前も勝利宣言しとけよ
明日以降やられてもたまらん 実体の無い物をクラスにしたらドキュメント書けよと
それだけだけどな
書かないでやってる奴はギルティ メッセージがただの記号だったのにクラスになるとオブジェクトの生成や
必要に応じてライフタイム管理が必要になる
しかも作ったオブジェクトに処理を移譲したり他のオブジェクトを渡したりして新たなオブジェクトと結合が密になる恐れがある
そこまでしないなら記号の受け渡しで済んだものがクラスの管理が増えるだけでメリットは薄い > オブジェクトの生成
状態変わらないのだからpublicなstaticメンバで持てばよい
> ライフタイム管理
そんなに気になるのならstructにすればよい
> 処理を委譲したり(最後まで)
全く意味不明 一晩経っても負け惜しみ言ってるやつ居てわろた
せめて反論したらどうなの?
>>457
メッセージを列挙値で済ませようとする発想がまずチープだがまあいい
RegexOptionsみたいな場合もあるからな
問題はドメインオブジェクトを列挙値で表現してしまうケースな
昨日から議論してんのはメッセージの話じゃないんだよそもそも
君はまだそこを理解してない どうしてもenumにこだわりたいのなら
Attribute付加
拡張メソッド作る
こんな手段はある 他のオブジェクトとの関連云々ってさ
べつに列挙値からオブジェクトにしたから急に関連が出てきたものじゃないんだよね
ドメインの性質としてもともと本質的に関連があるものなんだよそれは
それがオブジェクトにしたことによって可視化されただけ
列挙値のままだと関連があるのにそれがハッキリと見えず暗黙の結合状態になってるだけ
それはまさに最悪の状態だよ 設計書の構造に箱ができないものをクラスにするのはセンスが悪いな
こんなゴミクラスたくさん作っちゃってクラス図でどうやって説明するの? 汎用ライブラリにでもぶち込むならともかく
こんな枝葉までクラスにされるとソースの粒度に統一感がでない
ステータスなんかクラスにすんなよ
ドキュメント書くのが面倒くせえだろ
それはイコール他人に説明する手間が増えてることだと気づけよ
どーせドキュメント書かないんだろお前馬鹿だから 他人に説明するためのドキュメントは確かに書かないな
ソース見たほうが早いし間違いがない
ソースコードが設計書である
俺が馬鹿かどうかに関係なく、
アジャイルやGOAでやるとどこでもそうでしょ >>466
ワケのわからんソース書くやつに限ってお前みたいなこと言うのな ちょっと昔な感じだな
今は当たり前にドキュメントを書いてる時代だと思うけど おはようございます。(改行大杉で怒られたので行間を詰めています。
現在押し付けられて困っていることがありご教示いただければと思っております。
環境:フレームワーク4.71 + MVCフレームワーク5OS:Win2012
現在上記環境で動いているシステムがあり、
いくつかのリクエスト文字列と画像ファイル1つをマルチパートで受け取るシステムがあります。
今回、アンドロイド側のJAVAアプリからデータをマルチパートでPOSTしてくる予定だったのですが
時間不足で実装できないと言われ、データを以下のように送ると言ってきています。
(AndroidといえどJavaと同様なのでマルチパートのOutputStreamを作成して送ってくるだけだと思うのですが…。)
1.ファイルをバイト配列に変換
2.そのバイト配列をBase64エンコード
3.最終的にUTF-8の文字列にして通常のリクエスト文字列として送信
上記の仕様だそうです。
そこで上記の逆手順を…と思い
考えれる範囲で
1.リクエスト文字列をUTF-8バイト配列に変換
2.そのバイト配列をChar[]に変換
3.Char[]をFromBase64CharArrayでバイト配列に変換
とやってみたのですが
System.FormatException: 入力は有効な Base-64 文字列ではありません。
上記例外が当然のように発生します。
単純にアンドロイド側からBase64で送ってもらえればそのままデコードできるのですが
それも突っぱねられて困っています。
そもそもこの逆変換が技術的に不可能なようであれば相手側に強く言うこともできるのですが
その根拠が示せず言い出せません。
1.そもそも可能なのか?
2.手順的にはどのようにするのがよいのか
ヒントだけでも構いませんのでご教示いただければと思っております。
以上です。 >>470
欲しい形の文字列とどう違うのか比較してみろよ >>471
ありがとうございます。
あぁ、なるほど!
該当ファイルをBase64文字列にして
その差を比較してみて両者が合うように変換していってみる
ということですね。
ちょっとコツコツやってみることにしてみます。 >>470
リクエスト文字列を直接Char[]にせずバイト配列にいったん変える意味が分からない
リクエスト文字列がBASE64の文字列でなければFromBase64CharArrayは使えない
https://msdn.microsoft.com/ja-jp/library/vs/alm/system.convert.frombase64chararray(v=vs.71).aspx/html switchを無くせって話、WPFとかのMVVMにちょっと似てるね
どっちの場合も原理主義者が主張するような美しい理念がワークするのは、
ある一定の条件というか閾値を超える事例だけであって、それ以外の場合は
かえって可読性とか保守性とかが低下すると思うんだけど、原理主義者がそういう現実を
無視して何にでも適用可能な万能の方法みたいにごり押ししてる感がある 多少冗長になっても1つのルールに沿って全部書いた方が読みやすいだろ もういい加減組めちまってる奴は
次の課題を自分で探さないといけない
プログラムスキルは組めるようになったら
そこでMaxなんだよ
さっさと次の課題を探さないから
どーでもいいことが意味ありそうに思えてくる >>378みたいなケースでswitchをなくせ
って言うのはそりゃそうだなって思うけど
そもそも>>378の最初の方の組み方がおかしいだけでenumの問題じゃない
それを>>378の例だけでswitchをなくせと言うならまだしもenumなくせとか言い出すから頓珍漢なことになってるだけ >>743
レスありがとうございます。
相手が手順的にBASE64のバイト配列をUTF8文字列にして送ってくるようだったのでその手順が必要なのかな…と思いまして。
そもそも何故バイト配列からBASE64の文字列にダイレクトにしなかったのかと…。おもいつつです。 >>470
元の仕様
1.ファイルをバイト配列に変換
バイト配列ができる
2.そのバイト配列をBase64エンコード
ファイルをBase64エンコードした文字列ができる(仕様上UTF-8でもシフトJISでも同じ)
3.最終的にUTF-8の文字列にして通常のリクエスト文字列として送信
これが何の変換かわからない(2.の理由により必要がない)
まず元の仕様を勘違いしていないか?
その上で逆手順のテストコードバグっているから不必要にややこしくなってる ファイルをバイト配列に格納→をBase64に変換
↓
Base64をバイト配列に変換→バイト配列をファイルとして保存 >>470
あとBASE64の文字列の長さは4の倍数でConvert.FromBase64CharArrayにそれ以外の長さのChar[]を指定するとエラーになる
不足分を自分で埋める('='で埋める)必要があればそれもやらないと 多分UTF-8のBOMの有無でずれているんだろうな
手順がいくら増えようが不可逆になることはない >>477
誰もenum無くせとは言ってないぞ
ドメインクラスをenumで表現するなって言ってる ドメインが理解出来ていないからすれ違いのままなのかな >>483
お前が誰か知らんけど
>>376
> ダメとは言わないがコード整理するとenumが自然と消える
とか言ってたアホがいるって話 >>485
外人?
ダメともなくせとも言ってないじゃん はいはい、言葉尻にしか反論できないってことね
可哀想だな w goto文をなくせの頃から何にも変わってないな
gotoをなくせ
enumをなくせ
switchをなくせ
シングルトンをなくせ
ヘルパークラスをなくせ
一応どれも正しい
間違ってはいない
でもこういうルールは別に守らなくてもいい
どうでもいいルールなんだよ
DRY原則とかOpen/Close原則とかの設計原則の方がより重要あってね どっちでもどうでもいいよ
どうせ動くんだし
テストをしっかりすればいいだけ gotoとenumの間にはかなり差がある気がする
前方へgotoは絶対悪だから使用厳禁
ドメインのenumと同じかw
もうちょっと緩いと思うが
switchはパターンマッチとして使うのは推奨なご時勢だけどC#のswitch構文は力不足だね gotoは後方への方が凶悪だろ
前方だけに使う分にはbreakやtry-catchと大差ない 書いてから気付いたが前方参照の意味での前方か
失礼 >>490
ルールと呼ぼうが原則と呼ぼうが本質は何も変わらんよ
要するにバカの暴走を制限する為の足枷でしかないw >>495
〇〇をなくせというルールが馬鹿にたいする足枷でしかないのは全くその通り
だから俺みたいな賢人にはどうでもいい
逆に馬鹿に設計原則は理解出来ないだろう
SOLID原則が理解出来るならそいつは馬鹿ではない >>496
表面的な理解で原理主義に陥いってしまう奴は沢山いるし
本質的にそいつはバカなんだと思うよw
それは理解してないのだと言われればそれまでだがw 抽象的な話になると必ずこういうレスがつくなw
これもバカの典型w 初心者用スレで難しい話すんなよ
俺みたいな趣味グラマーが楽しめないだろ >>500
必ず?
今まで何度も辛い目に逢ったのかな? w tensorflow+keras+c#で
エロ画像を自動分類するソフトを
作って欲しいと頼まれたんだけど
c#から出来そうですか?
参考になるサイトないですか? >>510
C#以前に個人レベルじゃ無理です
そういうことはデカいところに任せましょう >>512
日経ソフトウェアの記事で
桜、ヒマワリ、バラの判別をやってる
プログラムがあるんで
これをエロ画像に置き換えて
c#からできればいいかなぁ?と >>513
内容次第だと思うが何をどう分類したいのか?がはっきりしないと
分類できない
桜
ひまわり
バラ
の様に特徴が特定しやすい分類なのか? >>513
アルゴリズムを作るところからやってみて話はそれから
とりあえずC#にそんなライブラリは無いので他のスレへどうぞ プログラム上で可能なのはせいぜい、
顔の輪郭に対する「目の位置」の違いで、大人か子供かを判別するとか
(二次絵では顔に対して大人は目を上寄りに、子供は目を下寄りに描かれるケースが多い)
そんなもんだろう
んで、どっちにせよ言語仕様の話でなく
画像解析という専門分野行きの話になるのでスレチ 大丈夫だ
ディープインパクトならやってくれる
巨乳にニットセーターってもう人妻だろ
って結論ぐらい出せるだろ >>523
ディープラーニングはそういうのじゃない分類ができる
でも人間でも一枚絵を見て判断できないのはほぼ無理 >>524
頭にディープインパクトして二度と来るな webでそういう判定してくれるサービスありそうだけどね
そういや俺もwebとかネットワーク関係まったく触ったことないんだけど、
C#でもVBでもいいけどそっち系のチュートリアルってどこかにある?
洋書は知らんけど本はほとんどないよね 試しに学習させてみればいいやんけ
これはNTR、これは人妻、これはレ●プ、(以下略)
こんなデータを大量に与える
そして最後にテスト画像を見せて当てられるかどうか Webサービスを展開する話なら、言語がどうこうっつーより
サーバOSとか機器環境とかの話になっちゃうからなあ >>527
安定するの待ってるんだろうな
機械学習と言ったらコレって確定するの ディープラーニング、機械学習の本は最近ぼこぼこ出てるよ
内容は似たり寄ったり
地元の図書館にも充実とまではいかないけど今年だけで3冊ぐらい入った
雑誌もディープラーニング特集すると部数が伸びるらしいのでよく特集される いい加減クラウドじゃ稼げないからディープラーニングに換えただけだろう
出版しても売れなきゃ返本の山だしな AWSってどこまでガチなの?
書籍も少ないし様子見してた 今更すぎるだろ
エンタープライズでも驚異的な勢いで伸びてて、あと5年もしたらオンプレサーバーなんかほぼ消滅するレベルだぞ 何を指標にガチってるのか分からんが
AWSだけで100億ドル超を売り上げるくらいには使われてるだろ まあ、企業向けのサーバーなんしょ?
閉じたネットワークの業務アプリばっかで今までもあんまり関わり無かったからなぁ >>536
イントラのクラウド移行も凄まじい勢いで進んでるぞ。
AWS上にプライベートクラウドを設定してVPNで接続するだけ。
慣れてりゃ一日ポチポチしたら出来上がり SIのインフラ屋でコード書けない奴はガチでやばいよ
従来のインフラ構築運用なんかクラウドじゃ全く商売にならん
インフラはもはや、アプリエンジニアや社内SEが片手間にポチポチやるもの ルールを無視する輩とは一緒に仕事したくないよな。ホント 馬鹿の相手する馬鹿とどっこいどっこいだわ
両方殺すにはどうしたらいいか質問していい? >>533
C#erならazulemachinlearningだろw 勉強のために作ったアプリの単体テスト始めたけどテストコードすら書けない
やっぱコピペばっかで作れただけで何も身に付いてないんだなぁ
データベースから取ってきた値の比較とかどうやるんだよ… >>545
データベース読むとこのテストはモック使うんだよ。 >>546
モックってダミーみたいなやつのこと?
せっかく教えてもらったのに何が便利になるのか全然イメージ出来ない… >>547
用語教えてもらっただけだからわからなくても仕方がない
勉強するのなら自分で使うようなツール作れ。簡単なやつでいいぞ
少しずつ機能増やしていくようにしたらスキルが上がっていく Aの値を求める
↓
AとBが等しいか
1等しくないなら
Aの値を変更して初めに戻る
2等しくなくて3回Aの値を変えている
失敗で終了
3等しい
正常に終了
というプログラムを作りたいのですが
どう条件分岐や反復を使用していいかわかりません
Aの値の変更は他アプリへの入力で、Aの値を求めるというのは他アプリの状態です
アドバイスお願い致します >>550
3回ぐらいハードコーディングしろよ
んで同じところをループや関数にすればいい >>550
C#以前の質問だと思うしいろいろあるんだけど
int count=3;
while (count>0)
{
[Aの値をGet]
if (B==A) break; //正常に終了
count--;
}
if (count>0) {[正常に終了}]
if (count==0) {[3回とも失敗]} >>552
ありがとうございます!
これでいきます! いやいや人の回答にケツつけるのもあれだけど、普通にforループ使った方が分かりやすいよw
だって要するに3回までリトライするってだけの話でしょw
const int rertryCount = 3;
A a;
for (int i = 0; i < retryCount; i++)
if((a = GetA()) == B) return true; //成功
return false; //失敗 const int rertryCount = 3;
これはちょとミスリーディングか。
こだわるなら
const int maxRetryCount = 3;
こっちの方がいいね >>554
ところ構わずケツつけてくる奴やな
みんながみんなホモちゃうでしかしw >>559>>560
なんで勝手に質問者の要件作るの? >>561
何言ってるか分からん
ただの質問
ここ質問スレだろ? >>563
じゃあどこですんの?
言語に関係無いプログラマの談話は要らんが >>545
簡単にユニットテストできるようにSOLIDなコードを書かないとダメ
ただ漠然とユニットテストやればきっとうまくいくんや〜などと考えてるようなら先はないぞ VBですみません。下記のようなコードで印刷ジョブの数を取得すると
OSの印刷ジョブ一覧ウィンドウで見える数と違うのですが
なぜ違ってしまうのでしょうか?
'プリントサーバの情報取得
Dim prtSv As New LocalPrintServer()
'印刷キュー取得
Dim que As PrintQueue = prtSv.DefaultPrintQueue
msgbox que.NumberOfJobs >>566
環境を詳細に書かないと解らない
エスパー得意だけどこれは無理w >>560
俺に聞くなw
B == GetA()
で十分でないの >>566
OSのジョブ一覧は変更の反映が遅いから
ジョブ一覧の画面でF5押しまくれ >>567
環境はWin7です。プリンタを一時停止にしてジョブを40個くらいためていくと
que.NumberOfJobsは35が返ってきたりします。
時間が経つと40が返ってきたりします。
時間差があるのでしょうか?印刷が成功したか知りたいのですが
そのジョブが見つからないのです。 >>569
そうなんですか。困りました。
下記のサイトのようなことがやりたかったのですがorz
http://jehupc.exblog.jp/8603528/ >>572
読んでないからよくわからんけど反映が遅れるのはジョブ一覧の画面上の話で実際の内部のジョブ一覧はリアルタイムで変更されてるぞ
多分のおまえのやりたいことはできる >>570で言えば35の方が正しいってことな多分
知らんけど試してくれ >>573
自分も認識としてはそうなんですが何故か想定と違う値が返ってきてしまい・・・
ちなみに.NETの問題かとも思いましたがAPIのEnumJobs()でも同じ値が返ってきました。
JOB一覧でF5を押しまくって40なのを確認してque.NumberOfJobsを取得しても
35なんですよね。で数分待つと40が返ってきたり。
直前にque.Refresh()はしています。 質問ですがWPFでCommandからModelにアクセスするにはどうすればいいですか?
例えばボタンをクリックしたらModelのBuyNumプロパティをインクリメントしてそれをViewのLabelに反映させたりしたいときなどです。 >>576
わかりにくくてすみません。
>>577
なるほど! >>578
VMにコマンドがあるんだったらVMのフィールドにModel持ってるはずだろ?
何の問題もなくアクセスできるはずだが一体何が分からないのか >>578
command生成時にVMのメソッドかVMのインスタンスをcommandに渡す
つかICommandなんて使わずにコードビハインドのコールバックからVMのメソッド呼び出す方が分かりやすいよ >>578
よくあるパターンだと、DIコンテナってのを使ったりします。モデルのインスタンスを管理するプログラムが有って
VMが起動されたときにModelのインスタンスをVMに渡すことが出来ます
Prism.Unityとか、MEFとかAutoFacなんてのがありますので興味があれば調べてくださいね コマンドバインディングとデータバインディングを一緒くたにするのは混乱の元
つかWPFスレの次スレ建ってないんだな EF Coreを使ってます
UpdateでWhereを指定するにはどうしたらいいでしょうか?
現在は以下のようになってます
ctx.Students.Update(student);
ctx.SaveChanges();
もしくは、行ロックのやり方を教えてください
レコードを更新する際に特定の条件下なら1度だけ更新をしたいです >>550
こういったのプログラミングするときちゃんと書かれてる通りに作れって思う
仕様書の書き方がクソで勝手に直したくなるのは分かるけど
enum Hoge{最初から,失敗終了,成功終了}
private Hoge Func(A a,B b,Int changeCount){
bool 等しい a==b;
if(!等しい&&changeCount!=3)return Hoge.最初から;
else if(!等しい&&changeCount==3)return Hoge.失敗終了;
else if(等しい)return Hoge.成功終了;
throw new Exception("仕様書に書いてないけど?");
} >>586
.Where(条件)追加すればいいんじゃないか? >>590
連結は出来ませんよね?定義には含まれてないので。
具体的にどのようなコードになりますか?? >>594
そういう仕事に遭遇しない
でもそんなレアだといざデスマになったときに追加人員が補充できないから人数が少ないってヤバそう try catchってどこで囲うのが基本?
メソッドの中身全部かなと思うんだけど >>600
書くなって言われたよ
イベントログに出なくなっちゃうからだって >>600
全部でも良いけど
そのメソッド内でキャッチして例外に対応できる場合のみ どこに書いてもいいけど
} catch (Exception) { }
とかやんなよハゲ、それじゃどこで例外が発生したかわからんだろが、どうやってデバックすんだ
と怒鳴られたんだろう
事なかれ主義で育てられた子が面倒を起こすパターン
事なかれ例外と名付けよう >>605
だって、このメソッドで落ちると困るじゃん例外とも言う >>605
問題はそのあと
throw ex
とかしちゃうやつ >>605
一律で書かないことになっちゃったけど
本当は何書いて欲しいの? >>609
>どこで例外が発生したかわからん
に対する補足。Java上がりがよくやるポカ。 >>610
一律で書かないと言うのは集中キャッチハンドラーがあるからでしょ >>612
なんもない
自分で書いた場所にtry catchがそもそもない IO系とかエラーが発生する可能性のある一帯だけ囲んで、こんなとこじゃエラー出ないよね?
ってとこは囲わないかな
万一そういう所でエラー発生したら、そのエラー箇所を特定しやすいように
売り物のソフトだと、好ましくないやり方かもしんないけどな 復旧可能かつ復旧を試みる事が要件で明示されてればそこでキャッチする
それ以外は基本的に全てキャッチしてはならない
グローバル例外ハンドラに任せてログ出力やユーザー通知を行う リソースの解放は原則IDisposableとusingで行うこと(try finallyは使わない) >>619
usingはtry finallyに展開されるという・・・ 1234.5678 => 1,234.5678
1234.56 => 1,234.56
123.456 => 123.456
というように、
数値を3桁区切り+小数点を含める(0埋めしない)文字列を出力するにはどうしたら良いでしょうか? >>625
複合書式指定
https://msdn.microsoft.com/ja-jp/library/txafckwd(v=vs.110).aspx
でできそうにないものは整数部分と小数点以下に分けて文字列作って合わせるしかない >>626
C#ってわざわざ面倒臭いことしないといけないんですね・・・ >>627
他の言語でできることならフォーマット用意してあるかもしれないから調べたら?
そこまで見ていないから >>625
ちょっと格好悪いけど、
ToString( "###,###,###,###,###.########" );
とでもしとけば。 Console.WriteLine("{0:#,0} ", 数値);
こんだけな それかコレな
Console.WriteLine("{0:N}", 数値); >>630-632
頭悪いレスは必要ないです
質問をよく読んでから答えてください ググる知能もない低脳に説教されちゃったよ..(^^; 一度でもやってからしゃべってんだろうかこのアホ ID:6xqAElZe は VB.netのクラスの中身の大半をC#に移動したいんだが、Partialしたらいいだろか? vb.netのコードをc#に一発変換してくれるツールがあった気がする Formは無理じゃない。 コードは変換できるのを見たことがある。なのでコード部とか
ライブラリクラスをC#にしようと思う。 >>638
https://dobon.net/vb/dotnet/links/convertcs2vb.html
sharpdevelopとかいうのでできた気がすんだよ
ちょっとやってみてよ
試す価値はあるでしょ?
ただ、動作までは知らんから変換出来てもテスト工数は減らせないぞ >>639
ありがとう。やってみてまた報告するよ。 プロジェクト分ければVBとC#共存できるんだから
循環参照が必要じゃないなら無理に変換することもないんじゃないかと >>641
VBerがそんな綺麗なコード書くわけ無いでしょ VisualBasicがなかったら
ファイルをゴミ箱入れたいとき困るじゃないですか >>634
>>635
せめてテストくらいしてからレスしてくださいね^^;
C#erレベル低すぎ >>639
バージョンによるな。こけるパターンが特徴的なので
慣れれば機械的に直していける >>644
Microsoft.VisualBasic.dllだけあればいいよ >>625
Console.WriteLine("{0:#,#.##########}", 1234.5678); >>646
すんなりは行かんかった?
Formは行けた? vb formからc# formへctl-aで全選択してコピペできるよ。
ちゃんと言語の変換をしてくれる。 あれぇ?
なんかボタンで一発変換だった記憶があるんだけど? クラスAでクラスBをインスタンス化する
クラスCでクラスBのメソッドを実行する。
クラスAでクラスBをインスタンス化する。クラスCでクラスBのメソッドを実行する。
クラスAのインスタンス名は未定の時に、clsCからB.bm()を呼び出す方法?
こういう時にどうすればいい? なんかスマートにできる方法はない?
public class clsA
{
public clsB B = new clsB;
public clsC C = new clsC(B);
}
public class clsB
{
public void bm()
{
}
}
public class clsC
{
clsB B;
private clsC(clsB bb)
{
B = bb;
}
private void doc()
{
B.bm();
}
} 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) >>653
それって vb6 ⇒ vb.net じゃないの? >>654
それでできてるだろ。何が分からないのか全く伝わらない。
あと、そのレベルならAだのBだのと話を一般化しないでズバリ何がしたいのかを書いたほうが適切な回答が得られる可能性が高いと思う。 関数をreturn する直前で実行したい処理があるのですが、
try catch finallyを使うとできますが、finally
だけ使いたいのですが、そう言うのは無いですか? >>658
複数のreturnの前の同一処理ならreturnの代わりにgotoでその処理へ飛ばせばいいだろ try { return; } finally { } でいいだろ >>658
try, finallyだけもあるけど >>663
ああ、出来るじゃない!
今日は気分がいい。さんきゅ C#初心者の頃(いまもかわらんけど)、一番悩んだのは
インターフェースが分からない。
何がわからないかというと、インタフェースって、自分で一から定義するような
ことが書かれていたが、既存のプログラムで使用しているインタフェースって
何かやってる。
何か定義しないと何もやらないはずなのに・・・・・めちゃ気持ち悪いしわからない。
システムで処理を記述したものも、インターフェースとそのまま呼んでいるから、
わけわからなくてさ〜。
なんだ、処理が記述されているものがあるのねと、理解するのにひと月かかったアホ出した。
まあ今も変わらんんけど。 設計書も書かないくせに
インターフェース定義するやつがこれまたわからん
馬鹿だろお前
って素で聞いてしまった インターフェースを機械とか現実の何かで例えたらなんですか? 強いて言えば型
100Vコンセントって型=インターフェース backgroundWorkerにおいて、ある関数を実行していて
その関数内である条件になった時にbackgroundWorkerを停止したいのですが
何か簡単な方法はないでしょうか?
backgroundWorkerで無限ループで関数を実行していて、関数の中の関数でエラーが発生した時にbackgroundWorkerを緊急停止する様に
プログラムが組みたいのです。 >>669
今どうなるの?
エラー出ると死んじゃう? >>669
マイクロソフトの方針でできなくなってます backgroundWorker内でAという関数を無限ループ実行していて
Aの中ではB、Cという関数が続けて実行されていて
Bである条件(エラー)になった時、ここで全ての動きを停止したいです。
現在はエラーが発生してそのままBと処理が続いていって死にはしませんが意図しない動きをしている感じです
戻り値と条件分岐で場合分けしていけばいいのかなとも思いましたが関数が大量にあり複雑で何か簡単な手段はないものかとお聞きしてみました >>674
キャンセルボタンは一応ついていまして
Aの実行後にボタンが押されていればCancelAsync()を使っています
AやBの関数中でもCancelAsync()と書いて一発で止められればいいのに…という感じです >>673
通常のスレッドで実行するにしても考え方おかしいと思う
下流で発生したエラーを捕捉できない設計になっています、って言っているのと同じ
C#の問題じゃないんじゃないかな >>678
それ、スレッドでタスクのようにキャンセルしたいって話だぞ。 普通にstaticのフラグ作って強引に無限ループ抜けちゃうのは? >>675
まず「止める」って発想がおかしい。
各メソッドが「止まる」ように設計しなきゃ。
各メソッドの引数に処理がキャンセルされたかどうかを返すFunc<bool>を追加して
void A(Func<bool> canceled) {...}
呼び出すときに
A(() => backgroundWorker1.CancellationPending);
とかすればいいんじゃないか >>673
Bでエラーが発生したら例外投げて、backgroundWorker.DoWork内のループでその例外を補足してe.Cancel=trueにするようにすれば。 >>678
ごめん。
>>679は全くの間違い。ぼけてた。
ただ、今回はワーカーメソッドの中から中断したいって話なので、外から強引に中断する話とは違う。 >>681
() =>この書き方がよくわからないので
とりあえず今のメソッドを全てvoidからboolに変え、エラー時にfalseを返して
if(メソッド==true)の時だけその後の処理を実行する様にしてみます
>>682
例外を投げるっていう方法がわかりません…調べてみます
みなさん色々ありがとうございました >>685
じゃあ俺が作った
「USBちんぽん」って
使ってくれる? >>686
疲れてるのか?
日曜日は10時に寝るといいぞ >>690
お前は「USBちんぽん」使ってくれるの? Chartを2個置いているのですが、このフォームを最大化した際にこの比率のままChartをフォームに合わせてリサイズするにはどのように設定すればいいのでしょうか?
Anchorを上下左右全てオンにした場合、自動的にリサイズした際に右側のChartが隠れてしまいます
https://i.imgur.com/53dfVWo.jpg >>693
補足です
直撮りで申し訳ないですが、1枚目が正常な場合です
これを最大化した時もそのままにしたいのですがanchorを全部設定するだけだと2枚目のように手前側の設定が反映されて被ってしまいます
https://i.imgur.com/ZQsJtG4.jpg
https://i.imgur.com/lR2CXSU.jpg でもanchorでは多分できないということもなんとなくわかる
比率を自分で計算して位置サイズ合わせするしかないんじゃないかと >>697
自己解決できました
今さっき使い方少し調べて試したら
TableLayoutPanelで無事目的達成できました
https://i.imgur.com/SkP2OHD.jpg >>665
あえて書くけど
個人で小規模なアプリの場合はインターフェースなんて不要
商用大規模アプリでも使ってないところが多いくらいw 基底クラスとインターフェースって何が違うんですか? >>703
そこは基底じゃなくてabstractの抽象クラスじゃね
違いは実装の有無と多重継承かなあ? >>699
大規模とかそういう問題じゃない
あえて100Vコンセントにする仕様がないとインターフェースは役に立たない
USBちんぽんを採用する理由がプロジェクトにないと意味がない >>706
君が普段やってることじゃんw
USBちんぽんの使用の押し付け
やられて嫌ならやめるべきだねw static な関数を複数のスレッドから利用するのは危険ですか?
具体的に言うと、データベースを読み書きするような処理です。
注意事項など教えて下さい。 >>710
何もしてません。と言うかトランザクションってよく分かっていません。
どうすべきでしょうか? >>711
いい機会なのでトランザクションについて調べてみるでFA なんがどうなれば危険なのかしらんが、そんなものはその関数の実装によるわ 排他制御なんて自分でやらなくてもDB側で勝手にやってくれるんじゃないのか? public static double keisuu(string mojiretu)
{
switch (mojiretu)
{
case "aaa": return 1.2; break;
case "bbb": return 1.6; break;
default: return 0; break;
}
}
全てのbreakのとこで到達できないコードが検出されました
と出るのですが何がいけないのでしょうか >>717
returnしたらbreakに到達出来ないからbreakは要らない break消してもフォールスル―とかにはなりませんよね? >>716
楽観的に考えるとやってくれないが悲観的に考えるとやってくれる。 >>709
状態を持っていない関数なら安全
フツーのstatic関数はこれなハズ
immutableな状態を持つ関数も安全
mutableな状態を持つ関数ならそれを作った人を処刑すべきw それは甘い
例えばConsole.Writeは当然状態と持たないが、
何か適当な文字列(πでも聖書でも何でもいい)を少しずつ標準出力に
書き出すメソッドを2つのスレッドで実行したらどうなる Consoleクラスってスレッドセーフじゃなかったっけ コンボボックスで中身を設定するときコードを書いてロード時に呼び出す方法以外に、visualstadioでコードを書かずに中身を設定するような機能はないのでしょうか?
そういうコントロールなどないでしょうか? >>729
画面編集モードのプロパティウィンドウから設定できるじゃん >>726
残念ながら「コンソール」と言う外部IOを持っているんだよ https://ideone.com/eFQ05c
上のようなjson形式があった場合にTestのcount,pageは問題なくデシリアライズできるのですがPersonのname,ageは下のように書いてみてもまったくできません
var Test = JsonConvert.DeserializeObject<Test>(Json);
foreach (var r in Test.status)
{
Console.WriteLine(r.name);
}
Json.netを使っているのですがどのようにしたらいいでしょうか? >>734
ワシの環境だとこれで成功したんだがどこがやりたいことと違うんやろう
https://ideone.com/4MqfUE >>735
その2 JsonConverterを使ってデシリアライズの10行目p.nameでnameが見えずエラーになります…
>>736
デバックを行うと
foreach (var r in Test.status
{
Console.WriteLine(r.name);
}
のrの部分がnullになり結果が何も表示されません
cvrl + spaceでr.name自体は出るのですが… >>737
変数名Testを違うのに変えてもダメですか? >>738
deserializeに変えてみても駄目ですね
とりあえず今日は寝て明日先輩にも聞いてみます 非同期な複数のスレッドから、staticクラスの中のstreamwriterでcsvにログを書いてます
タイミングにより、ファイル競合?ロック?するようで、一つのスレッドからしかログが出力されません
ロック解除を待機するみたいなことはどうやるのでしょうか? >>741
俺、そういうログ一生懸命作ろうとしたらスレッド毎にログ出してよって言われたよ
結局待ちが発生すると
ログの発生タイミングっていうか順序が全くの嘘っぱちになっちゃうじゃん
そんなゴミいらねーって言われたぜ
上司がいるならちょっと仕様確認オススメ Queue使えばよくね
ログ出力メソッドはエンキューするだけ
ログ出力はワーカスレッドでのんびりやればいい 素直にLoggingライブラリ使う
メンテナンスする人の気持ちも考えなきゃ いつも思うけど、やっぱAutoRrsetとかのイベント付きキューなんてないの? >>745
BlockingQueueのコンストラクタにConcurrentQueueを渡す BlockingCollectionだな
ちなみにコンストラクタに基になるコレクション渡さなかったら既定でConcurrentQueueが使われる やってみた感じぶっちゃけ難しい
片方のスレッドが超忙しいとき待ちが発生すると他のスレッドが全く動かなくなっちゃう もう書いてる人がいるけど、前後関係が重要なら文字通りバッファーを設けるだけだよね
ライブラリのQueueは使いづらいからたぶん自作することになるけど、そんな難しくない C#特有というわけでは無いですが、例えば抽象クラス「費用」を作った後、費用合計を求めたい場合、費用の各サブクラスから値を取得し合算するのと「費用合計」クラスを作って、そこだけに問い合わせるの、どちらが良い作りでしょうか >>746
>>747
へーそうかい!?
調査してみるよ。
ありがとうね 順序は気にしません
2つのスレッドそれぞれから1回/秒ずつ出力されるだけです >>752
何を聞きたいのかよく分からないw
たぶん俺だけじゃないと思う
とりあえず「費用合計」クラスは普通に考えればない
合計を求める費用を集約しているオブジェクトがあるなら、そのオブジェクトに
合計させる(LINQのSum使ってもいいし自分でメソッドかプロパティを書いてもいい)のが普通
そんなものなくても配列にでもぶち込んでLINQ使うだけじゃないの? いやなかなかいい質問だと思うよ
初心者でそこに気付けるのはいい視点だと思う
素質がある
中級者でもそこに全然思いが至らない人がいて困る
素質のない人だ
Sumを呼ぶとその時点で計算が行われるのことが困る場合がある
10個スレッドがあってそれぞれでSUM呼ばれて値が一致しないとか
そのつどDB読んじゃって負荷がかかりすぎるとか >>752
費用クラスが合って費目毎にインスタンスを作るとか
費用合計クラスとか
何かを大きく勘違いしている >>761
NG
ハナクソに顔が付いてる可能性を除外できてない ASP.NET MVCのControllerの処理で、そこだけでちょちょっと利用する
関数などが沢山増えて来てコードが数千行になって来たのだが、
そう言う関数はどこに置けばいいの?
MVPクラスの人の回答をお願いします。 partialとかブッコイて一般兵気取りかよw
見習いもいいとこだぜ。入隊前じゃねぇの? >>766
初心者スレにMVPクラスの人はいない
regionとTODOで整理したらいいだけじゃね Controllerに何でも詰め込むからだろ
Modelにやらせればええのだ 昔は相談室とこのスレにあの人が住んでたんだけどね
今もいるんだろうか? >>766
決まった答えはない
責務に応じて分割するだけ 「決まった答えはない」とか言うの決まった答えしかできない奴よくいるよねw 費用合計クラスの者ですが、以下のようなクラス設計をしました(実装は一応英語です)
public abstract class 費用
{
public abstract int 金額();
}
public class 支払家賃 : 費用
{
public override int 金額()
{
return 100;
}
}
class 水道光熱費 : 費用
{
public override int 金額()
{
return 200;
}
}
費目が増えても多態で対応できるのでオブジェクト指向しているなと思ったのですが
費用合計を出すのに都度インスタンスを作るのがなんだか野暮ったく
一般的なやり方をしているのか気になり投稿しました
このような書き方は、何か問題があるでしょうか? ちなみに、費用クラスで各費目を管理し
費用合計や各費目の値を返すメソッドを作ろうと思ったのですが
抽象クラスに「費目」という名前を使ってしまったので
テンパっています
OOは命名が難しいなと ありがちな形にこだわるタイプか
継承しなきゃならないほど金額()が込みいっているのかは置いておいて「動けばいいんだよ」 全体見てないからなんとも言えんけど
その粒度でクラス作るとクラス図ってどうなるの?
2000項目あったら2000クラス作るの?
って心配になった
あとは動けばいいよ >>779
だから悪いけど結局何が聞きたいのか伝わってないと思うよw
public static class 費用
{
public const int 支払家賃 = 100;
public const int 水道光熱費 = 200;
public const int 総費用 = 支払家賃 + 水道光熱費 ;
}
なんかこれで問題ないようにも聞こえるけどこれじゃダメなの? >>784
センスの欠片もない
キミにプログラム開発は無理 >>785
口臭いです^^
歯磨きサボらないで下さい・・・ >>786
ここまで酷いのは見たことがない
誰かが適切なアドバイスをしたとしてもキミは斜め45度下へぶっとぶだろう
上ではなく下だwww どうやったらこんなつまんないレスを返せるんだよ...
重症やな w >>787
顔赤くなってますよ^^
もっとクールなキャラだったような気がします・・・ >>792
誰と勘違いしているのでしょう・・・
IDはちゃんとチェックしましょうね^^ >>795
おやおや・・・
とても都合の良い解釈ですね^^
右も左も分からない初心者に「センス無し、問題外」なんて冷たい言葉をかけるのはやめましょうね・・・ まあ、自分が駆け出しの頃に上司にそう言われたことの腹いせにここで鬱憤晴らしてるんだろうなぁ.... 別にどう組んでも動くし
正解はないのかもな
ただ、この言語で表現できる中規模のまとまりをそんなプロパティレベルのもんに使われると粒度の把握がし難いなと
結局設計の良し悪しなんてソイツの気分だからね 例が例だから粒度的におかしいけどこんなこともできますよ的な…
Addで費用つっこんで使える
Removeとか全部略
public class 費用リスト
{
long sum = 0;
public long 合計 => sum;
List<費用> list = new List<費用>();
public ReadOnlyCollection<費用> 品目 { get;}
public 費用リスト()
{
品目 = new ReadOnlyCollection<費用>(list);
}
public void Add(費用 hiyo)
{
if (hiyo == null) { return; }
sum += hiyo.金額;
list.Add(hiyo);
}
} わざわざ費目をクラスで分けている理由のことじゃないの?
>>799だけなら別に必要ないかと。 >>777
例として固定値を返していると仮定
金額が費用の状態によって複雑になるなら有な考え方だと思う ねーな
業務上3000とか4000とか値扱ってる奴のが多いだろ
こういう組み方見るだけでうげっとする
じゃあ、構造を把握するためにクラス図でも見てみよーかって
資料開いた瞬間閉じるわ プログラムセンスのあるヤツなら最初からやらない間違いで
残念ながら矯正不能なんだわ 費目が8個なのでサブクラスに各費目クラスを作ったのですが。。。
サブクラスは何個くらいが適当なのでしょうか
10個超えるとアウトでしょうか ちなみに費目をクラスで分けた理由は、費目ごとにちょっと込み入った算出処理をするので、それぞれを閉じ込めておきたいと思いました
でも、費用が最小の粒度の方が一般的な雰囲気ですね
急遽プログラムをやれと言われた人間なのでセンスとか言われると厳しいです >>805
ならサブクラスでいいよ
ここの連中は単純な家計簿みたいなツールを前提に話してる
そうじゃなく対象が複雑なら話は変わる >>806
変わるかなぁ?
日○とか三○でもそんなの見たことないよ
ちなみにそこだと項目数が10万とか超えちゃってるかんね
それ全部クラス作ったらw >>806
クラス分けしても悪くはないですか
ありがとうございます
ただ、費用の抽象クラスを費用クラスにしてメソッドを各費目算出とすると、メソッドに「費用合計算出」を作っても違和感が無いかなとも思い
プログラムは難しいとしみじみ思いました >>807
対象としてるドメインが違うだろ
呆れるわ 業務アプリの設計なんかDFD描いてトランザクションスクリプトでいいよ
開発者全員が相当慣れてない限り、まともなオブジェクト指向でスケールさせるのは現実的に無理 >>808
> ただ、費用の抽象クラスを費用クラスにしてメソッドを各費目算出とすると、メソッドに「費用合計算出」を作っても違和感が無いかなとも思い
個々の費目で合計なんて求めようがないと思うが...
合計の算出は費目を束ねるクラスでやるべき話じゃね? >>811
余裕っしょ
設定数100個の部品が100個あっただけでもう一万よ
でかい機械で部品数たった100個とかありえないから10万は確実に超える
もっとあるだろうなぁ >>805
にわかプログラマーならオブジェクト指向に拘るより
もっと単純な仕組みでやったほうが良いね
目的がオブジェクト指向になって簡単なものを複雑にしてる気がする 急遽プログラムやれと言われてこれだけオブジェクト指向理解したならすごいな >>808
非常にセンスが良い
自信持って良い
注意点はおかしな現場(こっちの方が多数派だったりするがw)へ行った時に絶望しないことかな 授業でC言語ちょっとやっただけでオブジェクト思考はちっとも理解してないから>>777がそんなに悪いのかわからない
費用ってクラスを使って家賃、光熱費のインスタンスを作るようにしたらいいのか? >>799
sum += hiyo.金額;
エラー CS0019 演算子 '+=' を 'long' と 'メソッド グループ' 型のオペランドに適用することはできません
と出るのですが、正解を教えて下さい。 元の奴が金額がメソッドになってるけど
それはプロパティになってる
というか金額をメソッドにしちゃだめ
元のコードがダメ >>822
このエラーが出ている行を
エラーが出ないように修正する方法を教えて下さい。 >>777の 金額をメソッドからプロパティに書き直す >>824
>>825
文章で説明して頂いても理解出来ないので
完全版のコードを掲載して頂けると有難いです。 プロパティが自分で書けないならここからコード書いてても無駄だよ
早く勉強しろよ 煽りでも何でもなく
プロパティが自分で書けないならここからコード書いてても無駄だよ >>822
金額をメソッドにしちゃダメな理由を3行で まあ普通に考えればメソッドなら金額計算みたいに動詞的にしろよとは思うな
日本語メンバ名だと曖昧だけど まだやっていたんだ、簡単なことを難しくするバカのお手本 初心者に説教するアホ多過ぎ
弱いものイジメはイクナイ(´・ω・`) >>752の人はたぶんネタなんだろうね。
結局何が聞きたいのか明確にしろって言っても答えないし
ネタのつもりなら何が面白いのかさっぱり分からんが
こんな曖昧な質問に曖昧なまま答える奴も頭どうかしてると思うけど >>838
費用のようなものを費目単位でクラス化したのですが、一般的にはどうなのでしょうかと質問したつもりですが、意図が伝わらなかったみたいですみません
結論としては、費用をクラスとし、費目メソッドを数分作る方が一般的なのかなという結論に辿り着きました
色々と参考になりました >>838
モデリングの対象次第で答えが変わるもの、答えようが無いということなのでしょうね
最近やっと覚えた抽象クラスを使いたかっただけかもと言われたらそうかも知れません
反省しています 最後にすみません。ある条件で作業時間×レートが費用になるので、費用クラスと作業時間クラスを費用算出メソッドを持つインターフェースで継承させようと思うのですが、インターフェース名が「費用算出」はセンスが無いでしょうか?
インターフェースを使えばコードが仕様を語ってくれるのではと期待しているのですが基本情報資格も持っていない自分にはこれで良いのか解らず
実務経験豊富な諸兄にお尋ねしたい次第です >>814
お前は費目の意味わかってないだろ...
部品一個一個に異なる費目がつくんじゃねーぞ w
クラスとインスタンスの違いも理解してないと見た >>837
てか、説教してるつもりの奴の方がレベル低いし w >>842
俺は算出って用語をあまり見ないから少し違和感あるけどまあそれで違和感ないならいいんじゃね >>844
違うよ
こんな細かい項目クラスにしちゃって全体の粒度はどうなるの?って話 やっぱり設計のときにクラス図書かせるべきだな
あまりにも小さい項目いちいちクラスで構えるつもりならそれも全部
クラス図として書いてもらおう >>847
だから費目が10万とかはあり得んだろって話
うちの会社はそこそこの規模で結構色々手掛けてるけどそれでも経理関係の費目コードは50ぐらいしかない
当然大分類、中分類、小分類と階層化されてるからそれに合わせて継承させればいい
まあうちの会社の情シスはそこまでやってなくて費目コードを見て分岐してそうだけど w >>849
じゃそれでもいいけど
それだけで50個クラスできるんでしょ?
クラス図どうなるの?クラス50個作るん?
って言いたいわけよ
結局設計ってさ
わかりやすいか
わかりにくいか
だけなんだよね
上下のわからんクラスって粒度を
そんなちっぽけなもんに使うと
全体が見えなくなっちゃうんだよ
費目は少なくてってそれお前の環境がそうってだけの偶然でしょ?
この方針はオススメできないね俺は
まあ、どう組んでも動けばよいのであくまでオススメの域 50個のクラスができるものをクラス使わずにごちゃ混ぜにしたら余計にわけわからんだろ
こういう話題で数が増えたらどうするの?って反論するやつが必ず現れるけどそれ墓穴掘ってるだけだぞ >>843
レートクラスは必要かも知れないですね
まだまだ考慮不足でした データが構造を持ってしまうと、別の使い方をする時に手間が増えるだけなんだよ
データはデータでクラスにする必要なんかまったく無い >>850
> クラス図どうなるの?クラス50個作るん?
必要なら作るだけだろ
> 上下のわからんクラスって粒度を
> そんなちっぽけなもんに使うと
> 全体が見えなくなっちゃうんだよ
それお前さんの管理能力の問題...
> 費目は少なくてってそれお前の環境がそうってだけの偶然でしょ?
世の中の会計ソフトとか見てみな
もしくは自分の会社の経理担当者に聞けばわかると思うよ
> この方針はオススメできないね俺は
別にお前もそうしろなんて言ってないから勝手にやってなよ >>854
残念ながら、世の中の会計ソフトなんかほぼ100%トランザクションスクリプトだよ >>851
好きなようにすればいいよ
ただ、お前のクラス図に50個のクラスが並ぶだけ 費目、時間単価、時間がそれぞれ独立したクラスか
めまいを禁じ得ない で、最終顧客がのぞむ要求に答えられるアプリケーションなのかと 全体を把握しないと作業に取り掛かれないなら
既にクラス設計として破綻してるとしか 結局要件があいまいだから何とも言えんけど普通に考えれば費目ごとに派生するのはないね。
せっかくC#にはデリゲートがあるんだから、費目で違う処理はコンストラクタで
デリゲート食わせて対応できるし、その上でプロトタイプパターン適用した方が分かりやすいと思うよ。
もちろん費目ごとの固有の処理が費目固有のプロパティに依存するような場合は
継承を使うしかないけどね 費目はクラスじゃなくてデータにするべきものでは在るが、初心者が「そう言われたから」って理由でやるより
何故そうなのかを理解してやるのは悪いことじゃない
自分で考える人を挫くスタイルはあまり感心しないな 種類によって振る舞いが違うって要件なのにデータで扱うとか呆れるわ
どんだけswitchする気だよ > 自分で考える人を挫くスタイルはあまり感心しないな
マウントしたいだけやろ
今回は質問者の方がレベル高いからアホみたいなことになってるけど w >>865
アホ
全く別のデータ項目をどうやったら混同できるんだ >>867
全く別のものを混同して同じデータ構造でごちゃ混ぜに扱おうとしてるのがデータフロー派だぞ
俺や質問者は異なる物は異なるクラスにしろっていうオブジェクト指向派な
むしろ真逆だわ >>868
何でこんなくだらないものいちいちクラスにするんだ
クラス図書かないからこんな蜘蛛の巣みたいなクラス図作って平気な面してんだろお前 >>868
混ぜて使いたいからクラスにするんだと思ってたんだが違うのか?
全く別物として区別して扱うんなら行全体を1クラスにして複数のフィールドで持つのと大差ないと思うけど? 費用と言っても材料費、人件費、、減価償却費、貸倒引当金など性格や扱いの異なるものを同じ基底から派生させるのはどだい無理がある
集計したいだけなら金額を取得するインターフェイスを実装する方が賢い >>869
アホほど条件分岐書いて平気な顔してるやつに言われたくない
きみさクラス図どころかオブジェクト指向すらしたことないだろ?
>>870
同じ規約で異なるものを集めるのと
異なるものをただひとつのものとするのと
全く違うことだ
混ぜるという言葉の使い方を見極めろ List〈string[]〉の型をstring[]の特定の列をキーにしてソートしたいんですけど
List.Sort(x => x[1]);
のような書き方はできないのでしょうか?
List〈class〉を用意するしかないのでしょうか?多分Listの中の配列にもLINQ使えそうなんですが・・・
テストで試しに動かしたいだけなのにわざわざclassを書くのが大変なので・・・ >>873
Sortは過去の遺物
OrderBy使っときなさい >>872
でもさ
クラス図書いたら君のはこんなくだらない処理でクラスが50個も並んでるんだぜ
どの辺がいいプログラムなの?
他のも合わせれば5-600は行くんじゃない?
正しいクラス図なんて一度も書いたことないっしょ?
おそらく資料見てもこのクラスは記述があるけどこのクラスは記述がないなぁ
ってもんを平気で作っちゃうでしょ? >>875
そのドメインがそういうものなら何百クラスだろうがクラスで書くのが正しい
それがそのドメインでは最も簡潔で正しい姿なんだよ
そこを曲げてデータ区分や条件分岐で雑なコードを書いたら
クラス数は増えないかもしれないがコードの複雑度が爆発的に高まるだけ
なぜなら数百クラスが個々に持つべき振る舞いが同じクラスに区別なく同居してしまうんだぜ?
ろくなことにならないよ >>874
OrderByも試したんですがこのラムダ式だと意図した動作にならないです
とりあえずList〈class〉で素直に書いてみますが、ラムダ式のキーに配列やListのインデックス指定して使うのは無理なんでしょうか? >>873
>型をstring[]の特定の列をキーにしてソートしたいん
ってどういう事ですか?
型をソートするの意味が分かりません。
初心者なので詳しく教えて下さい。 意図した動作にならないのをバグっていうんだと思いますw >>876
そもそも設計書で四角で囲って強調すべき単位なの?費目って
オブジェクト指向も自分解釈でおおよそ一般人がオブジェクトなんてしない単位でオブジェクトを作ってるよね? >>876
結局DBに入れて永続化しなくちゃいかんわけで、その用途考えると数百のクラスとかありえんのさ
EFで扱える範囲で物を考えたほうが良いよ >>878
ちょっと説明不足してたので補足
List〈string[]〉
{
{"1", "aa", "1個目"},
{"2", "bbb", "2個目"},
{"3", "abc", "3個目"},
{"4", "dddd", "4個目"}
}
の形があった場合、string[1]のところを基準にソートさせたいってことですね
public class test
{
public string id{get; set;}
public string text{get; set;}
public string discription{get; set;}
}
みたいな形式だった場合
list.OrderBy(x => x.text);
と同じ動作にしたいということです >>882
そこが分からない人はいないと思うよw
逆に何が難しいの
list.OrderBy(x => Integer.Parse(x[0]));
とか、
list.Sort((x, y) => Integer.Parse(x[0]) - IntegerParse(y[0]));
ではダメなんですか? あ、やってもーたw
IntegerじゃなくてInt32ね >>883
classでも試してだめでした
それで動かなかったので質問したのですが、classもソートされなかったのでデータ側の問題かもです
さっきのダミーデータでちゃんと挙動するか試します >>880
質問者のドメインでは書くべきものだよ
振る舞いが異なる別のものだからね
それが数百種類でそれぞれ異なるような複雑なドメインなら書くんだよ
無理やり1つのレコードに押し付けちゃダメ
逆にドメインそのものがシンプルで1つのクラスで表現すべきならそうする
きみのおかしな点は質問者のドメインを無視してきみの頭の中にあるシンプルなドメインを前提に話を進めようとするところだな
独りよがりってこと
>>881
実装はどうとでもなる
RDBにこだわる必要もない >>885
classってのが何のことかよくわからないけど、OrderByの方使ってる?
LINQのメソッドはコレクションをのものを並び替えるのではなくて
並び替えた列挙オブジェクトを返すんだけど、そこを誤解してるなんてオチではなくて? 書き方がわかりませんということだから並び替え方法とは違うように読めたけどな
list = list.OrderBy(x => x[1]).ToList();
もしくは
list.Sort((x, y) => x[1].CompareTo(y[1]));
とかだろ
OrderByはシーケンスが返ってくるからListにしたい場合はToListが要る
Sortは直接並び替えてるので前の状態も欲しい場合は事前にコピーしておくかな >>888
ありがとうございます
var a = 〜
って感じで受け取っててVSで中身無いけどどうなってるの??
IOrderedEnumerabel〈〜〉型ってなんだ?ってなってましたけどforeachに直接入れないとダメなんですね
使い方間違えてました
>>887
これでした、すいません >>889
あぁToList()を忘れてました
あやふやな記憶で使っててToList()使うって教わったのにすっかり忘れてました
型の返り方の説明見て、正しい扱い方覚えないといけないですねすいません
ICollectionみたいなやつとか、抽象化されてるからToListでListに明示的に変換しないとあかんやつでした >>890
てかその構造のデータをstring[]で扱わなきゃいけない理由が何かあんの? >>892
試しにデータ群扱う時にclass宣言したり、大量のデータを型分けするのがめんどいからこういう扱い方できると楽ってだけですね
この使い方ならcsv形式にsplitでListぶち込むだけでやれるので宣言項目少なくてテストするなら楽ってだけです
DBから持って来るときは文字列型じゃなければToStringかけたりとかありそうですが
最近はEF使ってるので楽ですけどね >>894
Visual Studioならjsonからクラスを自動生成できるからクラスの方が扱いやすいけどね。stringとHashtableまみれのコードとか絶対メンテできない… >>896
こんな機能あるんですね!
interfaceのメソッド自動実装ぐらいしか知らなかったのでこういうの積極的に使いたいです http://yossk.hatenablog.com/entry/2015/02/23/070546
ここの「4-3散在する情報」のサンプルコード
川俣晶の本からのコピーなんだけど
Runメソッド内で値設定したあと
CalcDistメソッド先頭で値をリセットしてるから
常に計算結果0になるように見えるんだけど
なんか俺読み間違えてる? >>886
はぁ?人件費がクラスに?
センス悪いじゃん >>900
人件費と光熱費が異なる振る舞いをするなら別のクラスにするのが正しい
センスの問題じゃない常識の問題 オブジェクト指向は物事を複雑にするためにあるモノじゃ無いぞ。
オブジェクト指向を目的にしてどうするwww 動く動かないとセンスの有無は別の話
理解力無さすぎだろ w >>904
正しいとかおかしいよな
どう組んでも動くし クラス図書かないやつは客観的に自分の設計を見ることができない
だからこんなプロパティ単位のものクラスにして
クラス図を蜘蛛の巣にしちゃっても
それを汚いと反省する機会がない
ただし、どう組んでも動くのであくまで俺の持論 費用クラスの者ですが、色々なアドバイスありがとうございます
参考になります
>>902
どう組んでも動くの精神で、前任のパートさんが凄いの組んでくれたので、オブジェクト指向を意識し始めました
クラスどころかイベントリスナーのメソッドというのでしょうか?
そこから共通関数すらなく処理されているので、なんとかしたかったのです
ドメイン層とアプリ層とインフラ層が渾然一体となっていると、どう手を付けて良いのやら 必要最低限だけ修正しろ
コードのきれいさは主観
他人のコードはすべて糞コード >>908
お前のはプロパティ単位もクラスになってるからさらにカオスだな
初見で見た人間がそのたくさんあるクラスの依存関係がわかるといいな と、プロパティ単位とか意味不明のことをつぶやいており当局は措置入院の必要性があると判断している模様です 残念なのはおそらくこいつはコードレビューとかしたことないね
クラス図と基本設計書との不一致とか設計書のレビューもやったことない
このレベルでクラス図なんて書いたらごちゃごちゃしてなんだかわからないだろ
見難いよって誰からも指摘されたことないから当然伸びない
修正が聞かないまま今に至る >>908
え〜、今更オブジェクト指向なの?
c#はマルチパラダイム言語なのに >>915
ちゃんとした質問ならまともな答えが帰って来る。
トンデモ質問はスルーされるかネタにされて遊ばれるw >>912
素人だろうね。
ギョーミーなアプリ開発の経験者に費目毎のクラス化なんて発想はない。
社内のパソコンマニアに白羽の矢が立っただけ。 >>919
俺が言ったのは本当にプログラミング初体験なのかよってことな。 >>920
大学出てりゃプログラミング初体験なんてことは無いだろうな。
プログラミング教育義務化なのでプログラミング初体験者ゼロの世の中になるw >>805
>急遽プログラムをやれと言われた人間なのでセンスとか言われると厳しいです >>908
昨日も書いた((>>863)けど、費目ごとに派生クラス作れ、なんて話は真に受けない方がいいと思うよw
処理の委譲はデリゲートでもできる。 >>918
自称上級者なんだろ
今度はデリゲートとか言い出しちゃってるし
自分の知ってる単語ならべてるって感じ w >>923
急遽と言っても半年以上OJTの形で作っているので、変数、関数、クラスが何なのか程度は理解しています
で、費用と費目は抽象クラスを使うのに絶好の課題ではと初めて使ってみて、世間様ではどう思われるか聞いてみたら、そんな関係には使わないと指摘された次第です ズブの素人でも手続き型プログラムを一ヶ月で作れるようになったのは、visual studioの支援とC#の解りやすさのおかげだと感謝してます
ゆえに急遽突っ込まれたのかも知りませんが >>926
結局ね、データってのはDBに保存したり手で入力したりするものなので
データごとにクラスが変わったりすると破綻するんですよ
クラス分けは集計には便利かもしれんが、全ての工程でどうなるか考えて設計しないとね >>927
ズブの素人が1ヶ月でc#をそれなりにマスターするなんて凄いわ。
オレは無理だ (ーー;) >>929
最初の二ヶ月は前任の人が引き継ぎ兼トレーニングしてくれたのでブートは早かったと思います
そこから半年でやっと継承を触ったので、成長曲線はそこまで急では無いかと
比較が解らないですが仮に成長が早いとするとC#が非常に取っ付きやすかったのが大きいと思います
基本情報試験のアルゴリズムとかさっぱり解らないので、プログラム能力は経験相応に低いと思います >>913
PM交え前任者とコードレビューをしましたが、三項演算子とLINQは見難いと指摘されました
手続き型より宣言型のが良いとネットで見たのですが
逆に前任者が書いた4重ネストのfor文にifelseが連ねてあるコードはいくら頭をひねっても理解できず
数字の動きはステップ実行で見れるのですが、だから何って感じになります
ゆえに知識を整理したくなり初めて抽象クラスを意識した次第です 優秀だね
ここにくると馬鹿になるからもう来ない方がいいよ >>907
素朴な疑問ですがプロパティが大量に並ぶのとクラスが大量に並ぶのはどちらが好まれるのでしょうか
個人的には、クラス内にプロパティがギッシリという光景も凄いなと思うのですが
私の知らないテクニックで隠蔽できるのかも知れないので解りませんが
なおデリケートはイベントリスナとして使われてる程度の理解しかなく使いどころがピンと来ていません
精進します プログラミングしたので評価してください
archive.isに定期的にアーカイブさせるプログラムです
https://dotup.org/uploda/dotup.org1417700.zip.html 👀
Rock54: Caution(BBR-MD5:1322b9cf791dd10729e510ca36a73322) 間違えてプログラムだけ上げてしまいました
こっちはプロジェクトです
https://www.axfc.net/u/3872901 >>933
そんなのトレードオフに決まってんじゃん >>933
何べんも言うけどさ、結局要件の詳細が分からないとどういう実装方法が
ベストかなんて何とも言えんよ
妄想込みの印象論としては費目ごとに派生クラス作るなんて筋悪に感じるなとは言えるけど いつから「評価してもらうスレ」になったんだよ
せめて相談室でやれよ ちょっとだけ見たけどやはり初心者ですねとまだ短いにも関わらず読みづらいコードになりそうですねということかな
一行が長いところは絶対ダメとはいわないけど大体クソコード >>933
もう手続き型の組み方で良いんじゃないの?
オブジェクト指向はプログラムを分かりやすく保守しやすくするために出来たもの。
変なオブジェクト指向に拘って物事を複雑にするのは本末転倒。 意味なく一行が長いのを見るとどんなエディタで書いてるんだろうかと思う
あとは一行でつなぎまくってるのを見るとデバッグがめんどくさいだろうなと思う >>945
120行目のことでしょうか
それとも出だしのメッセージボックスでしょうか もう見るつもりはないから忘れたけど後ろの方にあったメソッドは内容をもっと見直したらいいと思う
けど初心者はこんなもんだろ >>946
メソッドの結果を受ける段で概念的にわかりやすい名前で一度受けたほうがいいと思う
何々Textとか何々uriとか
あとは個人的な感想として成功じゃなくて失敗をbool値で受ければいいんではないか
bool 失敗=false
catchで失敗=true
>>948
まあこんなところで聞くやつが悪い >>933
小さなクラスが大量に並ぶのがオブジェクト指向の正解 >>950
俺はトレードオフがオススメ
ちょっとした修正でクラス図まで書き直す必要ありますはお客に印象悪い
どういう設計してんの?って聞かれる >>951
コードが変わるならドキュメントも同期させるって当たり前のことだよ
ちょっとした修正だからドキュメントは変えなくていいって、それは本来ドキュメントに書かれてなければならない事が書いてないだけ
手続き型の設計ではそういう手抜きがよくあるけどね >>953
じゃあそうやって客に言えば?
俺とお前の資料を比べたときに
同じ修正量でもお前はセコセコ動いてなんだか余裕が無さそうに見えるから 他人に誉めてもらわないと張り合いが出ないのはわかるが
ここは初心者しかいないんだからレビューがまともに帰ってくるわけがない いまソースコードにコメント付けたので評価してください >>955
余裕がなさそうに見えるからwww
わらっちゃった
余裕を演出するためにやるべきことをやらずに自分を追い込んで最後には余裕なくすんだろうなキミは >>958
実際お前のやり方だと
ほんのちょっとの変更でもう
クラス図から手を入れなきゃじゃん
これって変更に弱いってことじゃないの? >>958
それでいいんだよ
コードの綺麗さは人間の主観だろ
だったら自分のコードじゃなくて人間を見なければ成長はしないよ >>959
手間がかかるから変更に弱いという考え方しかないのか?
ショートコーディングが至高ならC#じゃなくてスクリプト言語やった方がいいぞ
コード修正におけるOOPのメリットはタイプ量や作業量の少なさじゃ断じてない
わかりやすく整理されたコードをわかりやすさを維持したまま変更できることがメリットな
そりゃこだわらなきゃ手短に修正することは簡単だよ
例えばちょっとしたフラグ変数やif文を追加すればクラス構成を変えずに素早く修正して目の前の問題を解決することはできる
ローカルな修正だからドキュメントの修正も軽微で済むかもしれん
でもそれを積み重ねていくと気が付いた時にはもう手に負えなくなってしまうんだよ >>960
コードの綺麗さは計量可能
常識的なことだぜ
人間を見なければ成長しない(キリッ)なんて意識高いっぽいけど意味不明な戯言を言う前に
まずは君の仕事を人並みにこなせるように基本的なことを勉強しなよ そんなことはない
オブジェクト指向はケースによって処理ががらっと変わるような場合の対処は得意だが
細部が細かいルールでちょこちょこ変わるようなのは大の苦手だ
おとなしくIF文使ったほうがいいケースはたくさんある、というかそっちが普通
あとフラグ変数まみれになるのはたぶんOOP以前に構造化プログラムができてない >>962
計量可能なのはコードの複雑さだろ。
将来的にはディープラーニングでカラオケマシン並みの採点ができるかもだが。 >>927
あなたのレベルはこのスレを遥かに越えてる
汚物に汚染されない方が良いよ >>963
細部の修正はOOPの場合、メソッド内とかクラス内で完結するから、非常にやりやすい
苦手どころかむしろ得意な分野
手続き型だと逆に、同じ処理があちこちに分散する傾向があるから、些細な修正が思ったよりも広範囲で大規模な修正になることが少なくないね
つうかまるでOOPではif文を全く使わないように聞こえるのが気になったな
クラス内では普通に使うぞ >>964
コードメトリクスと言って割とポピュラーな分野だよ >>931
向上心の無い「おじいちゃん」達とは程々に付き合うのが吉 >>961
いや、変更に弱いじゃん
クラスぶっ壊して組み直さなきゃいけないんだし >>971
クラスをぶっ壊すほどの変更ならなおさらだよ
今あるモデルが根本的におかしいという現状把握
新しいモデルへ推移するための道筋
オブジェクト指向ならこれがはっきり見える
クラスがなかったらモデルもないのだから現状が正しいのかそうじゃないかの判断すらおぼつかない
新しいモデルもないからどうやって変更すればいいのかもぼんやりとしか見えない
現在地点も目標地点もよく認識できないんじゃこわくて動けんよ 今時こんなにオブジェクト指向を信仰してるやつも珍しいな >>972
だってお前1メンバ変数1クラスの勢いでクラス作るじゃん
人件費なんてクラスにしねーだろ
こんなことしてっからちょっと変更があったらもうクラス図書き直しじゃん
設計が悪いよ >>933
> 素朴な疑問ですがプロパティが大量に並ぶのとクラスが大量に並ぶのはどちらが好まれるのでしょうか
そもそもプロパティとクラスって全然違うものだからどっちがいいとかはない
クラスとインスタンスの違いがわかってない奴の戯れ言だからそう言うのは無視でいいよ
> なおデリケートはイベントリスナとして使われてる程度の理解しかなく使いどころがピンと来ていません
デリケートは一部の処理を動的に変えたりしたい時や外部から必要な処理を与えたい時に使うものだから必要になるまで覚える必要はない
>>863とかは自称上級者のうぬぼれテクなので真似しなくていい
> 精進します
今のままでいいから頑張ってね >>974
アセンブラガー
って話になるからほどほどにしときなよ >>976
いろいろ語るに落ちてるね。
こういう人ってARGBの組み合わせの数だけクラス作るのかなw
処理もデータと同じで変数に代入して柔軟に交換可能であるなんて
発想はCの時代からあるし、高度なテクニックでも何でもないけど、
この程度のことを理解してないから「自称上級者のうぬぼれテク」に見えちゃうんだろうね >>975
そりゃするよ
1変数のクラスは超重要なものだ
オブジェクト指向では絶対に欠かせないツール
1つの文字列変数を持った注文番号クラス
1つの数値変数を持った金額クラス
1つの日付変更を持った出荷予定日クラス
などなど
僕たちがプログラムで扱うものはただの文字列や数値や日付じゃあないんだ
そこをしっかりと認識してほしいね この上っ面だけのの現実とリンクしてない理解
主張をいうだけで論拠もへったくれもない態度
雑談スレで暴れてたやつか 大学入試程度の数学をよく理解できない人がいるのと同じように
オブジェクト指向を理解できない人ってどうしてもいるわけで
それはしかたがないことなのかもしれないね >>982
現実から目をそらさず複雑性に立ち向かうためにOOPを使う
現実とリンクしてないなのはプリミティブタイプを使う人たちだな >>978
> こういう人ってARGBの組み合わせの数だけクラス作るのかなw
意味わからん
> この程度のことを理解してないから「自称上級者のうぬぼれテク」に見えちゃうんだろうね
いや、必要もないのにドヤッてるから自称上級者とかバカにされてるだけ w >>987
1を聞いて10を知る人間もいれば、0にしかならない君みたいな人もいるわけで。
君はデータと処理はまったく別物だと思い込んでるから「意味わからん」わけ 何で争ってるのかもわからないし
間に読み飛ばされた人がいたらかわいそうだな 質問者は理解してるっぽいから大丈夫でしょ
一部の自称上級者様が頓珍漢なネタでドヤッてるだけ w >>979
馬鹿みたい
構造も変わってないのに
クラス図を変更しなきゃいけない
お前の組み方は無駄に変更に弱えーんだよ
ただ、それだけじゃん なんかメリットあるのかよと
単にプログラム記述上のお前の勝手な都合だけだろw classを使うメリットって入出力を共通化する為って意識が強かったんだけど違うのかしら・・・
整理してないところで追加項目を一つ増やしたら他の関係ない場所にも追加項目を処理する機構を作らないといけなくなるみたいな >>994
入力は追加するけど出力や処理はそのままでも動きますよって変更に対して修正しないと動かなくなるようなのを防ぐ意味合いで考えてた
追加した入力に対してはメソッド新しく作ったりして対応や既存のところに付け足すとか色々やり方はあるだろうけど 何度も言うけど、要件の詳細が明らかになってないから断定はできないが、
普通費目って聞いたら費目ごとに異なる処理(具体的な価格を計算するメソッド?)
はせいぜい1つ程度だろうと想像する。
たった一つのメソッドの動作を上書きするために派生させるなんて愚の骨頂。
アホかと。ありえない。
そんなのOOPでも多態でも何でもないよ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 23日 5時間 0分 1秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。