Birisi FP düşüncesine nasıl zorunlu kod okumalı?


14

Beş ay önce üniversiteden mezun oldum ve son dört aydır yerel bir kuruluşta çalışıyorum. Üniversitedeyken Haskell, F # vb. Bize üniversitede Java öğretildi, ancak çok geçmeden fonksiyonel programlamaya maruz kaldım ve zorunlu programlama ile yaptığımdan çok daha fazla zaman geçirdim. Sonuç olarak, beynim işlevsel bir düşünce için kablolanır. Katıldığım şirket Python kullanıyor ve kod çok zorunluluk. Zorunlu kodları okumakta çok zorlanıyorum. Mutasyonları takip edemiyorum. Başka bir for-if -... yuvalama dört düzeyden daha derine inerse, kodda neler olduğunu tamamen kaybederim. Buna eklemek için Python dinamik bir dildir, bu nedenle kodda hiçbir tür yoktur. O' kod tabanımızın bir kısmını anlamaya çalıştığımdan beri haftalardır (ki bu 'orta derecede karmaşık'), ancak şimdiye kadar bunu anlamada kayda değer bir ilerleme kaydetmedim. Lütfen bu kodu nasıl anlayacağım konusunda bazı pratik teknikler sunun. Şimdiden teşekkürler!

Düzenleme:
Belki de kod gerçekten çok yorum olmadığını ve isimleri de çok sezgisel olmadığını belirtmek gerekir.


1
Yorumunuz veya yanlış yorumlarınız mı var? Eminim yorumlar, bahsettiğiniz koşullar altında iyi yaşlanmayacaktır.
Larry Coleman

Kod "kendini yorumlama" olarak atfedilebilir kod son derece küçük bir alt küme sürece, ben en azından aksi takdirde anlaşılmaz anlamsız bana rehberlik etmek için yararlı ipuçları bir dizi içerebilir en azından bazı yorumlar olurdu! Ama bu sadece benim!
John Tobler

2
Zorunlu programcılar bile yan etkilerini en azından sezgisel olarak sınırlama ve küçük yöntemler yazma eğilimindedir. Bence idealden daha az kod tabanına geldiniz.
Mauricio Scheffer

Yanıtlar:


14

Eski kodu anlamak zor. İşlevsel ve prosedürel ile hemen hemen hiçbir ilgisi yoktur.

  1. Bir tür harita oluşturun. Python paketlerinin ve modüllerinin bileşen diyagramı. Her modül için sınıf diyagramları oluşturmanız gerekir.

  2. Python yorumlayıcısını kullanın. Modülleri içe aktarabilmeli, nesne oluşturabilmeli ve etkileşimli olarak kullanabilmelisiniz. Bu yüzden Python popüler. type(x)Bir değişkenin ( x ) gerçekte ne tür olduğunu görmek için yazdırabilirsiniz .

  3. Şüphe duyduğunuzda, ünite test kodunu okuduğunuzdan emin olun. Birim test kodu yoksa, yeni bir kod tabanı öğrenmenin yanı sıra büyük, baş döndürücü sorunlarınız da vardır.

  4. Bir şeyler yazın. Yan belgelerle başlayın. Ardından, neler olduğunu bildiğinizi düşündüğünüzde, işlevlere, yöntemlere ve sınıflara doktora yorumları ekleyin. Bunları erken ve sık sık ekleyin.

  5. Öğrendiklerinizi toplamak için Sfenks'i 'autodoc' ile kullanın.

En önemli kısım bu. Bir şeyleri kafanızda tutmak zor. Belgeleri belge dosyalarında tutmak daha kolaydır.


6
+1. Anlamak herhangi eski kodu İyi yazılmışsa bile zordur.
quant_dev

12

Zorunlu kodları okumakta çok zorlanıyorum. Başka bir for-if -... yuvalama dört düzeyden daha derine inerse, kodda neler olduğunu tamamen kaybederim.

Bekle ... Herkes böyle derin yuvalama seviyeleri ile kodun izini tamamen kaybeder. Ya da Linus Torvalds'ın dediği gibi:

3'den fazla girinti seviyesine ihtiyacınız varsa, yine de mahvoldunuz ve programınızı düzeltmelisiniz.

Belki de kodda çok fazla yorum olmadığını ve isimlerin de çok sezgisel olmadığını belirtmeliyim.

Bu, şirketiniz ortak en iyi uygulamalara bağlıymış gibi gelmiyor.

Ben olsaydım, sadece kod tabanını disiplin ve güçle anlamaya çalışırdım. Sadece tekrar tekrar kazın. Muhtemelen bir şey gibidir. Şu anda su altında olduğunuzu hissediyor ve nefes alamıyorsunuz ancak kod tabanını incelemeye devam edersiniz ve yakında yüzeye çıkacaksınız.

Korkarım, sorunuzun kod tabanını nasıl anlayacağınız konusunda iyi bir tavsiye sunmak için teknik detaylardan yoksundur, ancak birkaç oturumda deneyimli meslektaşlarınızla uğraşmak asla yanlış değildir. Size verdikleri uygulama kararlarının yanı sıra genel mimariyi ve farklı bileşenlerin birbirleriyle nasıl etkileşimde bulunduğunu açıklamalarını sağlayın.

Fonksiyonel dillerden zorunlu / OO'lara geçiş için genel tavsiye vermek zordur. Elbette, "Nesnelerin durumlarını ve davranışlarını düşünmeniz gerekiyor" gibi birkaç çiçekli ifadeden bahsedebilirim, ancak bunlar size çok yardımcı olmaz, bence bu deneyimlemeniz gereken bir şey.


Girinti sorunu daha kötü olabilir: dil sütunsal kod (RPG gibi) olduğunda ve gerçek bir girinti olmadığında . Bazı araçlar bunu düzeltmeye çalışır ...
Clockwork-Muse

2

(Tanımladığınız kötü uygulamalardan büyükse) birim testler varsa, kodun nasıl test edildiğini görmek için bunlara bakabilirsiniz. Bu, kodun ne yaptığı hakkında iyi bir fikir verebilir.

Aksi takdirde, yazılı şekilde alışmak için daha genel python kodu okuma öneririz.


2

Bazı parçaları Python'dan sözde Haskell'e veya ne istersen çevirmeyi deneyebilirsin. Bu, hangi zorunlu yapıların hangi işlevsel yapılara gevşek bir şekilde eşlendiğine dair bir fikir verebilir. Daha fazla deneyim kazandıkça zorunlu yapılar daha yerli hissetmeye başlayacaktır.

OCaml ve Haskell'i programlamadan Java ve Python'u programlamaya gittim ve benim deneyimim, zorunlu programlamanın dinamik yazım kadar büyük bir sıçrama olmadığı, bu güne kadar yabancı hissettirdiği.


1

Kesme noktaları koymanızı ve Next komutunu kullanmaya başlamanızı öneririm (hata ayıklıyormuşsunuz gibi), bu akışı anlamanıza yardımcı olacaktır (muhtemelen dallarda, alınması daha muhtemel yollar, almak için konsantre olmanız gereken yollar vardır) kodun genel fikri).

( Eclipse eklentisi olarak PyDev ile birlikte Eclipse ile iyi sonuçlar elde ettim )

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.