Soru MATLAB kod yazımında iyi uygulamalar? [kapalı]


İyi yapılandırılmış bir kod yazmanın temel ilkelerini ve görgü kurallarını bilmek isterim.


44
2017-08-30 20:09


Menşei


Önemli olan, probleminizi basit, yönetilebilir parçalara böldüğünüz ve bu parçaların mümkün olduğunca az sayıda ortaklığa sahip olmalarıdır. Nesne yönelimli programlama, diğer yöntemler gibi, bu konuda da yardımcı olabilir. Daha büyük projeler geliştirmeye devam edeceğinizi varsayarak Kod Tamamlanmasını da okumanızı tavsiye ederim. - Seamus Connor
@Seamus: Fonksiyonel programlama daha iyi bir örnek olurdu. Mantıksal sonucuna dekompozisyon alır. - Clark Gaebel
@ Harpreet: Tabii. Probleminizi daha küçük parçalara böldüğünüzü ve kodlamaya başladığınızı düşünün. Diğer "parçalardan" birinde yazmış olduğunuz bir işleve ihtiyacınız olduğunda bir noktaya ulaşırsınız, böylece sadece yeni koddan fonksiyonu çağırırsınız. Bunu yaparak bir karşılıklı bağımlılık yarattınız çünkü bir hatayı düzeltmek veya bir özellik eklemek için ilk "parçayı" değiştirdiğinizde, artık keyfi bir konumdaki diğer kodun buna bağlı olduğunu ve siz de Kodunuzda rastgele bir yerde yeni bir hata oluşturma şansı. - Seamus Connor
@Harpreet: Tabii ki, tamamen karşılıklılıklardan kaçınmak imkansızdır, bu yüzden bunları mantıklı bir şekilde yönetmeniz gerekir. Nesne yönelimli programda, sadece bunu yapmak için araçlar sağlanmıştır. Sınıflar ve arayüzler iki çok önemli kavramdır. Bir sınıf, işlevsellik (yöntemler) ve durum (üye değişkenleri) mantıksal bir modülde gruplandırmanıza izin verir. Bunu yaptıktan sonra, temel olarak bir sınıfın ne yaptığını belirten bir sözleşme olan bir arabirim kullanarak karşılıklı ilişkileri “tasvir edebilirsin”. - Seamus Connor
@Harpreet: Ayrıca, her biri fayda sağlayan çok çeşitli programlama dilleri vardır. Nesne yönelimli programlama sadece bir programlama modelidir ve tüm sorunların cevabı değildir. Clark Gaebel, yazılım mühendisliği problemlerine çözümler sunan bir başka paradigma olan fonksiyonel programlardan bahseder. Ne yazık ki, MATLAB'de fonksiyonel programlama mevcut değildir ve Python'da ileri bir konu. - Seamus Connor


Cevaplar:


Kod yazarken akılda tutulması gereken en önemli iki şey şunlardır:

  1. Yazmış olduğunuz kodu yazmayın.
  2. Yazmaya gerek duymadığınız kodu yazmayın.

21
2017-08-30 21:31





okumak Kod TamamlandıHer şey için harikalar yapacak. Size nerede, nasıl ve ne zaman önemli olduğunu gösterecektir. Bu oldukça yazılım geliştirme İncilidir (IMHO.)


34
2017-08-30 20:11



Kod Komple'nin kopyası kayboldu! Her şey kayıp! - Seamus Connor
Kodumun kopyasını tamamladım. Seninkini kaybetmek ne kadar trajik bir şey! D: - Ashley Grenon
Ahh - Steve McConnell. Bu kitap eski okul ama yine de çok alakalı! Onun iyi bir kitabı 'Hızlı Gelişim' - Dan Esparza
@Dan Esparza - Ah evet, Hızlı Gelişim, üyelerimden birinin üyesi olduğum işler için iş başında nasıl çalıştığını gördüm. O zamandan beri yeni yöneticilerimiz var ama klasik hataların sayısı ... whoo çocuk! - wheaties
@Dan - ikinci baskı güzel, güncellendi. İlk baskınız varsa okumaya gerek yok. - Marc


MATLAB Programlama Stil Yönergeleri Richard Johnson tarafından iyi bir kaynaktır.


17
2017-08-30 21:40





Şey, bunu layman'ın şartlarında istiyorsan:

İnsanları yazmak için öneriyorum çalışan en kısa okunabilir program.

Kod, isim değişkenleri, tasarım sınıfları, ayrı sorumlulukların nasıl biçimlendirileceğiyle ilgili çok daha fazla kural vardır. Ancak, tüm bu kuralların sadece kodunuzun hataların kontrol edilmesini ve orijinal yazardan başka biri tarafından sürdürülebildiğinden emin olmak için orada olduğunu unutmamalısınız. Yukarıdaki tavsiyeyi aklınızda tutarsanız, programınız sadece bu olacaktır.


15
2017-08-30 21:28



Mükemmel tavsiye. Aşırı (ayrılık veya farklılık) kodları okumayı zorlaştırır. Java ve Perl programcıları bunu anlamayı reddediyor gibi görünüyor. - dsimcha
Bu öneriyi beğendim. Bu çok iyi bir nokta, ancak aslında bir kod yazarken ona uyulmasının akılda tutulması gerekir çünkü takip edilenden daha kolay dinlenir.
Bunu, okunabilir en kısa programa dönüştürürüm :) Çalışmak, okunaklı olmaktan çok daha önemli, ki bu da kısaca daha önemli. +1 olsa da. - Billy ONeal
@Billy ONeal: ama o zaman İngilizce çalışmıyordu. - intuited
@intuited: Belki, ama daha doğru olur :) - Billy ONeal


Bu liste uzun süre devam edebilir, ancak bazı önemli şeyler şunlardır:

  • Girinti.
  • Tanımlayıcı değişken isimleri.
  • Tanımlayıcı sınıf / işlev adları.
  • Kodu çoğaltma. Bir sınıf / fonksiyona kopyalanması gerekiyorsa.
  • Alıcıları / düzenleyicileri kullanın.
  • Sadece nesnelerinizde neyin gerekli olduğunu ortaya çıkarın.
  • Tek bağımlılık ilkesi.
  • İyi yorumlar yazmayı, çok fazla yorum yazmayı öğrenin.
  • Kodunuzla gurur duy!

Başlamak için iki iyi yer:

Temizlik Kodu El Kitabı

Kod Tamamlama


7
2017-08-30 20:14



Onları kullanmayın - vakaların çoğunda, oldukça gereksizler. - Puppy
@DeadMG: Umarım ki, birileri sınıfları uygulamalıdır, böylece alıcıları ve kodlayıcıları gereksizdir, bunun yerine veri üyelerini istemci koduna maruz bırakmanız gerekir. - Billy ONeal
Bir çok insanın, özel bir liste gibi şeyler yaparak, işleri gereksiz kıldığı konusunda hemfikir olun. aslında iyi alıcılar / düzenleyiciler tasarlamak için bir sanat var. - Luke Belbina
@Billy: Kamu üye değişkenleri mantıklı olduğunda birçok vaka var. Bir üye değişkeni için bir getter ve bir setter yazarsanız, o zaman nasıl yapıldığını düşünmeden OO'ya sadece dudak servisi yaptınız. - Puppy
@DeadMG: Gelecek haftaya kadar, bir değişken kullanmak yerine değeri hesaplamaya karar verirsiniz ve tüm müşterilerinizin değiştirilmesi ve yeniden derlenmesine ihtiyaç vardır. (Genel olarak, her değişkenin bir alıcı / belirleyiciye sahip olmamasını kabul etsem de, bir kamu değişkeni gibi davranması gereken bir durumda, alanı açığa çıkarmak yerine alıcılara ve ayarlayıcılara sahip olmalıdır. - Billy ONeal


Bir referans veya görgü kuralları olarak kullanmak istediğiniz bir şey varsa, genellikle çalıştığım dil için resmi Google stili sözleşmelerini takip ediyorum. C ++ yada ... için piton.

Programlama Uygulaması Rob Pike ve Brian W. Kernighan tarafından da faydalı bulduğum bir bölüm var.


5
2017-08-30 20:22



Google stili sözleşmeleri, C ++’daki istisnaların kullanımını yasaklar ve bazı durumlarda değişkenleri geçirmeye yönelik birtakım kararlaştırılmış kurallar önerir. Onları çok tavsiye etmem. - Omnifarious
Kernighan ve Pike için +1! - J. Polfer


Her şeyden önce, "kodlar" kullanmak için doğru kelime değildir. Bir kod genellikle sayısal olan başka bir şeyin temsilidir. Doğru sözcükler "kaynak kod" ve kaynak kodunun çoğunun kaynağı kodudur.

-

İyi kaynak kodunun yazılması:

  1. Kodunuzu yorumlayın.
  2. Birden çok harften daha uzun olan değişken adları kullanın. 5 ile 20 arasında başparmak iyi bir kuraldır.
  3. Daha kısa kod satırları daha iyi değil - boşluk kullanın.
  4. Kodunuzla “akıllı” olmak, kendinizi veya başka bir kişiyi daha sonra karıştırmanın iyi bir yoludur.
  5. Sorunu bileşenlerine ayırın ve çözümü oluşturmak için hiyerarşik tasarımı kullanın.
  6. Programınızı daha sonra değiştirmeniz gerektiğini unutmayın.
  7. Kodunuzu yorumlayın.

Bilgisayar programlamasında çok fazla moda var. Taraftarları, fad'ı takip etmeyenleri aydınlanmamış ve çok fazla değiller. Mevcut büyük fads "Test Tahrikli Gelişim" ve "Çevik" gibi görünüyor. 1990'lardaki fad 'Nesne Yönelimli Programlama' idi. Çevrenizdeki fikirlerin yararlı kısımlarını öğrenin, fakat dogmatik olmayın ve en iyi programın yapılması gereken işi yapması gerektiğini unutmayın.

çok aşırı yoğun kodun başımın üst kısmından önemsiz örneği

for(int i=0,j=i; i<10 && j!=100;i++){
     if i==j return i*j; 
     else j*=2;
}}

bu daha okunabilir ise:

int j = 0;
for(int i = 0; i < 10; i++)
{
   if i == j 
   {
      return i * j;
   }
   else
   { 
     j *= 2;
     if(j == 100)
     {
        break;
     }
   }
}

İkinci örnek, döngüden açıkça görülebilmesi için mantığa sahiptir; İlk örnek kontrol akışı ile karıştırılmış mantığa sahiptir. Bu iki programın aynı şeyi yaptığına dikkat edin. Benim Programlama tarzı çok fazla kod satırına giriyor, ancak bir zamanlar stilist bir şekilde anlamaya çalışmakla ilgili bir şikâyette bulunmadım, buna karşın daha yoğun yaklaşımları sinir bozucu buluyorum.

Deneyimli bir programcı her ikisini de okuyabiliyor ve okuyacaktır - yukarıdakiler bir an için onları duraklatabilir ve neler olduğunu düşünebilir. Okuyucuyu oturmaya ve kodlara bakmaya zorlamak iyi bir fikir değildir. Kodun açık olması gerekiyor. Her sorunun kendi çözümünü ifade etmek için içsel bir karmaşıklığı vardır. Kod, çözüm karmaşıklığından daha karmaşık olmamalı, Eğer mümkünse.

Diğer posterin aktarmaya çalıştığı şeyin özü budur - programı gerekenden daha uzun yapmayın. Daha uzun iki anlamı vardır: daha fazla kod satırı (yani, kendi satırlarına parantez koymak) ve daha karmaşık. İhtiyaçtan daha karmaşık bir program yapmak iyi değildir. Daha okunabilir hale getirmek iyidir.


5
2017-08-30 21:52



@ Harpreet: düzenlemeye bakın. - Paul Nathan
@Paul Nathan: "Kodunuzu yorumlayın" ifadesini iki kez listelediniz. Yorum yapmak önemlidir, ancak aşırıya kaçmamak da önemlidir. Normalde 'ne' kodunun ne olduğunu söylemek zorunda kalmamalı - bu koddan açıkça anlaşılmalıdır; Açık değilse, genellikle kodun daha açık bir şekilde yazılması gerektiği bir işarettir. Yorumlar, 'neden' kodunun bir şeyler yaptığını veya kodun hangi varsayımları oluşturduğuna odaklanmalıdır. "A + = 5; / * Add a to 4 / a * /" gibi bir yorum okunabilirliği artırır bir iota. - supercat
@supercat: kod kendi kendini yorumlama değildir. Bu durum, eksiklikten çok daha fazlasıdır. - Paul Nathan
@Harpreet, hangi kodun söylendiğini söylemiyor ama ne diyemiyor. - systempuntoout
İlk örneği çok daha net buluyorum. 10 satır kod görürsem, oldukça karmaşık bir şey yapmasını beklerim. - intuited


Bir göz atın Her Programcı Bilmeniz Gereken 97 Şey.
Bu ücretsiz ve bu gibi birçok mücevher içerir:

Düşündüğüm bir alıntı var.   tüm yazılımlar için özellikle iyi   geliştiriciler yakınlarını bilmek ve yakın tutmak   onların kalpleri:

Stil ve uyum güzelliği ve zarafet   ve iyi ritim sadeliğe bağlıdır.   - Plato 

Bir cümle içinde bu özetliyor düşünüyorum   yazılım olarak kullandığımız değerler   geliştiriciler talip olmalı.

Çalıştığımız birkaç şey var   bizim kodumuzda için:

  • Okunabilirlik
  • İdame
  • Gelişme hızı
  • Güzelliğin kalitesizliği

Platon bize, etkinliğin olduğunu söylüyor   bu özelliklerin tümü için faktör   basitlik.


3
2017-08-30 22:46



Ancak en basit kod veya döngüler veya işlevler olmayan en uzun kod basitlik midir? Şablonlar işlevleri veya karmaşık bir şekilde değiştirmenin basit bir yolu mu? - Martin Beckett


Python Style Kılavuzu her zaman iyi bir başlangıç ​​noktasıdır!


2
2017-08-30 20:12



Python stil kılavuzu, kod formatlama, yapı değil vb. İçin daha fazladır. PEP-20 daha alakalı olabilir, aka import this  python.org/dev/peps/pep-0020 ama tam olarak açık değil. - Nick T
Yapı - kodu büyük ölçekte nasıl düzenlersiniz, başka bir deyişle, hangi işlevler / nesneler / mantık nereye yerleştirilir. Biçimlendirme - bu genellikle derleyici tarafından yorumlanmasını etkilemeyen kodlama ayrıntılarını açıklamak için kullanılır - yeni bir satırın nereye yerleştirileceği, nereye yorum yazılacağı, sekmeler + yeni satırların nasıl kullanılacağı açık bir şekilde bir açıklama sunmak için kullanılır. - J. Polfer


Değiştirilebilir Fortran 90 Kod Yazma ve Belgeleme için Avrupa Standartları sonsuza dek benim yer işaretlerimde bulundum. Ayrıca MATLAB ile ilgilendiğiniz için burada bir konu vardı. MATLAB kodunu organize etmek.


2
2017-08-30 21:26





Şahsen, programlama stili hakkında daha fazla şey öğrendim ki, MIT Intro to SCI (MIT Intro to SCI) metni olan SICP üzerinden çalışıyorum. Bu söyleniyorsa, Python'da çalışacaksanız, Google stil rehberi başlamak için mükemmel bir yerdir.

Çoğu programın (komut dosyaları) hiçbir zaman bir satır uzunluğundan daha fazla olmaması gerektiğini bir yerde okudum. Tüm gerekli işlevsellik işlevlere veya sınıflara ayrılmalıdır. Katılmaya eğilimliyim.


2
2017-08-30 21:33



mitpress.mit.edu/sicp - Josh Infiesto