トップページ > プログラム > 2016年07月13日 > 2JhFq5Nw

書き込み順位&時間帯一覧

1 位/179 ID中時間01234567891011121314151617181920212223Total
書き込み数22100000010000000000012514



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net

書き込みレス一覧

オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
76 :デフォルトの名無しさん[sage]:2016/07/13(水) 00:53:31.98 ID:2JhFq5Nw
>>65
まずMain関数はこれだけだ。
これ以外不要。

public class Test {
 public static void Main() {
  try {
    CreateTempFile("targetPath");
    MaggageBox.Show("一時ファイルが作成されました");
  } catch(XXXException e) {
    MaggageBox.Show(e.Message);
  }
 }
}
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
77 :デフォルトの名無しさん[sage]:2016/07/13(水) 00:59:57.51 ID:2JhFq5Nw
CreateTempFileの中身はこうだな

void CreateTempFile(string path) {
 String directory_path = ディレクトリのパス(path);
 Directory.CreateDirectory(directory_path);
 File.Create(path);
}

ディレクトリやファイル作成時にExistsなんてやる必要ない。
Existsのチェックした後に、他プロセスから作成されることもある。
「チェック→実行」のパターンはロック機能がない限りたいていアンチパターン。
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
78 :デフォルトの名無しさん[sage]:2016/07/13(水) 01:03:40.12 ID:2JhFq5Nw
結局のところこの程度であればMainに全部入れてもよい良い

public class Test {
 public static void Main() {
  try {
    String path = "targetPath";
    String directory_path = ディレクトリのパス(path);
    Directory.CreateDirectory(directory_path);
    File.Create(path);
    MaggageBox.Show("一時ファイルが作成されました");
  } catch(XXXException e) {
    MaggageBox.Show(e.Message);
  }
 }
}

このコードを出発点としてだ。
メッセージを変えたいのであれば、
メッセージだけを変えるように工夫すればいい。

Mainに全部入れても良いと言ったが、CreateTempFile()という1関数で実行したいならそれもあり
その場合、CreateTempFile()でメッセージを変えたい例外だけトラップして
メッセージを置き換えて投げ直すだけで、Main関数は>>76のようにシンプルのままでいられる。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
66 :デフォルトの名無しさん[sage]:2016/07/13(水) 01:25:57.58 ID:2JhFq5Nw
>>63
curryは関数型のスタイルなら使うが
オブジェクト指向型(手続き型)では使わない
たぐいの関数だからだよ。

関数型ライブラリのlodashでは実装されている。
https://lodash.com/docs#curry

最近は関数型のメリットや使いやすさも理解されてきたが、
JavaScriptは関数型の能力はあっても、文化としてオブジェクト指向型。
そしてJavaScriptは互換性の問題から勝手に拡張するわけにも行かず、
なるべく少ない関数だけを標準化しようとしている。
標準化に時間がかかるんだろうね。

だから昔は関数型に興味を持たれず実装されず、
今は互換性のために実装されないという流れ、
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
81 :デフォルトの名無しさん[sage]:2016/07/13(水) 02:16:26.70 ID:2JhFq5Nw
> 当然STLや自前クラスがどの例外保証を持っているかすべて把握してないと駄目だし、

例外保証ってなんや?

その例外保証があるかどうかわからんものが
戻り値でエラーを返したら、それを保証してくれると
思う根拠は何や?

気をつけることがあるとしたら、それは戻り値でも同じだし
正常処理とエラーを、一つの戻り値(変数)に入れる分
複雑度は上がるんだぞ。
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
86 :デフォルトの名無しさん[sage]:2016/07/13(水) 09:37:32.17 ID:2JhFq5Nw
>>84
> .Netにも例外を投げるInt32.Perseと投げないInt32.TryPersreの2種類があるし

名前が重要なんだよ。(ちなみにParseな)

例外を使ったときのメリットは、関数の名前通りの戻り値にできるってこと。

Parseはパースするんだよ。だから戻り値はパースした結果であり
エラーを戻すことはない。パースできなければ例外。

TryParseはパースすることをトライするんだよ。だから戻り値はトライした結果。
もしトライすることすらできなければ、それは当然例外。

その2つは、例外を投げるかどうかの違いじゃなくてやる処理の違い。
そしてどちらもやるべきことができなければ、例外を返す。
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
88 :デフォルトの名無しさん[sage]:2016/07/13(水) 21:38:19.72 ID:2JhFq5Nw
>>87
これは力説するほどのことだよ。
なぜなら可読性の話だから。

英語わからんとか、ソースコードを命令の並びだとかしか
認識してないレベルの人にはわからないだろうけど、
ソースコードは読むもの。

読みやすさを大きく左右する要素の一つが、
適切な名前をつけているかどうかだから。

たまに適当な関数名つけてる人がいるけど、ほんとやめてほしい。
適当な単語を並べただけじゃソースコード読めないから。
名前から意味がわからないから、中の処理を読んで解析しないといけなくなる。
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
68 :デフォルトの名無しさん[sage]:2016/07/13(水) 22:50:19.43 ID:2JhFq5Nw
>>67
それは部分適用な。
http://qiita.com/7shi/items/a0143daac77a205e7962
> カリー化と部分適用はよく混同されるので注意が必要です。

しかもそれthisがnull(グローバルオブジェクト=ブラウザならwindow)に
変更されているから(それがbindの本質的な機能だから当然だが)
カリー化はthisを変更したりしない。

これでbindとかリー化と部分適用の違いがわかるだろ

var obj = (function () {
 function add (x, y) { return this.location + (x + y); }
 var add1 = add.bind(null, 1); // thisのbind + 部分適用
 var curried_add = _.curry(add); // カリー化
 var add2 = curried_add(2); // 部分適用

 return {add1, add2}
}());

obj.location = "obj"

alert(obj.add1(6)); // URL + 7
alert(obj.add2(6)); // obj8
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
95 :デフォルトの名無しさん[sage]:2016/07/13(水) 22:58:10.35 ID:2JhFq5Nw
>>89
> Parseが返すパーズした結果とは何ぞや?

正しくはInt32.Parseなんだから当然Int32だろw
Int32に変換した結果を戻す
(変換できなければ戻さない)

> 俺には名前だけではさっぱり分からんのだが

あー、うん。クラス名が先に作ってことに
気づかなかったのねw
>>86で引用してる>>84にかいてあんだろ。
気づけよw
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
97 :デフォルトの名無しさん[sage]:2016/07/13(水) 23:11:23.52 ID:2JhFq5Nw
>>94
> なおJavaScriptは0割は無限大になるというお気楽仕様だ。

いや、お前、例外っていったら0除算しか思いつかんのかよw
eval("{") とか実行してみろ。JavaScriptは例外を使う言語だ。

0以外の数値を0で割ったら無限大になるのは数学的に正しい。
JavaScriptが無限大を扱える言語ってだけだ。
もちろん数学的に正しいことをやっているから、 0 / 0 は NaN (非数)になる。
少なくともこの点は、お気楽ではなく高度な言語だと言える。

もっともJavaScriptに例外が搭載されたのはJavaScript 1.4(1999年あたり)からだけどな。
それ以前は(エラーを戻り値で返すのではなく)スクリプトが停止され
window.onerrorイベントが呼ばれたんだっけな?もう忘れたが。
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
99 :デフォルトの名無しさん[sage]:2016/07/13(水) 23:12:49.31 ID:2JhFq5Nw
>>96
> Int32.Parse だからといって、必ずInt32が返るとは限らないだろ
> おまえは、human.age()で必ずhumanが返ると考えるか?

Parseとageで関数名が違ってるじゃんw
名前で返すものが決まるって言ってんだろ。

human.parseだったら、human返すんじゃねーの?
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
101 :デフォルトの名無しさん[sage]:2016/07/13(水) 23:18:25.58 ID:2JhFq5Nw
>>94
> 他の関数型言語の例外機構ってどうなっているんだ?知ってたらよろしく。

関数型で戻り値でエラー情報なんか返したら
大混乱になるわw

関数呼び出しの中の、関数呼び出しの中の、関数呼び出しの中の、関数呼び出し で
エラー情報が返ってきたら、if式による分岐の嵐でもはや
関数型言語のように見えないだろうね。
オブジェクト指向システムの設計 172 [無断転載禁止]©2ch.net
102 :デフォルトの名無しさん[sage]:2016/07/13(水) 23:22:40.62 ID:2JhFq5Nw
>>100
> ヒューマンパーズオブジェクトが返るかもしれないだろ

ほらね? 何が返るか想像できてるじゃんw

Int32.Parseじゃ何を返すかさっぱりわからないって言ってるから
それが間違いだよって話。

なにも100%完全に返り値の情報がわかるなんて言ってないんだよw
+ JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
69 :デフォルトの名無しさん[sage]:2016/07/13(水) 23:36:47.96 ID:2JhFq5Nw
説明していなかったけど、 _.curry(); は
lodashが提供しているカリー化のための関数な。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。