Java入門・初心者質問スレ Part.5©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/09/29(金) 17:53:25.24ID:XnizQSCA
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.4
http://mevius.2ch.net/test/read.cgi/tech/1498828456/
2017/10/25(水) 21:17:12.51ID:QmdhvvJR
>>327
いまはWSLあるしなー
2017/10/25(水) 21:45:19.10ID:/TUaBfz7
314です
泥アプリの作成にもRAM4GB必要だそうなので何とかしてもうちょっと新しいPC手に入れて出直してきます
ありがとうございました
2017/10/25(水) 22:42:58.25ID:RILf1WwA
泥アプリ開発ならvsでxamarinとかブラウザでmonacaみたいな選択肢もあるし
一旦言語選択から考え直してみたら
2017/10/25(水) 23:26:15.55ID:M2TcZ1xf
>>314-321
まずこの本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014

その後、この2冊をこの順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017

ここまでが基礎で、実際にアプリを作れるようになるには、数年掛かる。
アルゴリズム・OS・環境構築運用で、少なくとも数年は掛かる
332デフォルトの名無しさん
垢版 |
2017/10/26(木) 00:28:50.10ID:qkSUMYmO
クラス名からインスタンスを生成して、
そのインスタンスが保持するフィールドにダミーの値をセットする機能を作りたいのですが、
privateなメンバ変数にも値をセットすることはリフレクションで出来ますか?

class Entity{
@getter @setter
private Long age;
}
があったときnew Entity()のインスタンスとその中のageに何か数値が入っている状態にしたいです
333デフォルトの名無しさん
垢版 |
2017/10/26(木) 00:42:22.95ID:qkSUMYmO
自己解決した ありがとう
334デフォルトの名無しさん
垢版 |
2017/10/26(木) 01:29:13.40ID:N/UTfD1S
>>314
Progate行ってこい
やれそうだと思ったらスッキリ入門編
335デフォルトの名無しさん
垢版 |
2017/10/26(木) 09:58:09.89ID:/KWiwsxI
>>333
どうやって解決したかを書け
336307
垢版 |
2017/10/26(木) 20:11:51.32ID:DirVuC/B
>>323
分かりました。ありがとうございました。
2017/10/29(日) 00:13:25.42ID:jaLMlrXm
H2 Databaseに接続するプログラムをコンパイルし実行したいのですが、
クラスパスを何て書けばいいか調べても分かりません。
どなたか教えて頂けませんでしょうか?
338デフォルトの名無しさん
垢版 |
2017/10/29(日) 11:34:08.81ID:oFRxn/Jf
>>337
ここにいきなりこう書いてあるが?

http://www.h2database.com/html/quickstart.html

Add the h2*.jar to the classpath (H2 does not have any dependencies)
339337
垢版 |
2017/10/29(日) 12:46:42.34ID:jaLMlrXm
>>338
レスありがとうございます。
具体的には、javac -cp h2*.jar Main.java (Main.javaはクラス名)と入力し、
java -cp h2*.jar Main と入力すればいいんですか?
2017/10/29(日) 13:08:40.31ID:cRJ4aa/x
今時クラスパスを手動で解決するとは
mavenとかgradle使え
2017/10/29(日) 13:18:28.37ID:oFRxn/Jf
>>339
いや、h2*.jar が入っているディレクトリごと指定しないと普通はダメなのでは?
カレントディレクトリにあるならそれでも良いのかも知れんが。
342337
垢版 |
2017/10/29(日) 15:33:37.93ID:jaLMlrXm
コンパイルは通るのですが、実行できませんでした…。
ClassNotFoundExceptionとSQLExceptionが発生してしまいます。
どなたかヒントを下さい。
ソースコードは以下です。
https://ideone.com/4xrmgz
343337
垢版 |
2017/10/29(日) 15:35:28.67ID:jaLMlrXm
>>340
すいません、今回はコマンドプロンプトで書かせて下さい。
2017/10/29(日) 15:57:54.47ID:0Uo9CHxR
>>342
javacで取り込むわけではないので
javaで実行時にもCLASSPATHを通して見つかるようにしてやる必要がある
2017/10/29(日) 16:23:24.35ID:oFRxn/Jf
>>342
コンパイル時と同じ classpath にしてもダメなの?
346337
垢版 |
2017/10/29(日) 16:26:53.49ID:jaLMlrXm
>>344
はい。それは分かります。javacと同じクラスパスをjava実行時にも付けています。

実は根本的に、h2*.jarファイルがどこにあるのかよく分かってない気もするんですが、
H2 DatabaseのホームページからDL出来るh2-setup-2017-06-10.exeファイルの
中にあるんですよね?
347337
垢版 |
2017/10/29(日) 16:32:10.42ID:jaLMlrXm
>>345
はい。
なのでjarファイルの位置指定がそもそも間違ってるんじゃないかと思い始めて
いるんですが…。.jarという拡張子のファイルが見当たらないんです。
2017/10/29(日) 17:11:13.08ID:0Uo9CHxR
>>346
知らないけど
それは自己解凍ファイルなのかな
検索して実際のjarファイルを探してみればいい

コンパイル時はインタフェースさえわかればいいから
その実装のclassには通ってない可能性がある

ちゃんと何してるかから理解した方がいいと思うぞ
349337
垢版 |
2017/10/29(日) 20:16:42.57ID:jaLMlrXm
>>348
あれからいろいろ調べて、Cドライブを検索した結果、h2*.jarファイルが
見つかりました!やはり.exeファイル内には無かったようです。

クラスパスを更新したら実行(javaコマンド)も無事成功しました。
回答して頂いた方々、ありがとうございました。
2017/10/29(日) 22:13:14.03ID:ZPOHC70p
コンストラクタで引数チェックをし、例外を投げることは設計上良くないのでしょうか?例えば
class hoge {
private final int i;

hoge(int i) {
if(i >= 0)
this.i = i;
else
throw new IllegalArgumentException
}
}

フィールドiに負の数を持たせたくない場合このようにするのが自然かなと考えたのですがいかがでしょうか?
351デフォルトの名無しさん
垢版 |
2017/10/29(日) 23:14:29.92ID:ILWFk/IO
>>350
クソだと思う
値をチェックする責務は専用のクラスに任せて
それ以外のクラスに持ち込むべきじゃない
2017/10/30(月) 00:07:29.30ID:RKfFK5VC
>>350
別にいいと思うぞ

作ってからIsValidで確認するか
そもそも作らせないようにするかの違い
どっちのやり方も良し悪しがある
2017/10/30(月) 00:34:24.41ID:EdHEI0+x
空のオブジェクト作って後でsetter使って入れるのも微妙だしコンストラクタで値チェックとかしていいと思うぞ
俺ならPattern.compileメソッドみたいに自分自身を返すstaticメソッドで価チェックする
2017/10/30(月) 00:44:57.12ID:sRaOGV/D
>>350
有り得ない状態で存在できるより良い
2017/10/30(月) 00:45:02.55ID:eddodMAs
>>351
値チェック専用のクラスを作る場合どのように作るべきでしょうか
値チェッククラスでOKだった数値(正の数)をどのようにhogeのコンストラクタに渡すのかいまいち正しいイメージがつかめません
値チェッククラスのインスタンスをhogeの内部に持たせる(フィールドとコンストラクタの引数を変更する)のが良いのでしょうか?
とんちんかんな質問かもしれませんがよければお答えいただけると嬉しいです
>>352
なるほど
isValidメソッドであとからチェックするというのは思い付きませんでした
2017/10/30(月) 01:04:31.28ID:JH+/yPWP
>>350
>コンストラクタで引数チェックをし、例外を投げる
問題ない
バグでおかしくなるのが一番の問題
2017/10/30(月) 01:12:17.89ID:RKfFK5VC
Hibernate Validatorみたいなバリデーションフレームワークは一般的に作ってから確認する方式

そもそも作らせないようにするのは”always valid”と呼ばれてる
“always valid model”とかで検索すれば参考になるサイトが出てくる

長所短所を理解して使い分ける
2017/10/30(月) 01:16:09.26ID:ImI1HNcW
俺だったらPositiveNumberみたいなジェネリッククラスを作るか、@positiveみたいなアノテーション作る
2017/10/30(月) 01:51:11.96ID:eddodMAs
>>353
ありがとう
>空のオブジェクト作って後でsetter使
>って入れるのも微妙だし
私もそう思ったのですがコンストラクタで例外を投げるのは良くないというような意見をどこかで目にしたので聞いてみました
>>357
ふむふむ
個人的にはそもそも作らせないって方が好みな感じがします
調べてみます情報ありがとう
2017/10/30(月) 02:19:42.12ID:sRaOGV/D
コンストラクタとセッタに同じことを示す文が複製されるのもちょっと良くないな
2017/10/30(月) 03:04:30.08ID:nQXUW6Dj
>>351
クソ?しかし API にも new した時に例外出すやつ沢山あるわけだが、そういうのは全部クソ?
2017/10/30(月) 07:16:59.94ID:fX/oTiYO
>>360
コンストラクタで最初に値をセットして後から変更できないようにsetterは持たせないというつもりでした
(フィールドをfinalにしているのはそのためです)
363デフォルトの名無しさん
垢版 |
2017/10/30(月) 07:22:42.37ID:b9ZBDRTb
>>355
オブジェクト作る前にValidatorクラスでチェックするだけ
364デフォルトの名無しさん
垢版 |
2017/10/30(月) 07:24:54.59ID:b9ZBDRTb
>>361
全部クソ。
オブジェクトの責務をわかっていない。
2017/10/30(月) 08:14:47.50ID:JH+/yPWP
インスタンス変数(やクラス変数)は
そのオブジェクトに付属するデータだから
コンストラクタなどでデータチェックの責務を
オブジェクト自身に持たせるのはおかしくない

ただしチェックが複雑化したときに
責務を委譲するのもアリ
2017/10/30(月) 08:43:10.77ID:5RpC60IR
>>365
そのただしが問題
検証はシステムの関心ごとだから
集約するべきでオブジェクト毎に持つものじゃない
コンストラクタはオブジェクトを初期化するという
特別な処理であってここでデータチェックが必要になるのは
責務の分離ができてないシグナルみたいなもの
staticメソッドでtryCreateという名前なら100歩譲ってオーケーだ
2017/10/30(月) 08:54:32.49ID:5RpC60IR
負の値を持たせたくないのは業務の要件なんですよ!!
2017/10/30(月) 08:55:34.55ID:JH+/yPWP
>>366
>検証はシステムの関心ごとだから
>集約するべきでオブジェクト毎に持つものじゃない

責務を分離するのは重要だがそのオブジェクトの
規模が大きくなって複雑化するにつれて分けていくもの

たとえば生成の責務をファクトリに分離してもいいが
何でもかんでも全部ファクトリにする必要はない

だからコンストラクタでチェックしてもいいし
バリデータみたいのに分離してもいい
2017/10/30(月) 08:56:23.29ID:5RpC60IR
思わず激昂してしまいましたがとにかく小生が言いたいのはコンストラクタで例外投げるのおかしいですよということなんです
2017/10/30(月) 09:00:29.54ID:5RpC60IR
>>368
どっちでもいいなんていうそんな優柔不断で玉虫色な考えに真実があるわけない、あなたは思考を放棄しているに等しい、ここにはこういう値しか保持したくないんです、立派な業務要件でしょうが!!

じゃあその要件をまとめましょうよ、システムの関心ごととして切り出しましょうよ
2017/10/30(月) 09:01:41.86ID:4hMzyEUs
>>367
業務要件で例外処理を考えてるってなかなかおもしろいね
2017/10/30(月) 09:04:21.57ID:5RpC60IR
>>371
どういうこと?
2017/10/30(月) 09:06:06.45ID:5RpC60IR
もっと具体的にちゃんと説明して
小生良い事言ってるからそれちゃんと説明して
2017/10/30(月) 09:12:06.74ID:JH+/yPWP
>>370
いやそれは極端でしょ
OOPの要素はどれも使い分けじゃないの?

複雑化したら切り出すが抽象化にはキリがないので
IF文を全部ポリモーフィズムにするわけでもないし
最初から全部デザパタにするわけでもない
2017/10/30(月) 09:17:39.73ID:5RpC60IR
>>374
ifの話じゃないだろ
なんでもかんでも一緒にするな
極端なのはそなたの方

こなたが言いたいのはとにかくコンストラクタでチェックするのおかしくないですかってこと
2017/10/30(月) 09:21:09.70ID:JH+/yPWP
>>375
コンストラクタでチェックするのはおかしくない
JavaのAPIでやってるくらいなんだから
むしろやるなって方が押しつけ
2017/10/30(月) 09:22:44.13ID:5RpC60IR
コンストラクタでチェックして例外投げるのは
ようわからんけどオブジェクト作ってみるわー
でけへんかったわーゲヘヘーと言ってるようなもの
文明人のやることじゃない

アサートを使うべき
アサートは本番では動かさないからね
検証は専用のオブジェクトでやりましょう
2017/10/30(月) 09:25:45.46ID:5RpC60IR
>>376
アホかお前は、お前はアホか
JavaのAPIははっきり申し上げてクソでござる
クソがやってるから大丈夫なんだとはならんだろうが
どこがクソかはお前に任せるよ
2017/10/30(月) 09:46:48.33ID:JH+/yPWP
アサートでもいいが例外投げてもいい

つーかコンストラクタで例外投げるのが大問題なら
Javaの言語仕様でできないようにするだろ……

普通に考えて2ちゃんの一個人より
Java(API)のやり方の方がいいわ
2017/10/30(月) 10:01:28.68ID:5RpC60IR
>>379
ファイナライザでは例外投げないようにしましょう
というのがベストプラクティスだけど言語仕様ではできるでしょうに

言語仕様ってその程度のものですよ

コンストラクタでも例外投げるのやめましょうよ

2chネラーだから信用しないっていうのは権威主義的というか誰が言ってるかより中身で判断していただきたい、小生絶対良い事言ってるから!!
2017/10/30(月) 10:21:49.81ID:0VAyPn/2
どっちがキチガイかは一目瞭然だな
ありがとう
2017/10/30(月) 10:37:40.45ID:5RpC60IR
それでええんか?
議論って考えを広げるためにあるんやで
キチガイとレッテルを張っておしまいでほんとにええんか?
小生が可哀想だと思わない?罪悪感を感じない?お前のお母さんもお前には優しい人に育ってほしいと思ってたのじゃないか?
2017/10/30(月) 10:38:44.40ID:5RpC60IR
ありがとうの後にはございますを付けろ、それが礼儀だ
2017/10/30(月) 10:39:13.84ID:5RpC60IR
礼儀正しく優しい人になって欲しい
2017/10/30(月) 10:46:46.93ID:5RpC60IR
コンストラクタでデータチェックしない人になって欲しい
2017/10/30(月) 12:29:49.28ID:ich1HAGc
>>377
何が悪いか分からん。
オブジェクトの生成失敗も業務メソッドの実行失敗も、中断すべき状況になったら例外飛ばして何が悪いのか。

コンストラクタで例外飛ばすなって話はC++ならメモリの回収がややこしくなるんで一利あるけど、JavaやC#なら問題ない。
387デフォルトの名無しさん
垢版 |
2017/10/30(月) 12:30:44.96ID:FeUZMDfY
>>364
オブジェクトの責務とは?
2017/10/30(月) 12:38:10.73ID:OufZdVP7
遡及IDは嘘つかないな
ソノトキ何をしたかよりもソノアト何をしたかが一目瞭然である
便利でよろしい
389デフォルトの名無しさん
垢版 |
2017/10/30(月) 12:38:19.13ID:FeUZMDfY
>>367
なんというか、それそのものは Java 自体の問題のようにも思えるね。
つまり、unsigned が型として用意されてないからとか、PASCALみたいに数値の範囲を指定した新たな型を作れないからとかね。
まあそういう数値型のクラスを自作してしまえば良いだけかも知れないが。
390デフォルトの名無しさん
垢版 |
2017/10/30(月) 12:47:31.30ID:FeUZMDfY
>>385
そんなにそれを求めるなら最初からそれができない新言語作れば?
大丈夫。君にも作れるよ。実装までできなくても言語仕様考えてネットで晒してフォーラム作って議論してまとめ直してから作ってくれる人募集すればその内なんとかなるだろう。全てを君が作る必要はない。
2017/10/30(月) 12:53:44.32ID:6Zg8+NGr
Google Apps Scriptで
http://www.pre-practice.net/2017/10/line-bot_22.html?spref=tw
ここを参考にLINEBOTを作っていて、
文章中の特定の文字列に反応して返答するようにしたのですが、

else if (strpos(input_text, "寒い") !== false ) {
reply_text = "もう冬だね";
  }


これを挿入しても反応してくれません。
何がいけないのでしょうか教えてください。
あと質問場所が適切でなければどこで聞けばいいか教えてください
お願いします。
2017/10/30(月) 13:41:37.04ID:3rz3HBcW
たまに生成されたクラスファイルが分割されることがあるんですがどういう条件で起きるんですかね?
ファイル容量の問題かと思いきや大きいものでも分割されてなかったり…
2017/10/30(月) 13:52:19.55ID:4hMzyEUs
>>392
1ファイルに複数のクラスを書いてるんじゃない?
394391
垢版 |
2017/10/30(月) 14:17:58.64ID:6Zg8+NGr
>>391
これがPHPというのがわかりました
スレ汚し失礼致しました。
2017/10/30(月) 15:15:46.44ID:y0GY6LFV
>>392
インナークラスの悪寒…
$付いてない?
2017/10/30(月) 15:50:40.06ID:3rz3HBcW
>>394,395
色々調べてみたらどうもシリアライズ可能なクラス?というのが原因みたいでした…
お手数おかけしました
2017/10/30(月) 18:18:23.77ID:sRaOGV/D
>>362
final見逃してただけだった
それなら尚更コンストラクタだね
398デフォルトの名無しさん
垢版 |
2017/10/31(火) 08:25:04.95ID:OmcraJl8
>>359
範囲外の入力値エラーだろ

private、つまりクラス内では、戻り値でエラーを示すが、
public、つまりクラス外では、例外でエラーを示す

なぜなら、クラス内をコーディングしているのは、普通は同じ会社だから、
その会社内で規定したエラー値を使っても、見落としが少ない

でも、クラス外の場合は、クラスをコーディングした会社と、異なる会社が使うから、
そのクラス内で規定したエラー値を使っては、いけない。
なぜなら、他社の人は、クラスのドキュメントを読まずに、クラスを使うから

つまり、クラス外部の人に対しては、絶対にエラーが起こるように、例外を使う

クラス内をコーディングする人と、そのクラスを使う人は、
異なる会社を想定している。
他社の場合は、クラスのドキュメントを読まないことを想定すべき

「スッキリJava」にも書いてある。
クラスを使う側と、フレームワークなど、他社が使うクラスを作る側の、
コーディングの違い。
他社を想定している場合は、全く違う

この辺は、品質管理をやってないと知らないはず
2017/10/31(火) 08:35:40.63ID:BBLfUUwS
>>398
どうしてもスッキリの宣伝をしなきゃ気が済まないようだな
その一節がなけりゃいいのに
400398
垢版 |
2017/10/31(火) 09:49:23.34ID:OmcraJl8
「スッキリJava」では、クラスの責務を、明確に分けている

前半は、クラスを使う側の知識で、
上級編はフレームワークなど、他社が使うクラスを作る側の知識

フレームワークを作る側では、検査例外を使って、コンパイルエラーにしないと、
ドキュメントを読まずに実行した客が、実行時エラーを起こして、
電話をかけてくるから、商売にならない

本を読んで、実行時エラーを起こした客が、出版社に電話をかけてくるだろ。
それと同じで、商売にならない

だから例外にして、その例外をキャッチしない人は、実行できないようにする

サポート契約をしない、無料相談の客をはじかないといけない。
無料で見積もりさせる客も
2017/10/31(火) 12:09:41.25ID:QuyL7alo
経営の話か
2017/10/31(火) 21:22:09.98ID:BSBih/VQ
javaでWebアプリ作ってるのですがグラフ表示をしたいです
jfreechartとかchart.jsとか出てくるんですがおすすめとかってありますか?
2017/10/31(火) 21:22:56.96ID:BSBih/VQ
質問スレと間違えましたすみません。
404350です
垢版 |
2017/11/03(金) 17:28:51.99ID:AmIWbkAj
>>380
しばらく2ちゃんを見れない状況だったので亀レスとなってしまいましたが、コンストラクタで例外投げるのが良くない理由をできれば聞きたいです
405デフォルトの名無しさん
垢版 |
2017/11/03(金) 17:36:15.65ID:lQ0XoM3e
>>404
責務の分離ができてない証拠だから
406デフォルトの名無しさん
垢版 |
2017/11/03(金) 17:39:40.36ID:lQ0XoM3e
コンストラクタっていうのはオブジェクトを初期化する特別な処理を書くところ
渡された値をそのまま何の加工もせずにフィールドにお納めするのが義務なんです
407デフォルトの名無しさん
垢版 |
2017/11/03(金) 17:42:31.79ID:lQ0XoM3e
どうしても例外を投げたいならtryCreateというスタティックメソッドを作って
例外投げますよ作れないかもしれないですよということをメソッド名で
陽に示すべきだ、この処理は検証も含んでいますよと示すべきだ
なぜならば検証も含むからだ、オブジェクトを作るメソッドなのにだ
408デフォルトの名無しさん
垢版 |
2017/11/03(金) 18:39:37.30ID:lQ0XoM3e
FileStreamもコンストラクタで例外を投げるが
あの設計も大間違いだから

コンストラクタでリソース確保しようとするのが完全に間違ってる
closeの処理でリソースを解放するならばリソースを確保するのはopenだ
openの責務をFileStreamは持つべきでそれはオブジェクトを初期化する
コンストラクタとは役割が根本的に100憶パーセント異なるわけ
2017/11/03(金) 19:04:39.65ID:9CXEo34m
>>406
何もしなかったら意味ないだろ……
直通のゲッターセッターと同じただのお飾り
410デフォルトの名無しさん
垢版 |
2017/11/03(金) 19:18:22.44ID:lQ0XoM3e
>>409
フィールドを初期化するという大事な処理がある
セッターは代入だから、初期化じゃないから
411デフォルトの名無しさん
垢版 |
2017/11/03(金) 19:40:27.12ID:lQ0XoM3e
UI -> アプリ(バリデータ) -> ドメイン -> DAO
レイヤーはこのように分けてドメインから先にバリデーションのコードを持ち込んではいけない
オブジェクトをクリーンに保つためのベストプラクティス
412デフォルトの名無しさん
垢版 |
2017/11/03(金) 19:47:48.30ID:lQ0XoM3e
バグがないように引数をチェックするという目的でやるなら
アサートを使うべきだ
ただしアサートを使うのは開発時のみで本番コードには含めない
本番コードで引数チェックが必要になるようならそれは
業務要件として抽出するべきだ
413350です
垢版 |
2017/11/03(金) 20:10:50.22ID:AmIWbkAj
なるほど
405~410まではなんとなくわかりました
411, 412は私の経験or勉強不足でいまいち理解できませんでした
でも、解説してくれてありがとう
414デフォルトの名無しさん
垢版 |
2017/11/03(金) 20:17:00.78ID:lQ0XoM3e
>>413
ありがとうの後にはございますだ
それが礼儀だ
415デフォルトの名無しさん
垢版 |
2017/11/03(金) 20:19:43.27ID:EWAV0hJA
なるほど。わかった。スレが過疎って来たらコンストラクタで例外の話を出せば書き込みで溢れてスレが活性化するのだな。
時折反論を書きありがとうの後にございますを付けなければなお良いと。
416デフォルトの名無しさん
垢版 |
2017/11/03(金) 20:21:29.16ID:lQ0XoM3e
僕が活性化しちゃうおおお
2017/11/03(金) 21:17:51.19ID:xnvXDnsB
またキチガイか
2017/11/03(金) 21:35:59.49ID:Ro85MhDs
コンストラクタに不正なもの渡された場合に例外を出すことが
なぜいけないのかについては1ミリも説明されてなくて草
419デフォルトの名無しさん
垢版 |
2017/11/03(金) 21:41:52.50ID:lQ0XoM3e
>>418
責務の分離ができてない証拠だから
100ミリくらい説明してますけど
10メートルですよ
420デフォルトの名無しさん
垢版 |
2017/11/03(金) 21:42:46.79ID:lQ0XoM3e
違うわ1,000ミリの間違いね
2017/11/03(金) 21:52:44.52ID:9CXEo34m
むしろ初期化の異常で例外を投げるのは
コンストラクタの責務だろ

なぜならコンストラクタの引数で渡されたデータから
インスタンス変数(やクラス変数)を初期化するわけだから
情報エキスパートの原則からして
データの処理はデータを持ってるオブジェクトが行うのが原則

ただ処理を全部抱え込むと肥大化するから
他に委譲することは構わない
newの代わりにファクトリを使ったりするのと同じ
しかしそれは「newを使うな」ではない

「外部に委譲してもいい」のであって
「コンストラクタで例外を投げてはいけない」ではない
2017/11/03(金) 22:00:57.69ID:Ro85MhDs
>>419
責務を理解できてない典型だね
君がそういう規約で開発するのは勝手だけど
それをベストプラクティスだからとか言って
他人に押し付けるのはよくないよ
423デフォルトの名無しさん
垢版 |
2017/11/03(金) 22:01:56.36ID:lQ0XoM3e
>>421
ベストプラクティスってそういうものだよ
こういう実装もできるけどこっちの方が好ましいよねっていうものだから
そういう意味で言ってるわけよ
たとえばModel View ControllerのアーキテクチャがあるけどViewに
Modelのコードも全部書きまくっちゃってもいいわけよ
でも分離するのが好ましいだろ、そういう意味で言ってるわけよ
その真意をくみ取って欲しいわけよ
コンストラクタでデータチェックヤラナイのが好ましいわけよ
え?ヤラナイの?なんていうふしだらな誘いに乗らないで欲しいわけよ
424デフォルトの名無しさん
垢版 |
2017/11/03(金) 22:02:38.01ID:lQ0XoM3e
>>422
理解できてないことを1ミリも説明してないじゃん
話にならないよ
425デフォルトの名無しさん
垢版 |
2017/11/03(金) 22:03:47.06ID:lQ0XoM3e
自分の考える責務の分離はこうっす
自分こう思うっすとはきはきと説明できないかね
若さが感じられない
426デフォルトの名無しさん
垢版 |
2017/11/03(金) 22:42:06.17ID:lQ0XoM3e
説明を求められたら言葉を失ってしまうみなさん
427デフォルトの名無しさん
垢版 |
2017/11/03(金) 22:47:53.53ID:L9/pWClM
どんなに外部でチェックしてもインスタンス生成に失敗することはあるわけで、
そういうときに失敗を通知する手段は例外しかないわけで、
コンストラクタで例外を投げてはいけないとする方が問題だ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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