プログラムセンスがある人とない人の違い 4 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/06/26(日) 16:42:09.69
センスある人・・・例外をうまく使ってシンプルなコードを書くことができる
センスない人・・・例外を(俺が)使うとコードが複雑になるんじゃぁ、何が何でも処理しないと気がすまないんじゃぁ


プログラムセンスがある人とない人の違い 3 [転載禁止](c)2ch.net
http://tamae.2ch.net/test/read.cgi/prog/1423996665/
2016/06/26(日) 16:50:15.94
前スレではトムキャットしか使ったことのない能無しどものせいで時間を無駄にした。
3仕様書無しさん
垢版 |
2016/06/26(日) 16:52:05.62
いつからWebアプリケーションサーバーを使うプログラムの話になったのか?
2016/06/26(日) 16:53:35.65
あと例外じゃないコードの話をしてるくせに
例外だと言い張る組み込み屋(ネットワーク屋)もうざかったな。
2016/06/26(日) 16:54:08.63
>>3
いつからWebアプリケーションサーバーを使わないプログラムの話になったのか?
6仕様書無しさん
垢版 |
2016/06/26(日) 16:56:02.68
>>5
スレタイをよく見なさい。
2016/06/26(日) 16:57:15.75
組み込み屋の場合、例外(ではなくて本当は単なる状態処理)が
10個程度しかないんだろうね。

アプリ屋にとっては例外は標準だけで数十個
アプリやライブラリが使うものを含めるとそれ以上あるから
非対応の例外を共通の例外処理で処理して、
それ以外の対応が可能な場合だけ対応するというやり方になる。

そうするとほとんどの例外は共通処理で処理できるものになるって
いちいち処理を書いたりしないから、あとはまれにある標準以外の
対応を行う箇所だけコードだけが必要になって
故に例外を使うとコードはシンプルになる。
2016/06/26(日) 16:57:19.86
PHPやCGIのように、Apache配下で1リクエスト1プロセスが動くシステムを知らん奴のせいで、話が逸れたのだ。

あげく、nodeJSのように、1プロセス1スレッドで全てを捌くような
特殊なサーバーを持ち出して、例外処理をしなければ
サーバーが落ちるなどと極論を言い出した。
2016/06/26(日) 16:59:05.80
> PHPやCGIのように、
それっていまどきスレッドを使わない古いシステムじゃね?
2016/06/26(日) 16:59:34.96
例外は使う。
しかし、適切な処理を綺麗に書くために使うのだ。
アプリを落とさないためではない。
2016/06/26(日) 17:00:14.49
>>10
誰もアプリを落とさないために例外を書くなんて言ってないよw
2016/06/26(日) 17:02:56.65
>>9
じゃあスレッドを使うシステムが新しいのか?
ジジイを笑う中年のようだな。

PHPのシステムは世の中に溢れてるだから、現実を見ろ。
2016/06/26(日) 17:03:47.28
>>11
例外をログに吐けば十分=アプリを落とさない

おまいらの認識ってこの程度だよね。
2016/06/26(日) 17:04:27.24
>>13
だからお前の意見をかけって
逃げるなよ
2016/06/26(日) 17:05:06.43
>>6
スレタイをよーく見なさい。
2016/06/26(日) 17:06:13.18
>>13
何度も言うように、

「殆どの場合は」例外をログに吐けば十分
それ以外の処理が必要な場合だけ、特別にコードを書けばいいから
コードはシンプルになるって話をしている。

でお前がやるべきことは、特別にコードがたくさん必要になるから
例外を使うと大変だ。その特別にコードを見せてやる(ドンッ)
っていうことなんだから、そのコードがどんなのかをいうことだよ。
2016/06/26(日) 17:06:39.58
>>15
>>1の内容もよーくみなさい。

センスある人・・・例外をうまく使ってシンプルなコードを書くことができる
センスない人・・・例外を(俺が)使うとコードが複雑になるんじゃぁ、何が何でも処理しないと気がすまないんじゃぁ
2016/06/26(日) 17:06:57.91
>>14
何度も申し上げています通り
他社のAPI等、状態が安定しない呼び先に対して
安全に処理を書くための有効な手段となるのでございます。
2016/06/26(日) 17:07:35.78
>>18
具体的には?
2016/06/26(日) 17:08:05.73
>>17
>>1をよく読んだ上で、>>3を読みなさい。
2016/06/26(日) 17:08:15.04
>>19
前スレで書いたろ。しつこいよ。
2016/06/26(日) 17:09:31.37
>>21
申し上げているのでございます
2016/06/26(日) 17:10:12.14
>>22
ウルセーバカ
2016/06/26(日) 17:10:26.63
>>21
ございます
2016/06/26(日) 17:12:12.33
エラー処理とか書きたくないめんどい
2016/06/26(日) 17:12:50.23
いくらセンスがあろうとなかろうと仕様がクソだとどうしようもないね。
2016/06/26(日) 17:13:40.86
おまいら異常系の処理って言うと、ありえない状況を想像するから
例外処理でやることがなくなるんだろ?

結局そこの線引きの加減が下手なんだと思うわけよ。
28仕様書無しさん
垢版 |
2016/06/26(日) 17:16:08.32
シングルプロセスかマルチスレッドかはあまり問題じゃないと思うけどな。

じゃあ、マルチプロセスのプログラムはどうするのか聞きたいわ。
2016/06/26(日) 17:18:09.05
>>28
耐障害性の観点では、多少関係がある。
30仕様書無しさん
垢版 |
2016/06/26(日) 17:18:42.58
>>27
まあそうなんだろうな。

このスレにいる人間のうち、サーバー(ノード)が突然、落ちることまで想定している人間がどれだけいることやら。
2016/06/26(日) 17:26:14.60
>>16
そもそも、俺は「例外を使うと大変だ」とは言っていない。
簡潔に書くために例外を使うのだ、と言っている。
2016/06/26(日) 18:07:51.02
良く解らないんですが例えばファイルの読み込みメソッドでファイルが見つからないっていう例外が発生するとして
1.呼び出し側に戻り値で失敗を知らせるべき
2.読み込みに失敗してもその後のプロセスに影響の無い設計にすべき(あるなら例外で止めちゃう)
3.そもそも例外が発生しないように呼び出し側で引数をチェックすべき

他にもありそうですが混乱しまくりです
どういうのが推奨されるんでしょうか?
33仕様書無しさん
垢版 |
2016/06/26(日) 18:13:51.31
>>32
3は言ってることが分からない。

ファイルが存在しなくても処理を続ける仕様ならいいが、あまりそういうシステムはないと思うけどな。

ファイルがあるかもしれないし、ないかもしれないシステムなら、例外扱いでもいいし、ただの存在チェックエラーでもいい。

それを決めるのがプログラマ。
2016/06/26(日) 18:16:57.19
>>32
段階的に考えるといい。

通常は処理するためには何らかの「条件」が必要
その条件が全くない場合に汎用的で一番楽な方法は落ちること。
この場合にやるべきことは何もない。

次に楽な方法は(情報をログに吐くなどして)落ちること。
これも汎用的であり、また書くのは共通部分に一箇所ですむので手間は最小限。
通常はこっちを書いておく。

この2つは「条件」が何もなくてもできる。


> 1.呼び出し側に戻り値で失敗を知らせるべき
戻り値で知らせてはいけない。戻り値で知らせるとコードが複雑になる。
例えば呼び出し側の更に呼び出し側のさらに呼び出し側に伝える場合はどうするのか?
これを例外ならば何も書かずに自動的にやってくれる。

> 2.読み込みに失敗してもその後のプロセスに影響の無い設計にすべき(あるなら例外で止めちゃう)
これは「条件」が必要。いつでもそれをやっていいわけではなく、特定の条件を満たしている場合にのみ可能なこと。

あと「例外で止める」というのは言い方がおかしい。失敗したら例外を出力するべきだからだ。
あとは止めたければ発生した例外を処理するコードを何も書かない(最初に書いたようにログに出力して落ちる)
そして「条件」を満たした場合に限り、発生した例外を無視することも可能。

> 3.そもそも例外が発生しないように呼び出し側で引数をチェックすべき
それは不可能なので議論の対象にならない。
35仕様書無しさん
垢版 |
2016/06/26(日) 18:21:55.48
初心者は例外処理を書いて何もしていなかったり、そこで例外の情報を止めてしまうので、例外が発生していても正常終了にしてしまうからなあ。
2016/06/26(日) 18:33:34.21
技術は何でも初期は未熟なものだからどうしようもない話だけど、
初期の言語に「例外」というものがあれば、常識も変わっていたと思うけどね。

「エラーが発生すれば、プログラムはそこで停止するもの」というのが
初期の言語からの常識であれば、こんな議論はする必要がない。
え?エラーが発生したら止まる?それ当たり前ですよね?で終わる話。
停止させたくないときだけ、そのための処理を書く。
これを「例外」は実現している。

C言語が一番の障害だった。あれが「例外」を備えていないのに広く使われたせいで、
「エラーが発生しても、何もしなければプログラムはエラーが起きたのがわからないまま進む」
というのが初期の常識だった。そして、なにか書くのが面倒だから、
これはサンプルなのでエラー処理(エラーが発生したら停止する処理)を書いていません。
なんていうひどいサンプルが広まってしまった。本来はサンプルだからこそエラー処理を
きちんとして置かなければいけなかった。それを他の人は参考にするんだから。

だからエラー処理をまともにやるとコードが複雑になるって言ってる人は
たいていC言語しか知らない。(他の言語を使っても例外を正しく使っていない)

例外がある言語にとっては何も書かなくてもエラーが発生したら止まるというコードになってる。
これはC言語でいうエラー処理を書いた状態。そして止めずに回復できるという条件が揃ったときだけ
そのためのコードを書けば良いから楽なのだ。
2016/06/26(日) 18:38:51.52
>>32

> 1.呼び出し側に戻り値で失敗を知らせるべき
ファイルが見つからない例外を、戻り値に置き換えてみただけ。意味が無い。

そもそも、例外にしろ戻り値にしろ、失敗を呼び元に知らせるということは
呼び元に責任を放り投げているという事だが
それが正しい判断かどうか、という問題もある。

> 2.読み込みに失敗してもその後のプロセスに影響の無い設計にすべき(あるなら例外で止めちゃう)

例外で止めるのではなく、例外に対応するべきでは?
それが正しい設計ではなかろうか。

> 3.そもそも例外が発生しないように呼び出し側で引数をチェックすべき

結局どこかで問題に対応しないといけません。
それを適切な場所で対応するだけです。
2016/06/26(日) 18:42:33.74
> 呼び元に責任を放り投げているという事だが
> それが正しい判断かどうか、という問題もある。

極稀に勝手に修正してもうまくいく場合があるだけ
殆どの場合は呼び出し元の結果(エラーも含む)を返すのが正しい判断
2016/06/26(日) 18:42:55.78
殆どの場合は呼び出し元に結果(エラーも含む)を返すのが正しい判断
2016/06/26(日) 18:44:21.74
例えばファイルを開く関数があったとして
ファイルがなければ空ファイルがあることにして開いたら
空のファイルがあるのか、ファイルがないかの区別がつかない。
2016/06/26(日) 18:46:38.81
例えばファイルを開く関数があったとして
設定ファイルがなければデフォルトの値を返す関数があったとしたら、
それは「ファイルを開く」関数ではなく、「設定ファイルを開く」という
専用の関数になってしまう。

これは「極稀に勝手に修正してもうまくいく場合」の一例であり
汎用的な処理としては使えない。
2016/06/26(日) 18:51:02.12
このまま上に上に返していくと
最終的にユーザーに「ファイルがありません」とメッセージが表示される。
それが正しいのか、何か復帰処理を試みるのか。

>>41
ファイルを開く関数で、勝手にファイルを作ったら問題だ。
しかし、一つ上の呼び元では
そういったロジックが必要になるかもしれないだろ?
2016/06/26(日) 18:53:04.59
各メソッドがそれぞれの責任を果たすよう
適切な例外処理を書きましょうねって事だよ。
2016/06/26(日) 18:53:43.63
更に言うならば「設定ファイルを開く」という関数であったとしても
設定ファイルが複数種類あったらどうなるだろうか?

勝手に直すならば「ユーザー情報設定ファイルを開く」
「GUI設定情報ファイルを開く」などというファイルごとに関数を
作らなくてはいけなくなってしまう。

そうすることなく汎用的な関数にしたいならば「設定ファイルを開く」関数に
ファイルがなければデフォルトを渡すための引数を追加することで実現は可能だが
それだけ結局「呼び元に(デフォルト値をわたすという)責任を放り投げている」ことになり、
呼び出し元がやるのが正しいということになる。
2016/06/26(日) 18:55:00.85
>>42
> そういったロジックが必要になるかもしれないだろ?

「必要になるかもしれない」で作るのはYAGNI違反。
必要になったときだけやればいい。
つまりそれは「極稀に」うまくいく場合の一例でしか無い。
2016/06/26(日) 18:56:18.34
>>42
> 最終的にユーザーに「ファイルがありません」とメッセージが表示される。
> それが正しいのか、何か復帰処理を試みるのか。

デフォルトの動作を安全側に倒すかどうかの話でしか無い。
安全側はその場で終了。「例外」ならば何も書かなくてそれを実現している。

それが正しくない場合にのみ、コードを書けばいい。
2016/06/26(日) 18:57:30.89
>>45
よく読んで欲しい。
多層に重なった呼び元のどこかで、処理をするのだ。
一つのメソッドで完結せよ、という話ではない。
2016/06/26(日) 19:00:01.23
> 多層に重なった呼び元のどこかで、処理をするのだ。

俺の言い方↓に変えろやw

多層に重なった呼び元のどこかで(やる意味がある場合のみ)処理をするのだ。
やる意味がなければ処理する必要はない。
何も書かなくてもエラー処理(途中でプログラム中断)してくれるのが
例外であり、C言語などの例外がない言語との大きな違いなのだ。
2016/06/26(日) 19:01:46.73
だいたい「設定ファイルを開く」関数でも
中では設定ファイルの種類に応じて
それぞれの設定用関数を呼び出すだろ。

そうしないなら、「設定ファイルを開く」関数に何でもかんでも詰め込むという事?
それは筋が悪いな。適切な粒度ではない。
2016/06/26(日) 19:02:57.54
粒度って言ってみたかっただけかw
2016/06/26(日) 19:06:52.07
>>48
今してるのは、責任の分担の話だろ?
例外か、戻り値かに関わらないよね。
2016/06/26(日) 19:07:57.91
>>51
例外か戻り値かの話を俺がどこでしてると思ってるんだ?
2016/06/26(日) 19:15:44.44
>>52
どうでもいいけど>>44はおかしくね?
汎用的な関数って言ってるけど
何でもかんでも出来るのが汎用的なんじゃないよね?
決められた仕事だけやるのが汎用的だよね?
2016/06/26(日) 19:17:27.97
>>53
いろんなことに使えるのが「汎用的」という言葉の意味だ。

何でもかんでもできるのは「機能詰め込みすぎ」で
決められた仕事しかできないのは「専用的」というんだよ。
2016/06/26(日) 19:19:02.90
>>54
なんか腑に落ちんが、まあいい。
56仕様書無しさん
垢版 |
2016/06/26(日) 19:19:32.33
もはや誰が何を主張したいのか分からんw
2016/06/26(日) 19:24:16.36
>>55
腑に落ちないのは、お前が変なことを言ってるからだ。

「なんでもできる万能ロボット」と
「なんにでも使える汎用的なネジ」を
ごっちゃにしているからなだけだ。
58仕様書無しさん
垢版 |
2016/06/26(日) 19:24:32.92
無理やり共通処理化する初心者はあとをたたない。
2016/06/26(日) 19:26:37.98
>>57
いやいや、おまいの言い方で言えば
上手い切り口で「専用的」に作られたものが、「汎用的」に使えるんだろ。
万能ロボットが実際にはポンコツなのは判ってるよ。
60仕様書無しさん
垢版 |
2016/06/26(日) 19:26:57.51
単純化するためのモジュール分割だったのに、いろんなことができるモジュールにしてしまう事例はよくある。

逆にJavaプログラマでさえ、なんのクラス分けもないものを平然と作っていたりもする。
2016/06/26(日) 19:28:25.14
>>59
> 上手い切り口で「専用的」に作られたものが、「汎用的」に使えるんだろ。
どこにも書いてないどころか、それと正反対の事を言ってるんだが?

汎用的なのは「ファイルを開く」関数であって
専用的に作られた「設定ファイルを開く」関数ではない。
2016/06/26(日) 19:29:46.58
>>60
頭が柔らかい義務教育時代に
プログラミングの勉強をしないからそうなる。
2016/06/26(日) 19:31:51.90
>>61
おまいが上に責任を投げる事が正しいかについて
長大なレスを付けるから話がややこしくなったんだよ。

俺は業務ロジックの話をしてたんだ。
2016/06/26(日) 19:32:51.90
>>63
おや?自分の読解力のなさに気づいて
他人のせいにするのですかな?w
2016/06/26(日) 19:34:09.83
>>64
しね
あと>>44は例えが適切ではない。
2016/06/26(日) 19:35:16.16
>>65
具体的に何が問題かを言えない時点で話にならないですなw
2016/06/26(日) 19:40:23.85
>>42までは「ファイルを開く」関数の話じゃねーか
2016/06/26(日) 21:58:32.73
>>67
>>41も読もうか?
2016/06/26(日) 22:35:37.91
一気にレス増えてるわ新スレ立ってるわで吹いたんだが。
ここで熱中する人はセンスも知識も最低部類の疑いが強い
まぁ読んでないから知らんけど
2016/06/26(日) 22:36:59.61
プログラミングを知らない人がプログラミング教育をする危険性
https://wirelesswire.jp/2016/06/54228/
71仕様書無しさん
垢版 |
2016/06/26(日) 23:23:27.83
>>70
この人、2chに自分で書いてるやつだな。

文章が同じだもんw
2016/06/26(日) 23:24:46.83
>>71
どれと文章が同じなの?
73仕様書無しさん
垢版 |
2016/06/26(日) 23:26:31.21
>>72
頭の中でプログラミング
74仕様書無しさん
垢版 |
2016/06/26(日) 23:28:55.28
迷惑電話 FJネクスト ウンコ注意9評判 口コミ 悪徳・2ch.net

http://hayabusa6.2ch.net/test/read.cgi/estate/1465394964/
2016/06/26(日) 23:58:22.12
>>73
それはどの話?
76仕様書無しさん
垢版 |
2016/06/27(月) 00:37:06.75
>>75
この板でスレッドのタイトルに設計書とかが入っているスレッド
2016/06/27(月) 00:41:31.11
>>76
つまり具体的に言えないってことかな?w
2016/06/27(月) 00:43:26.60
きっとアンカし忘れただけだろうと思って優しく聞いてみたが
なんかわざとアンカするのを拒否しているようだな。
こりゃ具体的に言うまでは、こいつは答えられないと認識したほうが良さそうだw
79仕様書無しさん
垢版 |
2016/06/27(月) 00:49:10.93
自分で調べろよ。

そいつがいるスレッドはつまんないからいまは見てないんだよ。
2016/06/27(月) 00:50:40.87
>>79
その「そいつ」はここにもいるんだがw
2016/06/27(月) 00:52:28.86
横ですまんが、ここはソース貼るべきだ
でなければ逃げてるようにしか見えない
82仕様書無しさん
垢版 |
2016/06/27(月) 00:54:45.96
客から要件を聞くとプログラムが浮かぶとか言ってるやつだが、いま探したがまだ見つからない。
83仕様書無しさん
垢版 |
2016/06/27(月) 00:59:19.62
http://itest.2ch.net/test/read.cgi/prog/1448622471/
2016/06/27(月) 01:01:25.83
>>83
いやね、特定の人物の話なんだから
レス番号まで書かないと意味ないでしょ。
85仕様書無しさん
垢版 |
2016/06/27(月) 01:02:41.18
DAT落ちしてるわ。

スレッドタイトル
「いきなりコードを書くな。設計してから書け。」
2016/06/27(月) 01:07:55.66
トンファーキックで笑える人
87仕様書無しさん
垢版 |
2016/06/27(月) 08:00:35.66
無能実態派遣残業して時間報酬相場下げるな!
【知的財産と契約料金の搾取促進者ばかり】
[SI生涯損害助長SEを追放すべき]
偽装請負従犯SEの動機
コミュニケーション障害
コンピュータ趣味
人格障害
文系大卒
低偏差値大卒
情報処理資格非保有者

偽装請負従犯SEの迷惑
無償プログラム提供
事前面接
契約外期限遵守
客先指示遵守
知的財産譲渡
中間搾取促進
時間外労働違反
低予備工数見積
残業見積
無料追加
学習不足
裁判苦手
対人障害
健康障害
孤独死

偽装請負従犯SEの代償
低収入低技術
非婚離婚
鬱病早死7
88仕様書無しさん
垢版 |
2016/06/27(月) 12:45:56.24
>>7
> アプリ屋にとっては例外は標準だけで数十個
わざわざ複雑にして自慢するとかバカじゃね?
2016/06/27(月) 12:49:04.20
例外出たから工場止めるよ。

が許されたなら幸せだったのにな。
90仕様書無しさん
垢版 |
2016/06/27(月) 14:47:57.39
センスある人は競技プログラミングでも良い成績になる
2016/06/27(月) 20:42:50.05
>>89
> 例外出たから工場止めるよ。

それは例外をキャッチしなかったら
そうなるって話?

例外をキャッチするから工場は止まらないよね。
これは例外の利点の一つ。


例外を使わないと、エラーが起きても工場は止まらないとか
なって挙句の果てに爆発起こしたりしそうだねw
2016/06/27(月) 20:43:57.97
>>88
例外じゃなくてもエラーの数はこれぐらいあるだろ?
エラーコード表見てみ。
93仕様書無しさん
垢版 |
2016/06/27(月) 21:38:25.96
>>92
ないよ。
94仕様書無しさん
垢版 |
2016/06/27(月) 21:39:05.20
だいたい、なんでアプリがシステムレベルのエラーを意識しないといけないんだ。
95仕様書無しさん
垢版 |
2016/06/27(月) 21:39:31.62
成功したかどうかがわかればいい。
2016/06/27(月) 22:11:52.20
>>93
可哀想にw
97仕様書無しさん
垢版 |
2016/06/27(月) 22:48:23.29
>>96
あなたが一番可哀想な感じがします
自分が知る範囲だけで、他のシステムも同様と決めつけてるところがね
2016/06/27(月) 23:00:56.10
>>97
自分が知る範囲で無いよって言ってるわけかw
2016/06/27(月) 23:01:29.45
Oracleのエラーコード表見てみ?
2016/06/27(月) 23:23:52.55
SQLエラーのことか?
インジェクションされるようなアプリ作るなよ
2016/06/27(月) 23:27:00.50
>>100
流石にそれは無知すぎw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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