メソッド名のスペルミスを修正する


73

私のコードベースでよく使用する方法の1つは、つづりが間違っています(そしてそれは私よりも前のものです)。

これは単にスペルが間違っているだけでなく、もっと重要なことですが、最初にタイプするときに常に名前を間違えます(そして、「ああ、そうです、これにスペルを間違えるべきです...」)

元の方法を中心にいくつかの変更を行っています。機会を利用して、単におかしな方法の名前を変更する必要がありますか?


12
名前変更できますか?制御しないコードで使用されている場合は、後方互換性の問題を正当化する必要があります。

16
*つづりが間違っています。そして、そのメソッドが呼び出されるすべての場所で変更する必要があります。
JohnP

2
*スペルミス...または別のスペル?
HorusKol

2
@JohnP 3つありましたが、1つは修正され、2つはまだ正しくありません。偶然にもOPの名前に非常にうまく適合しています。:)
幻滅

3
間違ってつづられないようにしてください!
メイガス14年

回答:


136

機会を利用して、単におかしな方法の名前を変更する必要がありますか?

絶対に。

ただし、コードがAPIとしてリリースされた場合は、通常、ミススペルされたメソッドを残して、正しい名前のメソッドに転送する必要があります(言語がそのようなことをサポートしている場合は廃止とマークします)。


33
「正しい名前のメソッドに転送する」というアイデアはシンプルで素晴らしいものです。壊れたウィンドウ理論の興味深いリンクも同様に。
dev_feed

2
これがパブリックAPIの一部である場合、これは後方互換性のある変更ではない可能性があることに注意してください(言語によって異なります)。これは聞こえるかもしれません。スペルミスの名前を持つ既存のAPIから継承する必要がある場合は、間違いなく修正します。
Voo 14年

10
@voo-え?新しいメソッドの追加(および同じメソッドとまったく同じ動作を行うためのメソッドの実装の変更)に後方互換性がない言語は何ですか?
テラスティン14年

3
@Telastynでは、Webサービスと言うメソッドを追加するのが難しい場合があります。たとえば、一部のクライアントはWSDLの変更を嫌がり、突然サーバーとの通信を拒否します。これはクライアントでの実装の問題ですが、クライアントが動揺したくない重要なクライアントである場合は、インターフェースを変更できないようにすることができます。
14年

17
@Telastyn (Delphi / Java / C#で使用されるインターフェイスタイプのように)ミススペルメソッド名がインターフェイス上にある場合、名前のスペルが正しいバージョンを追加すると、おそらくそのインターフェイスの既存の実装がすべて破損します。
幻滅

52

そのようなリファクタリングの実行を避ける必要がある場合があります。

  1. メソッドがパブリックインターフェイスで使用される場合。標準的な例は、スペルミスのあるリファラHTTPリファラ今スペルを変更すると、あまりにも多くの影響を持っているでしょうので、間違った綴りは、保管されています。

  2. コードベースがテストでカバーされていない場合。 任意のリファクタリングは、回帰テストを行うことができるようにするためにテストされたコードで実行する必要があります。テストされていないコードベースのリファクタリングは特に危険です。時間が長い場合は、テストを追加することから始めます。時間の制約の下で作業している場合、時間通りに出荷したい場合は、微妙なバグを持ち込むリスクを冒すことは最善の策ではありません。

  3. メソッドが異常な方法使用される可能性がある場合、その使用を見つけることは事実上不可能になります(Ctrl + Fまたは自動リファクタリングツールを使用)。たとえば、C#では、Reflectionを介してメソッドを呼び出して、Visual Studioの[名前の変更]ダイアログを無効にすることができます。JavaScriptでは、inside eval()と呼ばれる関数も見つけるのが困難です。PHPでは、変数変数が問題を引き起こす可能性があります。

  4. プロジェクトのサイズが巨大で、他のチームがメソッドを使用できる場合。これは最初のポイントに似ています。つまり、他のチームに提供するインターフェイスはパブリックインターフェイスと見なすことができます。

  5. 命に関わるプロジェクトを扱う場合。メソッドの名前を変更し、承認された放射線の10倍を患者に送ったり、シャトルが速度を誤って計算したりしないようにするために、ミススペルは数か月の書類作業を正当化するほど重要ではありません。

その他の状況では、メソッドの名前を自由に変更してください。


1
Reflectionに言及しているコメントに対して+1を追加すると、何度も噛みつきます。
DaveShaw

33
ライフクリティカルなプロジェクトが非常に脆弱であるため、わずかなリファクタリングで誰かが殺される可能性が高い場合、誰もそれを信頼してはいけないほど脆弱です。メソッドの名前を変更することさえできない場合、新しい機能や合理化されたユーザーインターフェイスが生命を脅かすバグを導入しなかったことにどのように自信を持ちますか?
user2357112 14年

2
同様に、1つのメソッド名を変更すると、数か月の余分な月間事務処理が発生する場合(たとえば、同時に変更される他のすべての項目の事務処理でほとんどが処理されるのではなく)、プログラミングと事務処理のバランスが崩れます桁違いに大きく、システムを変更せずに大きな改善を行うことは不可能です。
user2357112 14年

8
@ user2357112:ちょっとしたリファクタリングが誰かを殺す可能性が高いと言ったことは一度もありません。それは誰かを殺すことではなく、バグを抱える残りの0.001%のリスクを軽減するためにあらゆることを可能にすることです。これには正式な権限が必要です。これには、いくつかのテスト層が必要です。これには形式主義が必要です。これは「このメソッドの名前をすぐに変更したいのですが、うまくいけばうまくいきます!」動作。ライフクリティカルなプロジェクトは、ビジネスアプリにとって時間とお金の完全な無駄とみなされるテクニックを使用します。それが、彼らがとても信頼できる(そして高価な)理由です。
アルセニムルゼンコ14年

5
@ user2357112:MainMaが指摘したように、これはカジュアルなビジネスアプリに関するものではありません。広範囲にテスト/検証された特別な種類のソフトウェアについてです。メソッドがどこかでリフレクションによって呼び出された場合はどうなりますか?一部のプリ/ポストコンパイルツールがそれを使用するとどうなりますか?ドキュメントはどうですか?それを使用している他のチームはどうですか?彼らは反射を使用していますか?どうすれば...実生活は時々非常に複雑になることがあります。また、場合によっては、防弾方式で結果があるかどうかを確認するよりも、メソッド名をそのままにしておくほうがよい場合があります。
dagnelies

30

数か月前にこれをやったことがあります(さまざまな理由で)。私がとったステップ(言語はPerlでした):

  1. メソッドの名前を変更します。古い名前を新しい名前にエイリアスします(どちらの名前でもメソッドを呼び出すことができるため、これによりコードが中断されることはありません)。
  2. 他の開発者に名前の変更とその理由を知らせ、今後は新しい名前を使用するように伝えます。
  3. 古い名前のコードベースをGrepし、出現箇所を修正します。
  4. 古い名前の使用をログに記録します(この時点でも古い名前を使用しても機能します)。それらのケースを修正してください。
  5. ログにエントリが表示されなくなるまで(4を実行しながら)待機します。
  6. エイリアスを解除します。古い名前を使用して、名前の変更に関するメッセージとともに致命的な例外をスローするメソッドを作成します。
  7. しばらくして、古い名前のメソッドを削除します。

    もちろん、走行距離は異なります。


1つの改善点-古い名前のユーザーを見つけるのにgrepに依存しないでください。フォワーダーの内部にもログインしてください。
ベンフォークト

@BenVoigt#4はそうではありませんか?
ボブ

6

既存のコードを壊さないための良い方法は、次のように新しいメソッド名を古いものに連鎖させることです

private void MyNewMethodName()
{
    TheOldMethodName();
}

そして、古いメソッドを廃止としてマークします(言語がこれをサポートしている場合)。これにより、既存のコードは引き続き機能し、コードベースからすべての古いスペルミスを徐々に取り除くことができます。最終的に、メソッド本体を新しいメソッドにコピーして貼り付け、古いメソッドを削除することさえできます。

/ ivoがコメントで述べたように:コードをからTheOldMethodNameに移動MyNewMethodNameし、古いメソッドから新しいメソッドを呼び出すことは、さらに良いことです。これには、開発者がコードが属する場所を把握するのに役立つという利点もあります。


2
私はあなたの方法に同意します。私も同じことをします。リファクタリングの最も健全で明確かつ安全な方法です。また、コードを古いメソッドから新しいメソッドに移動し、古いメソッドで新しいメソッドを使用するのも良い方法です。コードベースがタイムラインに沿って数回繰り返される場合、古い非推奨のメソッドを削除するだけです。
イボLimmen

1
@IvoLimmenそれは本当に良い提案です。このように、人々は新しいメソッドを使用してさらに頭を悩ませるので、新しいメソッド内から古いメソッドへの古い呼び出しから警告が削除されます。これを回答に追加します。
レミ

1

メソッドの名前を変更:

  • あなたがやりたいことよりも多くの仕事がないように、リファクタリングを通してそれを行う
  • IDEが自動補完をサポートしている場合、そのメソッドを参照するときに使用します

これらは、2つの選択肢です。自動補完(Eclipse IDEなど)を好み、メソッド名を入力する必要はありません。名前の変更に行く; そのメソッドを呼び出すものを見つけて、各場所で直接参照を変更するようにしてください。リファクタリングはそのためのあなたの友人になりますが、そうするときは最も注意してください。


0

私は一般的にはい、名前を変更することをお勧めします。

ここの他の回答には、名前を変更したくない理由が記載されているため、そのような状況に陥った場合は、適切な名前と実装で新しいメソッドを作成し、古いメソッドを変更して新しいメソッドを呼び出すことができます。次に、言語でサポートされている場合、古いものを非推奨としてマークします。

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