teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2017/03/01 02:31

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -27,6 +27,7 @@
27
27
  されるのが当たり前だと考えているのもあるし、移譲された処理の先で何が起きているか考えること自体が少し違うかなと考えているからです。
28
28
  それに上記の処理には再利用性があります。
29
29
  例えば、TCP:IP通信でJson返したいんだよね、とか、WebのレスポンスにJson入れたいんだよね、という時には、ファイルストリームではなく、そちらも大体Stream関連のクラスが用意されているもので、わずかな手間で結果の出力先を変えることができます。
30
+ Validation関連の処理は書き込み前にも使えますが、フロントエンドでUI上で簡易なエラー検査処理を行う際にも使えます。(サービスとクライアントが分かれている場合、検査が2回行われるのはありえる。)
30
31
 
31
32
  fopenの前にやってるobjectsの走査処理と、書き込み操作処理を合わせるというのは、この完全に分割できる二つの処理を、なんとか混ぜあわせて、処理回数を削ろうとしているのに等しいです。
32
33
  ストリームに一旦書き込めば1個のループに書き込みつつ、ファイルに書き込まないということはできます。しかし、それはつまり書き込む前に一旦メモリに全部書き出すということで今以上にリソースの観点からすればスマートではないやり方になると思います。ストリームがファイルストリームなら結局ファイルができてしまいますし。

2

先にまとめを追加

2017/03/01 02:31

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -1,4 +1,7 @@
1
1
  現状の作りで正しいと思います。
2
+ 取りうる選択肢は以下の2つだけです。
3
+ ・現状の形を維持する
4
+ ・正常なデータのみが書き込み処理に到達するようにする
2
5
 
3
6
  1回チェックしてから書き込むので普通ですから、物凄くピーキーな処理以外ではあまり気にしない方が良いと思います。物理的に書き込む時間とインメモリをチェックする時間には大きな開きがありますから。
4
7
 

1

会社名の誤りの修正

2017/03/01 02:29

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  fopenとか生書きで直後にobjectを走査するコードがあるとしたら、走査回数を気にするよりよほど問題だと思います。
6
6
 
7
7
  質問の要件で、僕の場合のC++における理想のコードは以下のような形です。
8
- (以下Delphi社製のC++Builderを使っているコードなので違和感があるかもしれませんが)
8
+ (以下Embarcadero社製のC++Builderを使っているコードなので違和感があるかもしれませんが)
9
9
  ```
10
10
  void WriteObjectsToJson(String path, const std::vector<Object> &objects)
11
11
  {