Java初心者のためのスレッドです。
※前スレ
Java入門・初心者質問スレ Part.4
http://mevius.2ch.net/test/read.cgi/tech/1498828456/
探検
Java入門・初心者質問スレ Part.5©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/09/29(金) 17:53:25.24ID:XnizQSCA
341デフォルトの名無しさん
2017/10/29(日) 13:18:28.37ID:oFRxn/Jf342337
2017/10/29(日) 15:33:37.93ID:jaLMlrXm コンパイルは通るのですが、実行できませんでした…。
ClassNotFoundExceptionとSQLExceptionが発生してしまいます。
どなたかヒントを下さい。
ソースコードは以下です。
https://ideone.com/4xrmgz
ClassNotFoundExceptionとSQLExceptionが発生してしまいます。
どなたかヒントを下さい。
ソースコードは以下です。
https://ideone.com/4xrmgz
344デフォルトの名無しさん
2017/10/29(日) 15:57:54.47ID:0Uo9CHxR345デフォルトの名無しさん
2017/10/29(日) 16:23:24.35ID:oFRxn/Jf >>342
コンパイル時と同じ classpath にしてもダメなの?
コンパイル時と同じ classpath にしてもダメなの?
346337
2017/10/29(日) 16:26:53.49ID:jaLMlrXm >>344
はい。それは分かります。javacと同じクラスパスをjava実行時にも付けています。
実は根本的に、h2*.jarファイルがどこにあるのかよく分かってない気もするんですが、
H2 DatabaseのホームページからDL出来るh2-setup-2017-06-10.exeファイルの
中にあるんですよね?
はい。それは分かります。javacと同じクラスパスをjava実行時にも付けています。
実は根本的に、h2*.jarファイルがどこにあるのかよく分かってない気もするんですが、
H2 DatabaseのホームページからDL出来るh2-setup-2017-06-10.exeファイルの
中にあるんですよね?
347337
2017/10/29(日) 16:32:10.42ID:jaLMlrXm348デフォルトの名無しさん
2017/10/29(日) 17:11:13.08ID:0Uo9CHxR >>346
知らないけど
それは自己解凍ファイルなのかな
検索して実際のjarファイルを探してみればいい
コンパイル時はインタフェースさえわかればいいから
その実装のclassには通ってない可能性がある
ちゃんと何してるかから理解した方がいいと思うぞ
知らないけど
それは自己解凍ファイルなのかな
検索して実際のjarファイルを探してみればいい
コンパイル時はインタフェースさえわかればいいから
その実装のclassには通ってない可能性がある
ちゃんと何してるかから理解した方がいいと思うぞ
349337
2017/10/29(日) 20:16:42.57ID:jaLMlrXm >>348
あれからいろいろ調べて、Cドライブを検索した結果、h2*.jarファイルが
見つかりました!やはり.exeファイル内には無かったようです。
クラスパスを更新したら実行(javaコマンド)も無事成功しました。
回答して頂いた方々、ありがとうございました。
あれからいろいろ調べて、Cドライブを検索した結果、h2*.jarファイルが
見つかりました!やはり.exeファイル内には無かったようです。
クラスパスを更新したら実行(javaコマンド)も無事成功しました。
回答して頂いた方々、ありがとうございました。
350デフォルトの名無しさん
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に負の数を持たせたくない場合このようにするのが自然かなと考えたのですがいかがでしょうか?
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/IO352デフォルトの名無しさん
2017/10/30(月) 00:07:29.30ID:RKfFK5VC353デフォルトの名無しさん
2017/10/30(月) 00:34:24.41ID:EdHEI0+x 空のオブジェクト作って後でsetter使って入れるのも微妙だしコンストラクタで値チェックとかしていいと思うぞ
俺ならPattern.compileメソッドみたいに自分自身を返すstaticメソッドで価チェックする
俺ならPattern.compileメソッドみたいに自分自身を返すstaticメソッドで価チェックする
354デフォルトの名無しさん
2017/10/30(月) 00:44:57.12ID:sRaOGV/D >>350
有り得ない状態で存在できるより良い
有り得ない状態で存在できるより良い
355デフォルトの名無しさん
2017/10/30(月) 00:45:02.55ID:eddodMAs356デフォルトの名無しさん
2017/10/30(月) 01:04:31.28ID:JH+/yPWP357デフォルトの名無しさん
2017/10/30(月) 01:12:17.89ID:RKfFK5VC Hibernate Validatorみたいなバリデーションフレームワークは一般的に作ってから確認する方式
そもそも作らせないようにするのは”always valid”と呼ばれてる
“always valid model”とかで検索すれば参考になるサイトが出てくる
長所短所を理解して使い分ける
そもそも作らせないようにするのは”always valid”と呼ばれてる
“always valid model”とかで検索すれば参考になるサイトが出てくる
長所短所を理解して使い分ける
358デフォルトの名無しさん
2017/10/30(月) 01:16:09.26ID:ImI1HNcW 俺だったらPositiveNumberみたいなジェネリッククラスを作るか、@positiveみたいなアノテーション作る
359デフォルトの名無しさん
2017/10/30(月) 01:51:11.96ID:eddodMAs360デフォルトの名無しさん
2017/10/30(月) 02:19:42.12ID:sRaOGV/D コンストラクタとセッタに同じことを示す文が複製されるのもちょっと良くないな
361デフォルトの名無しさん
2017/10/30(月) 03:04:30.08ID:nQXUW6Dj >>351
クソ?しかし API にも new した時に例外出すやつ沢山あるわけだが、そういうのは全部クソ?
クソ?しかし API にも new した時に例外出すやつ沢山あるわけだが、そういうのは全部クソ?
362デフォルトの名無しさん
2017/10/30(月) 07:16:59.94ID:fX/oTiYO363デフォルトの名無しさん
2017/10/30(月) 07:22:42.37ID:b9ZBDRTb >>355
オブジェクト作る前にValidatorクラスでチェックするだけ
オブジェクト作る前にValidatorクラスでチェックするだけ
364デフォルトの名無しさん
2017/10/30(月) 07:24:54.59ID:b9ZBDRTb365デフォルトの名無しさん
2017/10/30(月) 08:14:47.50ID:JH+/yPWP インスタンス変数(やクラス変数)は
そのオブジェクトに付属するデータだから
コンストラクタなどでデータチェックの責務を
オブジェクト自身に持たせるのはおかしくない
ただしチェックが複雑化したときに
責務を委譲するのもアリ
そのオブジェクトに付属するデータだから
コンストラクタなどでデータチェックの責務を
オブジェクト自身に持たせるのはおかしくない
ただしチェックが複雑化したときに
責務を委譲するのもアリ
366デフォルトの名無しさん
2017/10/30(月) 08:43:10.77ID:5RpC60IR >>365
そのただしが問題
検証はシステムの関心ごとだから
集約するべきでオブジェクト毎に持つものじゃない
コンストラクタはオブジェクトを初期化するという
特別な処理であってここでデータチェックが必要になるのは
責務の分離ができてないシグナルみたいなもの
staticメソッドでtryCreateという名前なら100歩譲ってオーケーだ
そのただしが問題
検証はシステムの関心ごとだから
集約するべきでオブジェクト毎に持つものじゃない
コンストラクタはオブジェクトを初期化するという
特別な処理であってここでデータチェックが必要になるのは
責務の分離ができてないシグナルみたいなもの
staticメソッドでtryCreateという名前なら100歩譲ってオーケーだ
367デフォルトの名無しさん
2017/10/30(月) 08:54:32.49ID:5RpC60IR 負の値を持たせたくないのは業務の要件なんですよ!!
368デフォルトの名無しさん
2017/10/30(月) 08:55:34.55ID:JH+/yPWP >>366
>検証はシステムの関心ごとだから
>集約するべきでオブジェクト毎に持つものじゃない
責務を分離するのは重要だがそのオブジェクトの
規模が大きくなって複雑化するにつれて分けていくもの
たとえば生成の責務をファクトリに分離してもいいが
何でもかんでも全部ファクトリにする必要はない
だからコンストラクタでチェックしてもいいし
バリデータみたいのに分離してもいい
>検証はシステムの関心ごとだから
>集約するべきでオブジェクト毎に持つものじゃない
責務を分離するのは重要だがそのオブジェクトの
規模が大きくなって複雑化するにつれて分けていくもの
たとえば生成の責務をファクトリに分離してもいいが
何でもかんでも全部ファクトリにする必要はない
だからコンストラクタでチェックしてもいいし
バリデータみたいのに分離してもいい
369デフォルトの名無しさん
2017/10/30(月) 08:56:23.29ID:5RpC60IR 思わず激昂してしまいましたがとにかく小生が言いたいのはコンストラクタで例外投げるのおかしいですよということなんです
370デフォルトの名無しさん
2017/10/30(月) 09:00:29.54ID:5RpC60IR >>368
どっちでもいいなんていうそんな優柔不断で玉虫色な考えに真実があるわけない、あなたは思考を放棄しているに等しい、ここにはこういう値しか保持したくないんです、立派な業務要件でしょうが!!
じゃあその要件をまとめましょうよ、システムの関心ごととして切り出しましょうよ
どっちでもいいなんていうそんな優柔不断で玉虫色な考えに真実があるわけない、あなたは思考を放棄しているに等しい、ここにはこういう値しか保持したくないんです、立派な業務要件でしょうが!!
じゃあその要件をまとめましょうよ、システムの関心ごととして切り出しましょうよ
371デフォルトの名無しさん
2017/10/30(月) 09:01:41.86ID:4hMzyEUs >>367
業務要件で例外処理を考えてるってなかなかおもしろいね
業務要件で例外処理を考えてるってなかなかおもしろいね
372デフォルトの名無しさん
2017/10/30(月) 09:04:21.57ID:5RpC60IR >>371
どういうこと?
どういうこと?
373デフォルトの名無しさん
2017/10/30(月) 09:06:06.45ID:5RpC60IR もっと具体的にちゃんと説明して
小生良い事言ってるからそれちゃんと説明して
小生良い事言ってるからそれちゃんと説明して
374デフォルトの名無しさん
2017/10/30(月) 09:12:06.74ID:JH+/yPWP >>370
いやそれは極端でしょ
OOPの要素はどれも使い分けじゃないの?
複雑化したら切り出すが抽象化にはキリがないので
IF文を全部ポリモーフィズムにするわけでもないし
最初から全部デザパタにするわけでもない
いやそれは極端でしょ
OOPの要素はどれも使い分けじゃないの?
複雑化したら切り出すが抽象化にはキリがないので
IF文を全部ポリモーフィズムにするわけでもないし
最初から全部デザパタにするわけでもない
375デフォルトの名無しさん
2017/10/30(月) 09:17:39.73ID:5RpC60IR376デフォルトの名無しさん
2017/10/30(月) 09:21:09.70ID:JH+/yPWP377デフォルトの名無しさん
2017/10/30(月) 09:22:44.13ID:5RpC60IR コンストラクタでチェックして例外投げるのは
ようわからんけどオブジェクト作ってみるわー
でけへんかったわーゲヘヘーと言ってるようなもの
文明人のやることじゃない
アサートを使うべき
アサートは本番では動かさないからね
検証は専用のオブジェクトでやりましょう
ようわからんけどオブジェクト作ってみるわー
でけへんかったわーゲヘヘーと言ってるようなもの
文明人のやることじゃない
アサートを使うべき
アサートは本番では動かさないからね
検証は専用のオブジェクトでやりましょう
378デフォルトの名無しさん
2017/10/30(月) 09:25:45.46ID:5RpC60IR379デフォルトの名無しさん
2017/10/30(月) 09:46:48.33ID:JH+/yPWP アサートでもいいが例外投げてもいい
つーかコンストラクタで例外投げるのが大問題なら
Javaの言語仕様でできないようにするだろ……
普通に考えて2ちゃんの一個人より
Java(API)のやり方の方がいいわ
つーかコンストラクタで例外投げるのが大問題なら
Javaの言語仕様でできないようにするだろ……
普通に考えて2ちゃんの一個人より
Java(API)のやり方の方がいいわ
380デフォルトの名無しさん
2017/10/30(月) 10:01:28.68ID:5RpC60IR >>379
ファイナライザでは例外投げないようにしましょう
というのがベストプラクティスだけど言語仕様ではできるでしょうに
言語仕様ってその程度のものですよ
コンストラクタでも例外投げるのやめましょうよ
2chネラーだから信用しないっていうのは権威主義的というか誰が言ってるかより中身で判断していただきたい、小生絶対良い事言ってるから!!
ファイナライザでは例外投げないようにしましょう
というのがベストプラクティスだけど言語仕様ではできるでしょうに
言語仕様ってその程度のものですよ
コンストラクタでも例外投げるのやめましょうよ
2chネラーだから信用しないっていうのは権威主義的というか誰が言ってるかより中身で判断していただきたい、小生絶対良い事言ってるから!!
381デフォルトの名無しさん
2017/10/30(月) 10:21:49.81ID:0VAyPn/2 どっちがキチガイかは一目瞭然だな
ありがとう
ありがとう
382デフォルトの名無しさん
2017/10/30(月) 10:37:40.45ID:5RpC60IR それでええんか?
議論って考えを広げるためにあるんやで
キチガイとレッテルを張っておしまいでほんとにええんか?
小生が可哀想だと思わない?罪悪感を感じない?お前のお母さんもお前には優しい人に育ってほしいと思ってたのじゃないか?
議論って考えを広げるためにあるんやで
キチガイとレッテルを張っておしまいでほんとにええんか?
小生が可哀想だと思わない?罪悪感を感じない?お前のお母さんもお前には優しい人に育ってほしいと思ってたのじゃないか?
383デフォルトの名無しさん
2017/10/30(月) 10:38:44.40ID:5RpC60IR ありがとうの後にはございますを付けろ、それが礼儀だ
384デフォルトの名無しさん
2017/10/30(月) 10:39:13.84ID:5RpC60IR 礼儀正しく優しい人になって欲しい
385デフォルトの名無しさん
2017/10/30(月) 10:46:46.93ID:5RpC60IR コンストラクタでデータチェックしない人になって欲しい
386デフォルトの名無しさん
2017/10/30(月) 12:29:49.28ID:ich1HAGc >>377
何が悪いか分からん。
オブジェクトの生成失敗も業務メソッドの実行失敗も、中断すべき状況になったら例外飛ばして何が悪いのか。
コンストラクタで例外飛ばすなって話はC++ならメモリの回収がややこしくなるんで一利あるけど、JavaやC#なら問題ない。
何が悪いか分からん。
オブジェクトの生成失敗も業務メソッドの実行失敗も、中断すべき状況になったら例外飛ばして何が悪いのか。
コンストラクタで例外飛ばすなって話はC++ならメモリの回収がややこしくなるんで一利あるけど、JavaやC#なら問題ない。
387デフォルトの名無しさん
2017/10/30(月) 12:30:44.96ID:FeUZMDfY >>364
オブジェクトの責務とは?
オブジェクトの責務とは?
388デフォルトの名無しさん
2017/10/30(月) 12:38:10.73ID:OufZdVP7 遡及IDは嘘つかないな
ソノトキ何をしたかよりもソノアト何をしたかが一目瞭然である
便利でよろしい
ソノトキ何をしたかよりもソノアト何をしたかが一目瞭然である
便利でよろしい
389デフォルトの名無しさん
2017/10/30(月) 12:38:19.13ID:FeUZMDfY >>367
なんというか、それそのものは Java 自体の問題のようにも思えるね。
つまり、unsigned が型として用意されてないからとか、PASCALみたいに数値の範囲を指定した新たな型を作れないからとかね。
まあそういう数値型のクラスを自作してしまえば良いだけかも知れないが。
なんというか、それそのものは Java 自体の問題のようにも思えるね。
つまり、unsigned が型として用意されてないからとか、PASCALみたいに数値の範囲を指定した新たな型を作れないからとかね。
まあそういう数値型のクラスを自作してしまえば良いだけかも知れないが。
390デフォルトの名無しさん
2017/10/30(月) 12:47:31.30ID:FeUZMDfY >>385
そんなにそれを求めるなら最初からそれができない新言語作れば?
大丈夫。君にも作れるよ。実装までできなくても言語仕様考えてネットで晒してフォーラム作って議論してまとめ直してから作ってくれる人募集すればその内なんとかなるだろう。全てを君が作る必要はない。
そんなにそれを求めるなら最初からそれができない新言語作れば?
大丈夫。君にも作れるよ。実装までできなくても言語仕様考えてネットで晒してフォーラム作って議論してまとめ直してから作ってくれる人募集すればその内なんとかなるだろう。全てを君が作る必要はない。
391デフォルトの名無しさん
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 = "もう冬だね";
}
これを挿入しても反応してくれません。
何がいけないのでしょうか教えてください。
あと質問場所が適切でなければどこで聞けばいいか教えてください
お願いします。
http://www.pre-practice.net/2017/10/line-bot_22.html?spref=tw
ここを参考にLINEBOTを作っていて、
文章中の特定の文字列に反応して返答するようにしたのですが、
else if (strpos(input_text, "寒い") !== false ) {
reply_text = "もう冬だね";
}
これを挿入しても反応してくれません。
何がいけないのでしょうか教えてください。
あと質問場所が適切でなければどこで聞けばいいか教えてください
お願いします。
392デフォルトの名無しさん
2017/10/30(月) 13:41:37.04ID:3rz3HBcW たまに生成されたクラスファイルが分割されることがあるんですがどういう条件で起きるんですかね?
ファイル容量の問題かと思いきや大きいものでも分割されてなかったり…
ファイル容量の問題かと思いきや大きいものでも分割されてなかったり…
393デフォルトの名無しさん
2017/10/30(月) 13:52:19.55ID:4hMzyEUs >>392
1ファイルに複数のクラスを書いてるんじゃない?
1ファイルに複数のクラスを書いてるんじゃない?
395デフォルトの名無しさん
2017/10/30(月) 15:15:46.44ID:y0GY6LFV396デフォルトの名無しさん
2017/10/30(月) 15:50:40.06ID:3rz3HBcW397デフォルトの名無しさん
2017/10/30(月) 18:18:23.77ID:sRaOGV/D398デフォルトの名無しさん
2017/10/31(火) 08:25:04.95ID:OmcraJl8 >>359
範囲外の入力値エラーだろ
private、つまりクラス内では、戻り値でエラーを示すが、
public、つまりクラス外では、例外でエラーを示す
なぜなら、クラス内をコーディングしているのは、普通は同じ会社だから、
その会社内で規定したエラー値を使っても、見落としが少ない
でも、クラス外の場合は、クラスをコーディングした会社と、異なる会社が使うから、
そのクラス内で規定したエラー値を使っては、いけない。
なぜなら、他社の人は、クラスのドキュメントを読まずに、クラスを使うから
つまり、クラス外部の人に対しては、絶対にエラーが起こるように、例外を使う
クラス内をコーディングする人と、そのクラスを使う人は、
異なる会社を想定している。
他社の場合は、クラスのドキュメントを読まないことを想定すべき
「スッキリJava」にも書いてある。
クラスを使う側と、フレームワークなど、他社が使うクラスを作る側の、
コーディングの違い。
他社を想定している場合は、全く違う
この辺は、品質管理をやってないと知らないはず
範囲外の入力値エラーだろ
private、つまりクラス内では、戻り値でエラーを示すが、
public、つまりクラス外では、例外でエラーを示す
なぜなら、クラス内をコーディングしているのは、普通は同じ会社だから、
その会社内で規定したエラー値を使っても、見落としが少ない
でも、クラス外の場合は、クラスをコーディングした会社と、異なる会社が使うから、
そのクラス内で規定したエラー値を使っては、いけない。
なぜなら、他社の人は、クラスのドキュメントを読まずに、クラスを使うから
つまり、クラス外部の人に対しては、絶対にエラーが起こるように、例外を使う
クラス内をコーディングする人と、そのクラスを使う人は、
異なる会社を想定している。
他社の場合は、クラスのドキュメントを読まないことを想定すべき
「スッキリJava」にも書いてある。
クラスを使う側と、フレームワークなど、他社が使うクラスを作る側の、
コーディングの違い。
他社を想定している場合は、全く違う
この辺は、品質管理をやってないと知らないはず
399デフォルトの名無しさん
2017/10/31(火) 08:35:40.63ID:BBLfUUwS400398
2017/10/31(火) 09:49:23.34ID:OmcraJl8 「スッキリJava」では、クラスの責務を、明確に分けている
前半は、クラスを使う側の知識で、
上級編はフレームワークなど、他社が使うクラスを作る側の知識
フレームワークを作る側では、検査例外を使って、コンパイルエラーにしないと、
ドキュメントを読まずに実行した客が、実行時エラーを起こして、
電話をかけてくるから、商売にならない
本を読んで、実行時エラーを起こした客が、出版社に電話をかけてくるだろ。
それと同じで、商売にならない
だから例外にして、その例外をキャッチしない人は、実行できないようにする
サポート契約をしない、無料相談の客をはじかないといけない。
無料で見積もりさせる客も
前半は、クラスを使う側の知識で、
上級編はフレームワークなど、他社が使うクラスを作る側の知識
フレームワークを作る側では、検査例外を使って、コンパイルエラーにしないと、
ドキュメントを読まずに実行した客が、実行時エラーを起こして、
電話をかけてくるから、商売にならない
本を読んで、実行時エラーを起こした客が、出版社に電話をかけてくるだろ。
それと同じで、商売にならない
だから例外にして、その例外をキャッチしない人は、実行できないようにする
サポート契約をしない、無料相談の客をはじかないといけない。
無料で見積もりさせる客も
401デフォルトの名無しさん
2017/10/31(火) 12:09:41.25ID:QuyL7alo 経営の話か
402デフォルトの名無しさん
2017/10/31(火) 21:22:09.98ID:BSBih/VQ javaでWebアプリ作ってるのですがグラフ表示をしたいです
jfreechartとかchart.jsとか出てくるんですがおすすめとかってありますか?
jfreechartとかchart.jsとか出てくるんですがおすすめとかってありますか?
403デフォルトの名無しさん
2017/10/31(火) 21:22:56.96ID:BSBih/VQ 質問スレと間違えましたすみません。
404350です
2017/11/03(金) 17:28:51.99ID:AmIWbkAj >>380
しばらく2ちゃんを見れない状況だったので亀レスとなってしまいましたが、コンストラクタで例外投げるのが良くない理由をできれば聞きたいです
しばらく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憶パーセント異なるわけ
あの設計も大間違いだから
コンストラクタでリソース確保しようとするのが完全に間違ってる
closeの処理でリソースを解放するならばリソースを確保するのはopenだ
openの責務をFileStreamは持つべきでそれはオブジェクトを初期化する
コンストラクタとは役割が根本的に100憶パーセント異なるわけ
409デフォルトの名無しさん
2017/11/03(金) 19:04:39.65ID:9CXEo34m410デフォルトの名無しさん
2017/11/03(金) 19:18:22.44ID:lQ0XoM3e411デフォルトの名無しさん
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勉強不足でいまいち理解できませんでした
でも、解説してくれてありがとう
405~410まではなんとなくわかりました
411, 412は私の経験or勉強不足でいまいち理解できませんでした
でも、解説してくれてありがとう
414デフォルトの名無しさん
2017/11/03(金) 20:17:00.78ID:lQ0XoM3e415デフォルトの名無しさん
2017/11/03(金) 20:19:43.27ID:EWAV0hJA なるほど。わかった。スレが過疎って来たらコンストラクタで例外の話を出せば書き込みで溢れてスレが活性化するのだな。
時折反論を書きありがとうの後にございますを付けなければなお良いと。
時折反論を書きありがとうの後にございますを付けなければなお良いと。
416デフォルトの名無しさん
2017/11/03(金) 20:21:29.16ID:lQ0XoM3e 僕が活性化しちゃうおおお
417デフォルトの名無しさん
2017/11/03(金) 21:17:51.19ID:xnvXDnsB またキチガイか
418デフォルトの名無しさん
2017/11/03(金) 21:35:59.49ID:Ro85MhDs コンストラクタに不正なもの渡された場合に例外を出すことが
なぜいけないのかについては1ミリも説明されてなくて草
なぜいけないのかについては1ミリも説明されてなくて草
419デフォルトの名無しさん
2017/11/03(金) 21:41:52.50ID:lQ0XoM3e420デフォルトの名無しさん
2017/11/03(金) 21:42:46.79ID:lQ0XoM3e 違うわ1,000ミリの間違いね
421デフォルトの名無しさん
2017/11/03(金) 21:52:44.52ID:9CXEo34m むしろ初期化の異常で例外を投げるのは
コンストラクタの責務だろ
なぜならコンストラクタの引数で渡されたデータから
インスタンス変数(やクラス変数)を初期化するわけだから
情報エキスパートの原則からして
データの処理はデータを持ってるオブジェクトが行うのが原則
ただ処理を全部抱え込むと肥大化するから
他に委譲することは構わない
newの代わりにファクトリを使ったりするのと同じ
しかしそれは「newを使うな」ではない
「外部に委譲してもいい」のであって
「コンストラクタで例外を投げてはいけない」ではない
コンストラクタの責務だろ
なぜならコンストラクタの引数で渡されたデータから
インスタンス変数(やクラス変数)を初期化するわけだから
情報エキスパートの原則からして
データの処理はデータを持ってるオブジェクトが行うのが原則
ただ処理を全部抱え込むと肥大化するから
他に委譲することは構わない
newの代わりにファクトリを使ったりするのと同じ
しかしそれは「newを使うな」ではない
「外部に委譲してもいい」のであって
「コンストラクタで例外を投げてはいけない」ではない
422デフォルトの名無しさん
2017/11/03(金) 22:00:57.69ID:Ro85MhDs423デフォルトの名無しさん
2017/11/03(金) 22:01:56.36ID:lQ0XoM3e >>421
ベストプラクティスってそういうものだよ
こういう実装もできるけどこっちの方が好ましいよねっていうものだから
そういう意味で言ってるわけよ
たとえばModel View ControllerのアーキテクチャがあるけどViewに
Modelのコードも全部書きまくっちゃってもいいわけよ
でも分離するのが好ましいだろ、そういう意味で言ってるわけよ
その真意をくみ取って欲しいわけよ
コンストラクタでデータチェックヤラナイのが好ましいわけよ
え?ヤラナイの?なんていうふしだらな誘いに乗らないで欲しいわけよ
ベストプラクティスってそういうものだよ
こういう実装もできるけどこっちの方が好ましいよねっていうものだから
そういう意味で言ってるわけよ
たとえばModel View ControllerのアーキテクチャがあるけどViewに
Modelのコードも全部書きまくっちゃってもいいわけよ
でも分離するのが好ましいだろ、そういう意味で言ってるわけよ
その真意をくみ取って欲しいわけよ
コンストラクタでデータチェックヤラナイのが好ましいわけよ
え?ヤラナイの?なんていうふしだらな誘いに乗らないで欲しいわけよ
424デフォルトの名無しさん
2017/11/03(金) 22:02:38.01ID:lQ0XoM3e425デフォルトの名無しさん
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 どんなに外部でチェックしてもインスタンス生成に失敗することはあるわけで、
そういうときに失敗を通知する手段は例外しかないわけで、
コンストラクタで例外を投げてはいけないとする方が問題だ。
そういうときに失敗を通知する手段は例外しかないわけで、
コンストラクタで例外を投げてはいけないとする方が問題だ。
428デフォルトの名無しさん
2017/11/03(金) 22:49:18.72ID:lQ0XoM3e モデルに存在するべきコードがコントローラに存在するものをファット・コントローラと言うけれども
バリデータに存在するべきコードがコンストラクタに存在するものをファット・コンストラクタと呼んで
クラスの生活習慣病に位置付けるのはどう?
徐々にシステムを蝕んでいきます
コーディングの習慣を見直しましょう
バリデータに存在するべきコードがコンストラクタに存在するものをファット・コンストラクタと呼んで
クラスの生活習慣病に位置付けるのはどう?
徐々にシステムを蝕んでいきます
コーディングの習慣を見直しましょう
429デフォルトの名無しさん
2017/11/03(金) 22:52:55.66ID:lQ0XoM3e430デフォルトの名無しさん
2017/11/03(金) 22:53:28.36ID:lQ0XoM3e ベストプラクティスっていうのは柔軟っていう意味もありまぁす!
431デフォルトの名無しさん
2017/11/04(土) 00:31:14.87ID:FdHKGPou 入力値チェックは、MVC のビューでやるけど、
ドラクエ10 の記事によると、
通信データの500バイトに、1バイトは間違っているから、
通信データは、絶対に信用しちゃいけない。
必ずサーバー側でも、チェックすべき
途中のルーターが、データが間違っていても、データを破棄せず、
間違ったデータで、パリティを再計算して送ってくるから、
正常なデータのように見える
ドラクエ10 の記事によると、
通信データの500バイトに、1バイトは間違っているから、
通信データは、絶対に信用しちゃいけない。
必ずサーバー側でも、チェックすべき
途中のルーターが、データが間違っていても、データを破棄せず、
間違ったデータで、パリティを再計算して送ってくるから、
正常なデータのように見える
432デフォルトの名無しさん
2017/11/04(土) 01:00:49.14ID:O0AU1SEY サーバーが受け取ったデータが外部入力なんだから
それをチェックするのは当たり前
ユーザー入力と同じ
境界の外から入ってきたデータを
どのレイヤーでチェックしてエラーハンドリングするかということと
モデルレイヤーのコンストラクタが事前条件に反した不正値を受け取った場合に
例外を投げるかどうかは関係はしてるが種類の違う問題
という話をしてる
それをチェックするのは当たり前
ユーザー入力と同じ
境界の外から入ってきたデータを
どのレイヤーでチェックしてエラーハンドリングするかということと
モデルレイヤーのコンストラクタが事前条件に反した不正値を受け取った場合に
例外を投げるかどうかは関係はしてるが種類の違う問題
という話をしてる
433デフォルトの名無しさん
2017/11/04(土) 02:59:59.82ID:Wr8YwoWe できれば不正値はコンパイル時にエラーになって欲しいものではあるな。
不正な値を引き渡せるようにプログラミングできること自体がなくなった方が良い。
I/O絡みのエラーは実行時じゃないとわからないから別としてね。
(指定したファイルがなくて読み出しオープンでエラーとかは仕方がない)
不正な値を引き渡せるようにプログラミングできること自体がなくなった方が良い。
I/O絡みのエラーは実行時じゃないとわからないから別としてね。
(指定したファイルがなくて読み出しオープンでエラーとかは仕方がない)
434デフォルトの名無しさん
2017/11/04(土) 08:21:09.10ID:4V8ohWTX javaってできることが多すぎて勉強しんどい
435デフォルトの名無しさん
2017/11/04(土) 08:35:59.26ID:32ZzWJzG >>431
へー、チェックサムも独自に仕込むのかな
へー、チェックサムも独自に仕込むのかな
436デフォルトの名無しさん
2017/11/04(土) 08:37:10.99ID:32ZzWJzG >>432
事前条件ってまさにアサートの領分じゃん
事前条件ってまさにアサートの領分じゃん
437デフォルトの名無しさん
2017/11/04(土) 08:49:44.67ID:die+TITB >>434
C++より楽
C++より楽
438デフォルトの名無しさん
2017/11/04(土) 08:55:38.30ID:KxJ3WBAq モデルの引数を間違えてるっていうのはバグなのでー
開発時に分かればよいことなのでー
アサート使うべきだよねー
コンストラクタをぶくぶくと太らせる理由にはならぬよ
メタボリッククラスから脱却してスマートクラスにしよう
開発時に分かればよいことなのでー
アサート使うべきだよねー
コンストラクタをぶくぶくと太らせる理由にはならぬよ
メタボリッククラスから脱却してスマートクラスにしよう
439デフォルトの名無しさん
2017/11/04(土) 13:21:03.20ID:O0AU1SEY >>436
Javaの場合はアサートって言うとビルトインのassertをさすからね
事前条件なら自動的にアサート使えとはならないよ
それともコンストラクタでは
ExceptionではなくErrorを投げるべきって言いたいのかな?
Javaの場合はアサートって言うとビルトインのassertをさすからね
事前条件なら自動的にアサート使えとはならないよ
それともコンストラクタでは
ExceptionではなくErrorを投げるべきって言いたいのかな?
440デフォルトの名無しさん
2017/11/04(土) 13:36:25.85ID:KxJ3WBAq441デフォルトの名無しさん
2017/11/04(土) 15:21:29.77ID:1M0jr43T javaなら、コンストラクタで例外スローでいいでしょ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★3 [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★4 [Hitzeschleier★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 [Hitzeschleier★]
- なんかさっきからフェイロンのステージ曲が頭から離れないんだが
- 【実況】博衣こよりのえちえちスーパーダンガンロンパ3🧪
- 【安倍晋三】中国船4隻が領海侵入 [828897501]
- えちえち女だけど
- 【画像】小泉防衛大臣、とんでもない写真が発掘される [834922174]
- お
