Bir yöntem adında yazım hatası düzeltme


73

Kod üssümüzde sıkça kullandığım yöntemlerden biri yanlış yazılmış (ve bana göre belirlendi).

Bu beni gerçekten rahatsız ediyor, çünkü yanlış hecelenmiş değil ama daha da önemlisi ilk kez yazdığımda HER ZAMAN adı yanlış bulmamı sağlıyor (ve sonra şunu hatırlamam gerek "Ah, doğru, yanlış yazılmış ...")

Orijinal yöntem etrafında birkaç değişiklik yapıyorum. Sadece ucube yöntemini yeniden adlandırmak için fırsat kullanmalı mıyım?


12
Yeniden adlandırabilir misin ? Kontrol etmediğiniz kod tarafından kullanılıyorsa, geriye dönük uyumluluk aralığını doğrulamanız gerekir.

16
* yanlış yazılmış. Ve yöntemin çağrıldığı her yerde onu değiştirmek zorunda kalacaksın.
JohnP

2
* yanlış yazılmış ... ya da belki farklı bir yazım?
HorusKol

2
@JohnP Üç vardı, şimdi Bir sabittir ve İki hala yanlış. Tesadüfen OP'nin adına oldukça uygun. :)
Disillusioned

3
Hiçbir şeyin yanlış yazılmış olmamasına izin vermeliyiz!
Magus

Yanıtlar:


136

Sadece ucube yöntemini yeniden adlandırmak için fırsat kullanmalı mıyım?

Kesinlikle.

Bununla birlikte, kodunuz bir API olarak yayınlandıysa, genellikle yanlış yazılmış bir yöntemi de bırakmanız ve doğru bir şekilde adlandırılmış yöntemi iletmeniz gerekir ( diliniz bu tür bilgileri destekliyorsa, Eski olarak işaretlenir ).


33
"Doğru adlandırılmış yöntemi iletme" fikri basit ve zekicedir. Kırık pencereler teorisindeki ilginç bağlantı da.
dev_feed

2
Bu, genel bir API’nin parçasıysa, bunun geriye dönük olarak uyumlu bir değişiklik olmayabileceğini unutmayın (dile bağlı olarak). Bu, kulağa geldiği kadar düşük bir ihtimal değildir. Yanlış yazılmış bir adı olan mevcut bir API’yi devralmak zorunda kalsaydım, kesinlikle bunu düzeltirdim.
Voo

10
@voo - ha? Hangi dil yeni bir yöntem ekleyerek (ve aynı davranışı aynen yapacak olanın uygulamasının değiştirilmesi) geriye dönük olarak uyumlu olmaz?
Telastyn

3
@Telastyn, web servisleri söyleme yöntemleri eklemek için bazen zor olabilir. Bazı istemciler, örneğin WSDL'leri değiştirmekten korkuyorlar, aniden sunucu ile konuşmayı reddediyorlar. Bu, istemcideki bir uygulama problemidir, ancak istemci önemli biriyse, üzülmek istemezseniz, arabiriminizi değiştirmenizi çok iyi önleyebilir.
04'te jwenting

17
@Telastyn Yanlış yazılan yöntem adı bir arabirim üzerindeyse (Delphi / Java / C # 'de kullanılan arabirim türünde olduğu gibi), adın doğru yazıldığından bir sürümünün eklenmesi büyük olasılıkla bahsedilen arabirimin tüm uygulamalarını bozacaktır.
Hayal kırıklığına uğramış

52

Bu tür yeniden düzenlemelerden kaçınmanız gereken durumlar vardır:

  1. Yöntem ortak bir arayüzde kullanılıyorsa. Bir kanonik örnek yanlış yazılmış yönlendirenlerin de HTTP referer şimdi yazım değişen çok fazla yansımaları olurdu, çünkü yanlış yazım, tutuluyor.

  2. Kod tabanı herhangi bir test kapsamında değilse. Herhangi üstlenmeden regresyon testi yapabilmek için test kodu yapılmalıdır. Testler altında olmayan kod tabanının yeniden canlandırılması özellikle risklidir. Çok fazla zamanınız varsa, test ekleyerek başlayın; Eğer zaman baskısı altında çalışıyorsanız, zaman içinde gemi almak istiyorsanız, ince böceklerin ortaya çıkma riskini almak en iyi şey değildir.

  3. Yöntem alışılmadık bir şekilde kullanılabiliyorsa , kullanımlarını bulmak neredeyse imkansız hale gelirse (Ctrl + F aracılığıyla veya otomatik bir yeniden ateşleme aracıyla). Örneğin, C #, Visual Studio'nun Yeniden Adlandır iletişim kutusunu etkisiz hale getiren Yansıma yoluyla bir yöntem çağrılabilir. JavaScript'te içinde denilen işlevi eval()bulmak zordur. PHP'de, değişken değişkenleri sorunlara neden olabilir.

  4. Projenin büyüklüğü büyükse ve yöntem diğer ekipler tarafından da kullanılabilirse. Bu ilk noktaya benzer, yani diğer takımlara sağladığınız arayüz herkese açık bir arayüz olarak kabul edilebilir.

  5. Kritik bir proje ile uğraşırsanız. Muhtemelen, yanlış yazım, yöntemin adını değiştirmek ve herhangi bir hastanın izin verilen radyasyonun on katını veya herhangi bir mekiğin hızını yanlış hesaplamasını on katına almasına neden olmayacağından emin olmak için birkaç ay evrak işini haklı çıkarmak için çok önemli değildir.

Başka bir durumda, yöntemi yeniden adlandırmaktan çekinmeyin.


1
Reflection'dan bahseden yorum için +1, beni bir kereden fazla ısırdı.
DaveShaw

33
Hayatı kritik olan projeniz, en küçük yeniden ateşlemenin birini öldürmesi muhtemel olacak kadar kırılgansa, hiç kimsenin yaşamında güvenmemesi gereken kadar kırılgan. Yeni özelliğinizin veya aerodinamik kullanıcı arayüzünüzün bir yöntemi yeniden adlandıramazsanız hayati tehlike oluşturan hatalar ortaya koymadığından nasıl emin olacaksınız?
user2357112

2
Benzer şekilde, değiştirilen bir yöntem adı birkaç ay daha fazla evrak işine neden oluyorsa (örneğin, aynı anda değişen diğer tüm işler için çoğunlukla evrak işleriyle ilgilenmek yerine), o zaman evrak işçiliği dengeleme eğri Birkaç büyüklük sırası ile ve sistemi değiştirmeden büyük bir iyileştirme yapmak mümkün değildir.
user2357112

8
@ user2357112: Asla en küçük refactoring'in birini öldürmesi muhtemel olduğunu söylemedim. Birini öldürmekle ilgili değil, kalan% 0.001 hata riskini azaltmak için her şeyi mümkün kılmakla ilgili. Bu resmi proff gerektirir. Bu, birkaç test katmanı gerektirir. Bu formalizm gerektirir. Bu, "Bu yöntemi hızlıca yeniden adlandırmak istiyorum, umarım işe yarar!" davranışı. Hayati öneme sahip projeler, herhangi bir işletme uygulaması için tam bir zaman ve para kaybı olarak kabul edilecek teknikleri kullanır. Bu yüzden çok güvenilirler (ve pahalılar).
Arseni Mourzenko

5
@ user2357112: MainMa'nın işaret ettiği gibi, bu gündelik iş uygulamalarıyla ilgili değildir. Bu kapsamlı bir şekilde test edilmiş / doğrulanmış özel bir yazılım türüyle ilgilidir. Yöntem bir yerde yansıma ile çağrılırsa? Bazı derleme öncesi / sonrası derleme aracı onunla bir şey yaparsa ne olur? Peki ya belgeler? Peki ya kullanan diğer takımlar? Yansıma kullanıyor mu? Peki ya ... Gerçek hayat bazen oldukça karmaşık olabilir. Ve bazen, kurşun geçirmez bir şekilde bir sonuç olup olmadığını doğrulamak yerine, bir yöntem adına dokunulmadan bırakmak daha iyidir.
dagnelies

30

Bunu birkaç ay önce yaptım (farklı nedenlerden dolayı). Attığım adımlar (dil Perl idi):

  1. Yöntemi yeniden adlandırın. Eski adı yeni isme takma ad (yöntem, iki ada göre çağrılabildiği için herhangi bir kodu kırmamalıdır).
  2. Geliştiricilere geri kalanı, isim değişikliği ve neden yeni adlarını kullanmaları gerektiğini söyleyerek bildirin.
  3. Eski isim için kod tabanını açın, tüm oluşumları düzeltin.
  4. Eski adın tüm kullanımlarını günlüğe kaydedin (eski adı kullanarak şu anda çalışmanız gerekir). Bu davaları düzelt.
  5. İşlem kaydında başka kayıt görünmeyene kadar (4. yaparken) bekleyin.
  6. Takma adı boz. İsim değişikliği hakkında bir mesaj içeren önemli bir istisna atan eski adı kullanarak bir yöntem yapın.
  7. Bir süre sonra, eski adı olan yöntemi kaldırın.

    Elbette, kilometreniz değişecektir.


Bir gelişme - eski adı kullanan kullanıcıları bulmak için grep'e güvenmeyin, ayrıca iletici içine giriş yapın.
Ben Voigt

@BenVoigt # 4'ün yaptığı şey bu değil mi?
Bob

6

Var olan herhangi bir kodu kırmamanın iyi bir yolu, yeni yöntem adını eskisi gibi zincirlemek olabilir.

private void MyNewMethodName()
{
    TheOldMethodName();
}

ve sonra eski yöntemi eski olarak işaretleyin (eğer diliniz bunu destekliyorsa). Bu şekilde, mevcut herhangi bir kod çalışmaya devam eder ve eski tüm yazım hatalarını yavaş yavaş kod tabanınızdan çıkarabilirsiniz. Sonunda, yöntem gövdesini yeni yönteme kopyalayıp yapıştırabilir ve eskisini silebilirsiniz.

/ Edit ivo'nun yorumunda söylediği gibi: Yapılacak daha iyi bir şey, kodu TheOldMethodNamealıp içine taşımak ve eskisinden MyNewMethodNameyeni yöntemi çağırmak olacaktır. Bu, aynı zamanda kodun ait olduğu yere başını çekmesi için dev'in yardım etme avantajına da sahip olacak.


2
Yöntemine katılıyorum; Ben de aynısını yapardım. En akılda kalıcı, açık ve güvenli yeniden yapılandırma yöntemidir. Bunun iyi bir yolu da, kodu eski yöntemden yeni yönteme taşımak ve eskisinin yeni yöntemi kullanmasını sağlamaktır. Kod temeli zaman çizelgesinde birkaç yineleme olduğunda, yalnızca eski kullanımdan kaldırılmış yöntemi kaldırmanız gerekir.
Ivo Limmen

1
@IvoLimmen Bu gerçekten iyi bir öneri. Bu yolla insanlar yeni yöntemi kullanmaya başlamayı daha da kolaylaştırıyor ve bu da eski yönteme gelen eski çağrıya yeni bir çağrının bir uyarı vermesini engelliyor. Bunu cevabımı ekleyeceğim.
Rémi

1

Yöntemin yeniden adlandırılması:

  • Refactoring yoluyla, yapmak istediğinizden daha çok işiniz varsa yapın.
  • IDE'niz otomatik tamamlamayı destekliyorsa, bu metoda atıfta bulunurken kullanın

Bunlar gidebileceğin iki seçenek. Otomatik tamamlamayı tercih ederim (örn. Eclipse IDE) ve yöntem adını yazmam gerekmez. Yeniden adlandırmak için gidiyor; sadece bu yöntemi neyin çağırdığını öğrendiğinizden emin olun ve her yerdeki doğrudan referansları değiştirin. Yeniden düzenleme, bunun için arkadaşınız olacak ama bunu yaparken en dikkatli olun.


0

Genel olarak evet öneririm, yeniden adlandırın.

Buradaki diğer cevaplar, neden yeniden adlandırmak istememenizin iyi nedenlerini listelemiştir, bu nedenle, kendinizi böyle bir durumda bulursanız , uygun ad ve uygulamaya sahip yeni bir yöntem oluşturabilir ve eski yöntemi yeni yöntemi çağırmak için değiştirebilirsiniz. . Ardından, diliniz destekliyorsa eskisini kullanım dışı olarak işaretleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.