リファクタリングとコールスタックを増やし間の最適なトレードオフは何ですか?
-
16-09-2019 - |
質問
私は、ユニットが適切にテストすることができる素敵なチャンクに大きな(1000本の+ライン)メソッドの多くをリファクタリングで探しています。
これは私が私のrafactoredブロックの多くとして、コールスタックについて考え始め、その中の他のリファクタリングのブロックを持っている、と私の大きな方法は、他の大規模な方法で呼ばれている可能性があります。
私はリファクタリングは、スタックの問題を呼び出すように導くことができるかどうかを確認するための議論のためにこれを開くしたいと思います。私はそれがほとんどのケースではないだろうが、リファクタリング再帰的な方法については、無限ループを作成せずに、スタックオーバーフローを引き起こすことが可能であるかどうかだろうか?
解決
再帰を除くと、私は、コールスタックの問題を心配しないでしょう。
再帰について:それは慎重に実装され、慎重にそのように、これはまったく異なることないだろうに行われますどんなにをテストする必要があります。
。他のヒント
私はそれが技術的に可能だと思います。しかし、ではない私は自分のコードをテストするとき、それは実際に起こっていない限り心配何かます。
私が子供だった、とコンピュータがRAMの64K持っていた場合は、コールスタックのサイズが重要だっます。
今日では、それは議論はほとんど価値があります。メモリは巨大で、スタックフレームは小さく、いくつかの余分な関数呼び出しはほとんど測定されます。
それは速やかに無限再帰を検出したので、例として、Pythonは人為的に小さなコールスタックを持っています。デフォルトのサイズは1000のフレームであるが、これは、単純なAPI呼び出しで調整可能です。
抵触Pythonでスタックの実行するための唯一の方法は、何も考えずにプロジェクトオイラーの問題に取り組むことです。あなたがスタックを使い果たす前にしても、その後、あなたは通常、時間を使い果たし。 (100000000000000のループは、人間の寿命よりもはるかに長い時間がかかるでしょう。)
私はリファクタリングするときに、再帰なしのstackoverflowを取得するために、それは非常に低いと思います。あなたが割り当ておよび/またはスタック自体の方法の間で大量のデータを渡している場合、私はこれが起こるだろうと見ることができる唯一の方法です。