research/\343\201\252\343\202\223\343\201\241\343\202\203\343\201\243\343\201\246\351\226\242\346\225\260\345\236\213\343\203\227\343\203\255\343\202\260\343\203\251\343\203\237\343\203\263\343\202\260\343\201\247\347\240\224\347\251\266\343\201\256\343\202\263\343\203\274\343\203\211\343\202\222\346\233\270\343\201\223\343\201\206.md
... ...
@@ -4,22 +4,7 @@
4 4
- たくさん方針はあると思いますが、良ければ参考にしてください。
5 5
6 6
## "なんちゃって関数型プログラミング"の方針
7
-### 方針1: 想定されるエラーでクラッシュさせる
8
-- 入力するデータの質をコントロールできるので、例外処理で頑張らない。
9
- - きっと入力元の"生データ"を生成したのも自分自身ではないだろうか。
10
-- もし実行中に例外が発生したら? →そこでクラッシュさせる。
11
- - 例えば生のCSVがパースできなかった
12
- - なぜそれ以上処理を続ける必要がある?
13
- - そこでクラッシュさせて直せばよい。
14
- - ただ`raise Exception()`する。
15
- - どこを間違えたにせよ、対処しないと正しい実験結果は出せない。
16
- - パース用の関数を修正する必要があるかもしれない。
17
- - 計測機器の設定を間違えたのかもしれない。
18
- - 計測方法自体が間違っているかもしれない。
19
-- エラーハンドリングで頑張るのでは無く、エラーが起きる度に正していく。
20
-- ただし、例外を発生させている時点で、純粋関数とは言えない。なので"なんちゃって関数型プログラミング"と呼んでいる。
21
-
22
-### 方針2: 小さくて分かりやすい関数をたくさん作る
7
+### 方針1: 小さくて分かりやすい関数をたくさん作る
23 8
- DataFrameへの操作なら、DataFrameを受け入れてDataFrameを返すような関数を作る。
24 9
- unittestを書くのが簡単になる。
25 10
- 特定の入力に対して出力が一意に定まるようになるので、テストを容易に作れる。
... ...
@@ -34,7 +19,7 @@
34 19
- 「この実験の時は実験条件○○が特殊だったから、この値に反映しないといけない…」
35 20
- 関数に実験名も入力として渡せば条件分岐できる。
36 21
37
-### 方針3: できるかぎりテストを書く
22
+### 方針2: できるかぎりテストを書く
38 23
- pandasの操作は自分で関数化し、それぞれunittestを追加する。
39 24
- 最初は全てにテストを付ける必要は無い。
40 25
- unittestを書いているとコーディング時間が2倍になってしまうかもしれない…
... ...
@@ -49,6 +34,21 @@
49 34
- pandasの場合は構文が結構deprecatedになることがあり、テストがあると安心してバージョンアップできる。
50 35
- その関数内の書き方だけを修正すればプログラム全体に適用できる。
51 36
37
+### 方針3: 想定されるエラーでクラッシュさせる
38
+- 入力するデータの質をコントロールできるので、例外処理で頑張らない。
39
+ - きっと入力元の"生データ"を生成したのも自分自身ではないだろうか。
40
+- もし実行中に例外が発生したら? →そこでクラッシュさせる。
41
+ - 例えば生のCSVがパースできなかった
42
+ - なぜそれ以上処理を続ける必要がある?
43
+ - そこでクラッシュさせて直せばよい。
44
+ - ただ`raise Exception()`する。
45
+ - どこを間違えたにせよ、対処しないと正しい実験結果は出せない。
46
+ - パース用の関数を修正する必要があるかもしれない。
47
+ - 計測機器の設定を間違えたのかもしれない。
48
+ - 計測方法自体が間違っているかもしれない。
49
+- エラーハンドリングで頑張るのでは無く、エラーが起きる度に正していく。
50
+- ただし、例外を発生させている時点で、純粋関数とは言えない。なので"なんちゃって関数型プログラミング"と呼んでいる。
51
+
52 52
53 53
### 方針4: Enum, dataclassを積極的に使う
54 54
- Enum