Open6
呼び出し側の関数の引数を一気に置換する方法を考える
対象言語は、js, go で考える。
ちなみにjsは、そんなに困ることはないがgoで困ることが多い。
function func1(a, b) {
return a + b;
}
この関数を変更してこうなったとき↓
function func1(a, a2, b) {
return a + b + a2;
}
呼び出し箇所を一気に変更したい( 100ファイル1000箇所あるみたいな状況でも )
func1(1, 2);
↓
func1(1, 2, 3);
と一気に置き換える方法はないか?
これぐらいならシンプルな置換でどうにかなる
func1(1, 2);
↓こうなるとシンプルな置換ではできない
func1(1, getSomething(), 2)
設計的に問題なければ、関数を追加で用意して既存コードを変更しないこともできる
func1(a, b) { return func2(a, 2, c) }
func2(a, b, c) { return a + b + c }
とはいえ、きれいなコードを保ちたい場合は、こういうことを避けたいというケースも多いと思う
じゃあ、呼び出し箇所たどりながら気合で置き換えたらどれぐらいかかるのかというと
一箇所置き換えるのに5秒かかるとすると1000箇所ある場合は5000秒(83分)なので、置換できないところは、気合で頑張ればいいのでは?という気もしてくる。
しかも8割ぐらいは置換できることが多いのでなおさらそう思う。
それでも、これをプログラミングしてるとは思いたくないので、いい感じにしたい。
完全に正確な置換をするには今のところASTで解析して、置換するしか思いつかない。
ASTの処理の手間を少しでも省くために、対象関数名を REPLACE_TARGET__0001
とかにしとくと楽かも
わざわざ言語ごとに、ASTの処理を実装するのが面倒。
軌道に乗るまで手動でやったほうが早いし、今後人生でこの作業にかかる時間の合計よりAST実装の時間のほうが掛かりそう。
でも、AST力を上げておくと、いろんなことに役に立ちそう
別にやって損ではないのでこのアプローチは、どちらかといえば有りより