Dinamik bir dilde yazılmış kodda nasıl gezinir ve yeniden düzenlersiniz?


14

Python, Ruby veya Javascript yazmanın çok az kaynak gerektirdiğini seviyorum. Basit fonksiyonel yapıları seviyorum. Temiz ve basit sözdizimini seviyorum.

Bununla birlikte, dinamik bir dilde büyük bir yazılım geliştirirken gerçekten kötü olduğum üç şey var:

  • Kodda gezinme
  • Kullandığım nesnelerin arayüzlerini tanımlama
  • Verimli yeniden düzenleme

Ben basit editörler (yani Vim) yanı sıra IDE (Eclipse + PyDev) deniyorum ama her iki durumda ben bellek ve / veya sürekli "grep" ve tanımlamak için kodu okumak için çok daha fazla taahhüt zorunda hissediyorum arayüzler. Bu, özellikle birden fazla bağımlılığa sahip büyük bir kod tabanı ile çalışırken geçerlidir.

Yeniden düzenleme işlemine gelince, örneğin yöntem adlarını değiştirmek, birim testlerimin kalitesine büyük ölçüde bağımlı hale gelir. Ve ünite testlerimi uygulamanın geri kalanını "keserek" ayırmaya çalışırsam, saplamamın arayüzünün sapladığım nesne ile güncel kaldığının garantisi yoktur.

Eminim bu problemler için geçici çözümler vardır. Python, Ruby veya Javascript'te nasıl verimli çalışıyorsunuz?


PyDev'in yeniden adlandırma özellikleri benim için şimdiye kadar harika çalıştı.

Yanıtlar:


3

Kodda gezinme

VIM'den daha iyi bir editör edinin.

Komodo Edit kullanıyorum.

Belleğe çok daha fazla iş yapmak zorunda olduğumu hissediyorum

İyi. Düşünmek iyidir. "Öğrenmenin" eninde sonunda "hafıza" ya yol açtığını görüyorum.

Sürekli "grep" ve arayüzleri tanımlamak için kodu okuyun.

Bu tipiktir. Onları hatırlayamıyorsanız, o zaman çok karmaşıklar, değil mi? Basitleştirme zamanı.

Basit oluşturmak zordur. Ancak hatırlamakta zorlandığınızda, bu kötü tasarımın bir belirtisidir.

Grep kullanıyorum. Benim için çalışıyor. Komodo Edit'im çok güzel aramalara sahip. Notepad ++ da öyle

Kullandığım nesnelerin arayüzlerini tanımlama

Doc Dizeleri ve help()işlevi çalışır. Onları kullanıyorum. Günlük.

Verimli bir şekilde yeniden düzenleme ... büyük ölçüde birim testlerimin kalitesine bağlı.

Bu haber değil. Statik bir dilde bile her zaman doğrudur.

Statik bir dilde, genellikle derlendiğinde - derlendiği sürece - gerçekten işe yarayacağını varsayarsak. Bu açıkça yanlış, ama tembelleşiyoruz.


Eminim bu problemler için geçici çözümler vardır.

Bunlar "sorun" değildir ve "geçici çözüm" gerektirmez.


Dinamik bir dil, işlediğiniz nesnelerin türünü tam olarak bilmemekle ilgilidir. Bir parametre aldığınızda, bunun bir "quack ()" ve "feathers ()" yöntemi tanımladığını varsayarsınız, ancak belgelerin nerede olduğunu bilmiyorsunuzdur (aslında, birden çok uygulamasında birden fazla docstring'e sahip olacaklardır).

"nesnelerin türünü bilmiyorum"? Gerçekten mi. Bir nesnenin istemcisini tasarladığımda, ne tür tasarladığımı biliyorum.

Birden fazla istemciye tarafından kullanılan bir hizmet, tanımladığınızda ben tanımlanmış gerekli arayüze sahip olduğunda, "tam" tipi, ilgili değildir quack()ve feathers().

Son olarak, ince bir sorun olduğunda nadir durumlarda "kesin" türünü belirlemek için Okuma-Yürüt-Yazdır-Döngü ve diğer araçlar var. Aslında her gün bunu kullanıyorum.

>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)

Bir nesnenin türünü açmak için - en azından Python'da - çok zor görünmüyor. Dinamik dillerin bir REPL'si olmalı, neler olup bittiğini görmeyi oldukça kolaylaştırıyor.

Beklenen parametre sırasını da bilmiyorsunuz. Bir IDE'nin orada yardım etmesi zor görünüyor.

Bu pek mantıklı değil. help()İşler.

Ve IDE'm genellikle tanımı bulabilir. Her zaman değil - bazı kıvrımlı dinamik yapılar temel sınıfı kolayca gizleyebilir. Bu durumda, aslında yöntem tanımını bulmak için nesnenin sınıfı hakkında düşünmek zorunda. Tabii ki, kodu yazıyorum, bu yüzden orada çok az (ya da hayır) gizem var.


6
Belleğe daha fazla
Nicole

@Renesis: Arayüzlerde herhangi bir desen veya sistem varsa ezberleme kötü değildir.
S.Lott

1
@Renesis ezberleme arayüzlerine katılıyorum, zihnimi gerçek düşünceden uzaklaştırıyor. Ekibimdeki başka bir kodlayıcının parametreleri sipariş etmeye nasıl karar verdiğini daha az umursamadım. Büyük bir kod tabanının farklı adlandırma standartlarına sahip çok sayıda farklı kitaplık kullanması nadir değildir ve bu bileşenleri basitleştirmek veya birleştirmek genellikle imkansız veya pratik değildir.
Philippe Beaudoin

Re: Doc dizeleri, nesnenin türünü bildiğinizde iyidirler, ancak genellikle bilmezsiniz ve bunu aramak zorundasınız.
Philippe Beaudoin

1
grr ... Vim'den daha iyi bir editör yok: P
Anto


1

ReSharper, TeamCity ve IDEA yazarları olan bir şirket var - JetBrains . Son zamanlarda dinamik dillere bakmaya başladılar ve Python, PHP ve Ruby için araçlarını yayınladılar.

Kalitesi harika. Bunlar favori IDE'niz için başka bir eklenti değil, tam özellikli IDE'ler ve yeniden düzenleme / gezinme / hata ayıklama vb.İçin oldukça iyidir - IDEA lite gibidir.

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.