güvenli veya otomatik olarak yapın, ancak ikisini birden değil « Otaku – Cedric’in blogu

In: Genel


Geçenlerde dinamik olarak yazılmış dilleri yeniden düzenleme hakkında bir tartışma yapıyordum ve birçok geliştiricinin bu konuda hala sahip olduğu yanlış anlamaların miktarı beni çok etkiledi.

ifade ettim bu makaledeki amacım on beş yıl önceki(!). .

Öncelikle iddiam:

Tip ek açıklamaları olmayan dillerde (örn. Python, Ruby, Javascript, Smalltalk), güvenli olan, yani kodu kırmaması garanti edilen otomatik yeniden düzenlemeleri gerçekleştirmek mümkün değildir. Bu tür yeniden düzenleme işlemleri, yeni kodun hala çalıştığından emin olmak için geliştiricinin denetimini gerektirir.

Öncelikle bir önceki yazımda kullandığım kod snippet’ini adapte edip Python’da yazmaya karar verdim. İşte bulduğum küçük bir örnek:

class A:
    def f(self):
        print("A.f")
class B:
    def f(self):
        print("B.f")
if __name__ == '__main__':
    if random() > 0.5:
        x = A()
    else:
        x = B()
    x.f()

Oldukça basit: bu kod işlevi çağıracak f() herhangi bir sınıf örneğinde A veya B.

IDE’nizden yeniden adlandırmasını istediğinizde ne olur? f() ile f2()? Bu karar verilemez. Her ikisini de yeniden adlandırmanız gerektiğinin açık olduğunu düşünebilirsiniz. A.f() ve B.f(), ancak bunun nedeni bu snippet’in önemsiz olmasıdır. Yüz binlerce satır içeren bir kod tabanında, herhangi bir IDE’nin, kodu kırmama garantisiyle hangi işlevlerin yeniden adlandırılacağına karar vermesi kesinlikle imkansızdır.

Bu sefer bir adım daha ileri gitmeye ve bu noktayı gerçekten kanıtlamaya karar verdim, çünkü pek çok insan hala bunu kabul etmeyi reddediyor. Bu yüzden PyCharm’ı başlattım, bu kodu yazdım, imleci satıra koydum x.f() ve IDE’den yeniden adlandırmasını istedi f() ile f2(). Ve işte olanlar:

class A:
    def f2(self):
        print("A.f")
class B:
    def f(self):
        print("B.f")
if __name__ == '__main__':
    if random() > 0.5:
        x = A()
    else
        x = B()
    x.f2()

PyCharm ilkini yeniden adlandırdı f() ama ikincisi değil! Buradaki mantığın ne olduğundan tam olarak emin değilim, ama mesele şu ki, bu kod artık bozuk ve bunu yalnızca çalışma zamanında öğreneceksiniz.

Bu gözlemin, büyük kod tabanları için dinamik olarak yazılan dillerin yeterliliği üzerinde korkunç sonuçları vardır. Artık bu tür kod tabanlarını güvenli bir şekilde yeniden düzenleyemediğiniz için, geliştiriciler bu yeniden düzenlemeleri gerçekleştirme konusunda çok daha tereddütlü olacaklar çünkü testlerin ne kadar kapsamlı olduğundan asla emin olamayacaklar ve şüpheye düşerek yeniden düzenleme yapmamaya ve kodun çürümesine izin vermemeye karar verecekler.

Güncelleme: reddit tartışması.

Bu yazı 20 Haziran 2021, 20:17’de gönderildi ve altında dosyalandı. Kategorize edilmemiş. Bu girişe verilen yanıtları şuradan takip edebilirsiniz: RSS 2.0. Hem yorumlar hem de pingler şu anda kapalı.

Bir cevap yazın

Ready to Grow Your Business?

We Serve our Clients’ Best Interests with the Best Marketing Solutions. Find out More

How Can We Help You?

Need to bounce off ideas for an upcoming project or digital campaign? Looking to transform your business with the implementation of full potential digital marketing?

For any career inquiries, please visit our careers page here.
[contact-form-7 404 "Bulunamadı"]