タグ付けされた質問 「refactoring」

リファクタリングは、既存のコードを再構築し、外部の動作を変更せずに内部構造を変更するための統制のとれた手法です。コードのリファクタリングに関する自由回答形式の質問は、Stack Overflowのトピックから外れていますが、コードレビューには適切な場合があります。

23
(6+)パラメータが多すぎるメソッドをリファクタリングする最良の方法は何ですか?
ときどき、不快な数のパラメーターを持つメソッドに遭遇します。多くの場合、それらはコンストラクターのようです。より良い方法があるべきだと思われますが、それが何であるか私にはわかりません。 return new Shniz(foo, bar, baz, quux, fred, wilma, barney, dino, donkey) 私は構造体を使用してパラメーターのリストを表すことを考えましたが、それは問題をある場所から別の場所に移し、その過程で別のタイプを作成するようです。 ShnizArgs args = new ShnizArgs(foo, bar, baz, quux, fred, wilma, barney, dino, donkey) return new Shniz(args); そのため、改善のようには見えません。それで、最善のアプローチは何ですか?
102 refactoring 

11
誰かが未使用のコードを削除(または保持)する利点を説明できますか?
未使用のコードをプロジェクトから削除する必要があると何度も聞いています。しかし、「なぜ?」は私にははっきりしません。 それを削除しないことの私のポイントは: コードはすでに書かれていて、努力が費やされている コードは、合成環境と実際の環境でテストできます うまく整理されていれば(グループ化、個別パッケージ、疎結合など)、全体的なコード分析やリファクタリングを妨げることはありません コードは将来使用される可能性があります 削除すると、作者は不快に感じるかもしれません 誰かが未使用のコードを削除(または保持)する利点を説明できますか?
102 refactoring 

1
ReSharperで既存のインターフェースにメソッドを抽出する
インターフェイスを実装するクラスに新しいメソッドを追加しています。「インターフェイスの抽出」リファクタリングを使用して、メソッドをインターフェイスに追加するだけです。しかし、ReSharperが既存のインターフェースへのメソッドシグネチャの追加をサポートしているようには見えません。 何かが足りないような気がしますが、なんとかできるはずです。最初にメソッドシグネチャをインターフェイスに追加する必要があるかもしれませんが、これは私が時々作業している方法です。ショートカット、機能がない、またはReSharperを間違って使用していますか?

14
Vimでのリファクタリング
もちろん、IDEでリファクタリングできるという事実は多くの人にとって貴重です。私がコーディングしているときはほとんどそうしませんが、他の誰かのソースを編集しているときはそうするかもしれません。Vimの複数のファイルにまたがって、このような簡単なタスクをどのように達成しますか Rubyをリファクタリングするためのこのプラグインを見つけましたが、「任意の」言語はどうですか?
98 vim  refactoring 

30
C#のどのReSharper 4+ライブテンプレートを使用していますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 C#用のどのReSharper 4.0テンプレートを使用していますか? これらを次の形式で共有しましょう。 [題名] オプションの説明 ショートカット:ショートカット 使用可能な場所: [AvailabilitySetting] // Resharper template code snippet // comes here マクロのプロパティ(存在する場合): Macro1-値-EditableOccurence Macro2-値-EditableOccurence 回答ごとに1つのマクロをお願いします。 以下は、推奨される形式でライブテンプレートを説明するNUnitテストフィクスチャとスタンドアロンNUnitテストケースのサンプルです。

7
Vimで変数名を変更する
多くの1文字の変数名を含む多くのC / PerlコードをVimから読み取ろうとしています。 コードを読んでいる最中に変数の名前をより意味のあるものに変更できるように、残りの部分をより速く読み取ることができるコマンドがあると便利です。 Vimにこれをすばやく実行できるコマンドはありますか? 正規表現が機能するとは思わない: 同じ1文字の名前は、異なるスコープブロックで異なる目的を持つ場合があります 同じ文字の組み合わせが別の大きなvar名の一部であるか、文字列またはコメントに含まれている可能性があります...それらを変更したくない 既知の解決策はありますか?

8
C#で複数の文字列要素を置き換える
これを行うためのより良い方法はありますか... MyString.Trim().Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace("/", "").ToLower(); 文字列クラスを拡張して1つのジョブに抑えましたが、もっと速い方法はありますか? public static class StringExtension { public static string clean(this string s) { return s.Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace(".", "") .Replace("eacute;", "é").ToLower(); } } 楽しみのために(そしてコメントの議論を止めるために)、以下のさまざまな例のベンチマークの要点を示しました。 https://gist.github.com/ChrisMcKee/5937656 正規表現オプションのスコアはひどいです。辞書オプションが最も速く表示されます。stringbuilder replaceの長巻きバージョンは、速記よりもわずかに高速です。

5
Visual Studio2015にリファクタリングメニューがありません
Visual Studio2015で右クリックのコンテキストメニューを見つけるのに問題があります。プロジェクトまたは作業中のファイルに問題がないことを知っています。Visual Studio 2013で右クリックのコンテキストリファクタリングメニューを見つけることができます。ただし、Visual Studio 2015では、右クリックのコンテキストメニューにリファクタリングのコンテキストメニューがありません。 どこに行ったの?どうすれば元に戻すことができますか? メニューの[編集] →[リファクタリング]を提案に含めることはできません。 メニューの[ツール] → [設定のインポートとエクスポート]を使用してVisualStudioの設定をデフォルトにリセットしようとしましたが、メニューも元に戻りませんでした。

16
Ctrl + R、Ctrl + Rコマンドが機能しない
Visual Studio 2008内でCtrl+ R、Ctrl+Rコマンドを使用して、変数の名前を変更しようとしています。下部に次のようなエラーメッセージが表示されます 「キーの組み合わせ(Ctrl+ R、Ctrl+ R)は、現在使用できないコマンド(&Rename ...)にバインドされています。」 私はそれを実行していないか、ファイルの変更を禁止している可能性があり、F2コマンドで名前の変更を許可していると思われるものは何もありません。誰かがこれを修正する方法を知っていますか? 編集:私はResharperをインストールしていますが、以前は同じセットアップでこれを行うことができました。最近、コンピューターを移行しました。

6
IntelliJでJavaクラスのメソッドを並べ替える簡単な方法は?
コードを手動でカットアンドペーストするよりも、IntelliJのクラスソースファイル内のメソッドを並べ替える簡単な方法はありますか?最近では、レガシーコードをリファクタリングするときに、たとえばソースコード内で関連するメソッドを互いに近づけるために、これが必要になることがよくあります。 Eclipse AFAIKには、IntelliJの構造ビューに似たビューがあり、メソッドをドラッグアンドドロップできます。ただし、これはIntelliJでは機能せず、そのヘルプからもヒントを見つけることができませんでした。 具体的にはIntelliJ9.0.2を使用しています。


8
「符号付き/符号なしの不一致」警告(C4018)に対処するにはどうすればよいですか?
私は、高性能と低メモリオーバーヘッドを念頭に置いて、C ++で記述された多くの計算コードを使用しています。STLコンテナー(ほとんどvector)を頻繁に使用し、ほぼすべての関数でそのコンテナーを反復処理します。 反復コードは次のようになります。 for (int i = 0; i < things.size(); ++i) { // ... } ただし、符号付き/符号なしの不一致の警告が生成されます(Visual StudioのC4018)。 OpenMPプラグマを頻繁に使用するため、intあるunsignedタイプに置き換えることは問題であり、カウンターはint。である必要があります。 私は(数百の)警告を抑制しようとしていますが、問題に対するいくつかのエレガントな解決策を見逃しているのではないかと心配しています。 イテレータについて。イテレータは適切な場所に適用すると素晴らしいと思います。私が使用しているコードは、ランダムアクセスコンテナを何かに変更することはなくlist(したがって、反復処理int iはすでにコンテナに依存しません)、常に現在のインデックスが必要になります。また、入力する必要のあるすべての追加コード(イテレーター自体とインデックス)は、問題を複雑にし、基になるコードの単純さを難読化します。
80 c++  refactoring 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.