Kodlama stili ilkelerinin bilimsel olarak titiz bir çalışması var mı? [kapalı]


25

Kodlama stili ilkesi - örneğin tek çıkış ilkesi - gerçekten iyi bir şey mi? Her zaman mı, yoksa sadece bazen mi? Gerçekten ne kadar fark eder ki?

Görüşleriniz ne olursa olsun, bunlar açıkça öznel sorular. Yoksa onlar mı?

Kodlama stili ilkelerini nesnel, bilimsel olarak titiz bir şekilde incelemeye çalışan var mı?

Kimsenin çift-kör bir okunabilirlik çalışmasını nasıl yapacağını hayal edemiyorum, ama belki de çift-cahil olmak mümkün olabilir - çalışmayı yürütmek için denek olarak çalışılması ilkesini bilmeyen öğrencileri ve programcı olmayanları kullanın.


5
Komple okuma koduna karışmış olabilirsiniz. Her şey lezzetli değil, ama çok fazla ve bu kitapta ham veri veya kaynaklarla iyi bir genel bakış bulacaksınız.
deadalnix

Aynı zamanda, bazı ilkeler diğerlerine değil bazı dillere uygulanır. Örneğin single-exit principle, RAII
Martin York


@Loki - Bunu düşünmek zorunda kaldım ve anladığımdan emin değilim. Bu RAII onlar saymak (en azından bazı insanlar için) alternatif çıkış noktaları olup istisnalar dışında, ile başa çıkmak için büyük ölçüde tasarlanmış, ancak bu doğru alternatif gerçekten yol içindeki tek çıkış ilkesine aykırı saymıyor - alternatif çıkış noktaları break, gotoya da returnyap. IOW tek çıkış C ++ 'ta mutlak bir şey değil, ama bu C ve diğer dillerin çoğunda benim görüşüm. Ama yine de kesin olmayan bir anlamda alakalı.
Steve314

1
@ Steve314, makale en azından uzaktan ilgilidir - bu alanda doğru bir şekilde kaydedilmiş deneysel kanıtların eksikliğinden dolayı oldukça önemli olan böyle bir deneyin metodolojisi için bir tasarım ortaya koymaktadır.
SK-mantık

Yanıtlar:


11

Deadalnix'in yorumuna yankı veriyorum: Code Complete 2'yi okuyun . Yazar (Steve McConnell), kodlama stilini derinlemesine tartışmakta ve sıklıkla makale ve verilere atıfta bulunmaktadır.


Profesyonel yazılım geliştirme temel ve iyi sundu genel bakış, bir gün kalite güvencesi için benzer birini bulacağımı umuyorum. Savunma Programlama ve Sözde Kod Programlama ile ilgili bölümler özellikle bana yardımcı oldu. İşbirlikçi Kalkınma Uygulamaları Bölümü bu zamana kadar okuduğum her şeyden en çok etkileyici görünüyor.
gnat

Bu kitabı okumamıştım ve belki de okumalıyım, ancak - gnats'ın cevabındaki yorumlara dayanarak - atıfta bulunulan makaleler gerçekten bilimsel olarak titiz ve nesnel mi? Cevap "olabilecekleri kadar" ise, hangi tavizler gerekliydi? Soruda önerdiğim gibi, çift körün daha zayıf bir standartla değiştirilmesi gerekli miydi?
Steve314

@ Steve314: Bilmiyorum, kaynakları kontrol etmedim! Ancak, en iyi uygulamayı oluşturmak için her zaman bilimsel bir titizliğe ihtiyacınız yoktur. Artıları ve eksileri tartışmak bazen yeterli olabilir.
M. Dudley

@emddudley - kesinlikle doğru, ama bu sorunun ne olduğu ile ilgili değil.
Steve314

@ Steve314: Kod Tamamlama sizin için harika bir başlangıç ​​noktası olacaktır ve bazı referanslarının kodlama stilinin bilimsel analizi konusuna değindiğinden eminim.
M. Dudley

12

Konuyla ilgili objektif sonuçlar veren bir çalışmanın olasılığından çok şüpheliyim ve biraz ikna edici bir araştırma yapılana kadar şüpheci kalacağım.

Okuma ve takip belli kodlama tarzı olacağı kod yazarken yıl geçirdim Programcılar açıkçası onlar, onların can ilk kez görecekti bazı mükemmel kodlama stili olmadığı kadar daha okunabilir bulabilirsiniz.

En yaygın QWERTY yazma düzeniyle tamamen aynıdır - ergonomi açısından oldukça düşük olduğunu kanıtlamak kolaydır (TYPEWRITER kelimesinin tüm karakterlerinin günlük rahatlığımızı göz önünde bulundurarak en üst sıraya konulduğunu düşünüyor musunuz?) .

Ancak Dvorak veya Colemak gibi gelişmiş alternatifler hiç yakalanmadı ve olası olmadı. Ve bu yüzden insanlar onlarla daha üretken değil - gerçek. Soyut anlamda üstün olsalar bile.

Ayrıca, önceden programlamaya maruz kalmayan (bu çalışmamızın sonucunu etkileyeceği için), ANCAK programlama için bir yetenek, ve her ikisini de kısa gösterecek kadar uzun bir süre boyunca bir çalışmaya katılma isteği bulmak zor olacaktır. sürekli faydalar ve uzun süreli faydalar böylece birbirinden etkilenebilsinler ... (Karşılıklı olarak dışlayıcı olup olmadıklarını bilmiyorum, ancak araştırmacılar hiçbir zaman olmadıklarını varsayamazlardı).


1
Harika, daha önce hiç Colemak duymamıştım
CaffGeek

1
@Chad daha az bilinen bir süreliğine birlikte oynadığım Carpal X. Colemak daha güzel buldum (karpalx ile 90-100 wpm ulaştı). Herhangi bir egzotik mizanpaja geçmeyi düşünmeseniz bile, carpalx web sitesi, klavye mizanpajlarını değerlendirmek ve optimize etmek ve bu sorun kategorileri için genetik algoritmalar kullanmak üzerine oldukça ilginç bir okuma yapar. Bkz mkweb.bcgsc.ca/carpalx
Konrad Morawski

1
Bazen alternatif bir yaklaşımın marjinal faydaları, onu benimseme maliyetini haklı çıkaracak kadar büyük olabilir; Aksi halde hepimiz hala programcı ve fortran programlama yapardık. Bu cevap, aslında marjinal faydaların olup olmadığına dair orijinal soruya cevap vermez. Dvorak örneğinde, kesin olarak kanıtlanmış ve kanıtlanmış olmakla birlikte, Dvorak öğrenmesini haklı çıkarmak için yeterince büyük faydalar yoktur.
Jeremy

"Jeremy," bu cevap, aslında marjinal faydaların olup olmadığına dair orijinal soruya gerçekten cevap vermiyor "- OP, bu tür çalışmaların bulgularını doğrudan sormadığını, bu tür çalışmalar yürütmeye çalışıp çalışmadığını sordu, Bu daha açık bir soru. Teknik olarak neden zor olacağına ve böyle bir çalışmanın sonuçlarının neden istatistiksel olarak gürültüden etkilendiğine dair birkaç mantıklı nedene işaret ederek cevap verdim. Bu yüzden cevabım verdiğiniz gerekçelerle faydalı görülmediyse, haksız yere reddedildiğimi düşünüyorum.
Konrad Morawski

1
@ Jeremy, bu evlat edinme maliyetlerinin asıl amacı, insanların daha fazla pratik yaptıkları sürece daha düşük bir araçla daha iyi performans göstermeleridir. Ve bu, konularının farklı kodlama stilleriyle ne kadar iyi başa çıktıklarını incelemeye çalışan herhangi bir çalışmada tam olarak ortaya çıkacak olan şeydir. Kullanmaları gereken kodlama stillerine aşina olduklarından / aşina olmadıklarından kaynaklanan gürültü, bu stillerin doğuştan gelen niteliklerinin etkisini cüceler. Tamamen yeni başlayanlar alarak oyun alanını seviyelendirmedikçe. Fakat bu, cevabımın son paragrafında işaret ettiğim gibi, pratik bir zorluk teşkil ediyor.
Konrad Morawski

4

Cevap kesin bir HAYIR! Ara ver ve devam et kötü programlama uygulamaları? Bu sorunun bir alt kümesi, bu yüzden ancak bunun için değiştirilmiş bir cevap ile başlayacağım ...

Break ifadesi olmadan programları yeniden yazabilirsiniz (veya aynı şeyi yapan döngülerin ortasından döndürür). Ancak bunu yaparken, her ikisini de programı anlamayı zorlaştıran ek değişkenler ve / veya kod çoğaltması yapmanız gerekebilir. Pascal (1960'ların sonlarındaki programlama dili) özellikle bu nedenle yeni başlayan programcılar için çok kötüydü.

Tarih 1973 için geri ve hangi Knuth'un (diğer) meşhur kağıt belirtilen denetim yapılarının Kosaraju hiyerarşisi adı verilen bir bilgisayar bilimi sonuç var açıklamalara halindeyken ile Yapılandırılmış programlama nedir S. Rao Kosaraju 1973 yılında kanıtladı 1974. den o değil yani derinliği çok seviyeli sonları olan tüm programları yeniden yazmak mümkün n az kırılma derinliği programlarına n ekstra değişkenleri tanıtan olmadan. Diyelim ki bu sadece teorik bir sonuç. (Sadece bir kaç ekstra değişken ekleyelim mi ?! Bunu kesinlikle 3K + kullanıcıları ile stackexchange'te grup haline getirmek için yapabilirsiniz ...)

Yazılım mühendisliği perspektifinden çok daha önemli olan, 1995 yılında Eric S. Roberts'in Döngü Çıkışları ve Yapısal Programlama: Tartışmayı Yeniden Açma (doi: 10.1145 / 199688.199815) başlıklı daha önceki makalesidir. Roberts ondan önce başkaları tarafından yürütülen deneysel çalışmaları özetlemektedir. Örneğin, CS101 tipi bir grup öğrenciden bir dizide sıralı bir arama uygulayan bir fonksiyon için kod yazması istendiğinde, çalışmanın yazarı sıradan çıkmak için bir mola / geri dönüş kullanan öğrenciler hakkında şunu söyledi: Öğe bulunduğunda doğru arama döngüsü:

Henüz yanlış bir çözüm üreten [bu stili] kullanarak bir programı deneyen tek bir kişi bulamadım.

Roberts ayrıca şunu söylüyor:

Sorunu açık bir şekilde kullanmadan çözmeye çalışan öğrenciler, for döngüsünden geri dönüşü çok daha az başardı: Bu stratejiyi deneyen 42 öğrenciden sadece 7'si doğru çözümler üretmeyi başardı. Bu rakam% 20'den az bir başarı oranını temsil ediyor.

Evet, CS101 öğrencilerinden daha deneyimli olabilirsiniz, ancak break deyimini kullanmadan (veya döngülerin ortasından eşit olarak geri döndüğünüzde), sonunda mantıklı bir şekilde yapılandırılmış olarak ekstra mantık açısından yeterince kıllı olan kod yazacaksınız. Değişkenler ve bir başkasının, muhtemelen kendinizin, "doğru" kodlama tarzı bazı passe fikirlerini izlemeye çalışırken mantık hataları koyacağı kod çoğaltması.

Ve burada geri dönüş / kesme tipi ifadelerinin yanı sıra daha büyük bir sorun var, bu nedenle bu soru, ara vermelerden biraz daha geniş. İstisna işleme mekanizmaları bazılarına göre tek çıkış noktası paradigmasını da ihlal ediyor

Dolayısıyla, temelde yukarıda singe-çıkış prensibinin hala faydalı olduğunu iddia eden herhangi biri, son bağlantıda açıklanan son derece daraltıcı şekilde kullanılmadıkça istisna yönetimi paradigmasına da karşı çıkıyor; Bu kurallar temel olarak, atma () işlevinin tüm istisnalarını kısıtlar, yani işlevler arası istisnaların hiçbir şekilde yayılmasına izin verilmez. Yeni Pascal'ınızın tadını C ++ benzeri sözdizimi ile çıkarın.

Anladığım kadarıyla "sadece bir dönüş" kavramı nereden geldi?Bu sitedeki yaygın düşüncenin, burada yayınlananların aksine, bu nedenle, soruyu gerçekten sorulan bir şeyi sağlayan ilk cevap ben olmama rağmen, neden zaten aşağı oy kullandığımı tam olarak anlıyorum: tek çıkış sorununa odaklanan gerçek kullanılabilirlik testleri hakkında bazı bilgiler. Sanırım bilginin önyargıların önüne geçmesine izin vermemeliyim, özellikle de oyun alanında. Bundan sonra Wikipedia’yı düzenlemeye devam edeceğim. En azından iyi kaynaklardan gelen bilgiler takdir edilmekte ve kaynaklar tarafından desteklendiğini iddia eden belirsiz ya da yanlış iddialar sonunda bir yasaklama kazanmaktadır. Bu sitede, tam tersi olur: gerçekler tarafından doğrulanmayan görüşler baskındır. Bu son kısmı silmek için bir mod bekliyordum, ama en azından o ahbap, beni neden burada sonsuza dek katkıda bulunduğunuzu sonsuza dek kaybettiğinizi bilecek.


Bunu reddetmedim, ama "Ama bunu yaparken, her ikisini de tipik olarak programı zorlaştırmak için zorlaştıran ek değişkenler ve / veya kod çoğaltması uygulamanız gerekebilir." gelin, bu öznel bir iddia. Bir değişken veya kod çoğaltmanın eklenmesinin anlaşılmasını zorlaştırdığını kabul ediyorum, ancak tartışmalı bir goto eklemenin de anlaşılmasını zorlaştırıyor, artı çoğaltmanın yaptığı hasarın, çoğaltılmış kodu bir işleve dönüştürerek hafifletilebilir (IMO hareket etse de) çağrı grafiğindeki karmaşıklık bunu otomatik olarak ortadan kaldırmaz).
Steve314,

1995 makalesiyle ilgili görüşünüzü yalnızca bu son yorumdan sonra gördüm ve ilginç noktaya değinmeye karar verdim. Galibiyetiniz daha uzun olabileceğinden dolayı bence daha uzun olabilir ve öznel bir nokta ile başlar, bu nedenle muhtemelen en önemsiz kişi her şeyi okumamış (ilk önce benimle aynı). Temel olarak, gerçek noktanızı erken tanıtmak iyi bir fikirdir.
Steve314,

Her neyse, pek çok insanın istisnaları alternatif alternatif çıkış noktaları olarak düşündüğünü düşünüyorum - çünkü hata durumları (gerçekten sayılmazlar) içindir. Anladığım kadarıyla biraz dil kültürüne duyarlı Bazı dillerde "istisna" adından daha fazlasıdır - istisnai bir başarı durumu geçerlidir (ve IIRC Stroustrup, C ++ hakkında böyle bir şey söyleyerek bir hatanın işlendiğinde bir hata olup olmadığı konusunda felsefi bir nokta ortaya koydu) dedi. Hatta bazı istisnalar, ihtiyaç duyduğunuz kontrol akışını sağladığında kullanmanız gereken başka bir kontrol akışı olduğunu söyler.
Steve314,

1
@ Steve314 " artı çoğaltmanın verdiği zarar, kopyalanan kodu bir işleve dönüştürerek " azaltılabilir " İşlevin bir mantığının çizgisel olarak ve hemen görülebilen kısmının, yalıtılmış bir anlam ifade etmeyen bir parça haline getirilmesiyle hafifletilebilir . Fonksiyonun mantığını anlamayı zorlaştırır.
curiousguy

1
@curiousguy - evet, bu doğru ve muhtemelen "karmaşıklık çağrısı grafiğine taşıma" amacımın bir parçası. Benim dinim, yaptığınız her seçimin bir takas olması. Bu nedenle, tüm olası seçeneklerin ve bunların avantaj ve dezavantajlarının farkında olun ve ortak azaltmaların bilinmesi önemlidir, ancak tedavinin hastalıktan daha kötü olması durumunda dikkatli olun. Elbette, bu değişimin bir kısmı şeyler hakkında çıldırmak için ne kadar zaman harcadığınız (veya boşa harcadığınız).
Steve314

1

http://dl.acm.org/citation.cfm?id=1241526

http://www.springerlink.com/content/n82qpt83n8735l7t/

http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=661092

[Sorularınız tek bir kelime ile cevaplanmış gibi görünüyor, "evet" Bununla birlikte, kısa cevaplar vermenin sorunun “küçümseyen” olduğu söylendi. Eğer küçümseyken olduğumu düşünüyorsanız, lütfen bir moderatörün silebilmesi için cevabı işaretleyin.]


1
@ luis.espinal: Neyin sonu? Metin hangi bilgileri içerir? Soru biraz etrafa karışıyor. Sorunun hangi bölümünü bir metinle ele almalısınız?
S.Lott

1
Tarz olarak ve belki de bağlantıların özetlerinin sağlayabileceği daha fazla bilgi sağlamak için (OP'nin tüm yazılara erişim hakkı olan ve ACM / IEEE / Springer Verlag üyesi bir ödeme olup olmadığını bilmediğimizi düşünerek onun soruları.) Örneğin, ACM makale özeti kodlama stilinden hiç söz etmez. En çok, yapılandırılmış program teoremini (tek veya çoklu geri dönüş problemi hakkında konuşmuyor) desteklemekten bahsediyor. Böylece bu bağlantının neden alakalı olduğunu açıklayabilirdin.
luis.espinal

1
Üçüncü makale (Neyse ki IEEE Xplore'a erişebiliyorum) OP'nin söyleyebileceğim kadarıyla ne istediği ile ilgili görünmüyor. Daha sonra okumak için daha özel okumalar için bastırdığım bir yazıdır. Belki de bu makalenin OP'nin sorusuna cevap vermesine nasıl yardımcı olduğunu da açıklayabilirdin. Genel olarak, basitçe bir demet bağlantı attınız. Bu, küçümseyen bir yol değildir (sizin niyetiniz olmadıkça), ama yine de, OP’ye nasıl yardım ettiğini göremiyorum. İşte bu yüzden bir poster linkleri boyunca bir miktar metin eklemeli. Yani şimdi neden söylediğimi biliyorsun;)
luis.espinal

1
OP'nin ağzından Is a coding style principle - e.g. the single-exit principle - really a good thing?- bu, sorduğu soruya, kodlama stilleriyle ilgili bağlam verir. Ayrıca, kodlama stili programlama metodolojisi ile aynı değildir, özellikle IEEE makalesinin odak noktası olan üst düzey tasarım yöntemleri (yazarlar tarafından açıkça belirtilmiştir.) Bu yüzden "hayır" diyorum - kapsamlar tamamen farklı.
luis.espinal

1
OP'nin nereden geldiğinden şüpheleniyorum. Kodlama stillerini açıkça belirtiyor (metodolojileri değil) ve özellikle tek ve çoklu dönüşler. Birkaç kez, tek dönüşleri (özellikle bürokrasiyle büyük olan büyük kuruluşlarda) kullanarak, daha iyi yazılmış sürümlere yeniden yazılan, birden çok dönüş ifadesini kullanarak, iyi yazılmış, kendiliğinden açık kod ile baş etmek zorunda kaldım. "işlem" başına. Ve biri, bu keyfi görevlerin geçerliliğini, kullanılabilirliğini ve maliyet etkinliğini merak eder (ve kanıtlarla mücadele eder). Bu tür yetkileri zorlayan insanlar hala 60'larda yaşıyor: /
luis.espinal

1

Kodlama stili ilkesidir - örneğin, tek çıkış ilkesi

1960'ların sonlarında hala tek çıkış mı yoksa çoklu çıkış mı yaptığını söyleyenler hala sıkışıp kalmış durumda. O zamanlar, bu tür bir tartışma bizim yapılandırılmış programlamacılığın başlangıç ​​aşamasında olduğumuz için önemliydi ve Bohm-Jacopini Yapısal Program Teoreminin ardındaki bulguların tüm programlama yapılarına evrensel olarak uygulanamadığını ilan eden çok sayıda kamp vardı.

Uzun zaman önce çözülmesi gereken bir şeydi. Pekala, (Akademi'de ve endüstride kesin olarak kesinleşmek için neredeyse 4 yıl) yerleşmiş, ancak insanlar (kesinlikle profesyonelce ya da karşı olanlar) dikkat etmiyorlardı.

Cevaplarıma gelince, hepsi göreceli (yazılımda ne yok?):

  • gerçekten iyi bir şey mi?

Evet. Genel durum için çoğu zaman, kenar durumlara özgü özel uyarılar ve dile özgü programlama yapıları.

Her zaman mı, yoksa sadece bazen mi?

Çoğu zaman.

Gerçekten ne kadar fark eder ki?

Bağlı.

Okunabilen kod, okunamayan bir kod. Arttırılmış karmaşıklık (şu ana kadar bilmemiz gereken hataların ortaya çıkma olasılığını arttırır) - daha basit karmaşıklık (ve ergo, daha küçük hata olasılığı). Derleyicileri örtük bir dönüş getirmeyen diller (örneğin, Pascal, Java veya C #) int için varsayılan (C ve C ++).

Sonunda, klavyenin arkasındaki adam / saat ile bilenmiş bir beceridir. Bazen, burada olduğu gibi (bazı Pascal'esque sözde kodunda) birden fazla dönüş ifadesi olması uygundur:

function foo() : someType
  begin
  if( test1 == true )
  then
    return x;
  end
  doSomethignElseThatShouldnHappenIfTest1IsTrue();
  return somethingElse();
end;

Amaç açıktır ve algoritma yeterince küçük ve tek bir dönüş noktasında kullanılan nihai dönüş değerini tutan bir 'bayrak' değişkeni oluşturulmasını garanti etmeyecek kadar karmaşık değildir. Algoritma hatalı olabilir ancak yapısı, bir hatayı bulma çabasının (büyük olasılıkla) önemsiz olduğu kadar basit.

Bazen değil (burada C benzeri bir sahte kod kullanarak):

switch(someVal)
{
case v1 : return x1;
case v2 : return x2:
case v3 : doSomething(); // fall-through
case v4: // fall-through
case v5: // fall-through
case v6: return someXthingie;
...
...
default:
   doSomething(); // no return statement yet
}

Burada, algoritma basit bir yapıya sahip değildir ve switch ifadesi (bir C tarzı olan), algoritmanın bir parçası olarak kasıtlı olarak yapılabilecek veya yapılmayacak düşme adımlarına izin verir.

Belki de algoritma doğrudur, ancak kötü yazılmış.

Ya da belki, programcının yeteneği ötesinde dış güçler tarafından, bu bir meşru gerekli algoritmanın gerçek (ve doğru) gösterimi.

Belki de yanlış.

Bunların herhangi birinin gerçeğini ortaya çıkarmak için önceki örnekte olduğundan çok daha fazla çaba gerekir . Ve işte şiddetle inandığım bir şey var (bunu destekleyecek resmi bir çalışmam olmadığını unutmayın):

Doğru olduğu kabul edilen bir kod pasajını varsayarak:

  1. Birden fazla return ifadesi, eğer snippet doğal olarak basit bir akış yapısına sahip basit bir algoritmayı temsil ediyorsa, böyle bir kod snippet'inin okunabilirliğini ve basitliğini artırır. Basitçe söylemek gerekirse, kastetmiyorum, ama orantısız bir okuma çabası gerektirmeyen (ya da insanları kusturmaya, birisinin annesini lanetlemeye veya bir mermiyi okumak zorunda kaldıklarında yutmaya teşvik etmeyen), doğal olarak anlaşılabilir ya da öz-kanıt anlamına gelir . )

  2. Tek bir geri dönüş ifadesi, eğer algoritma yürütülürken geri dönüş değeri hesaplanırsa veya algoritmadan hesaplanmasından sorumlu olan algoritmadaki adımlar, algoritmanın yapısı içerisinde bir yerde gruplandırılabilirse, böyle bir kod parçasının okunabilirliğini ve basitliğini arttırır. .

  3. Tek bir return ifadesi, bir veya daha fazla bayrak değişkenine atama gerektiriyorsa, bu tür atamaların konumlarının algoritma boyunca düzgün bir şekilde yerleştirilmemesini gerektiriyorsa, böyle bir kod parçasının okunabilirliğini ve basitliğini azaltır.

  4. Birden fazla geri dönüş ifadesi, geri dönüş ifadeleri algoritma boyunca eşit bir şekilde dağıtılmadığında ve kendi aralarında tek biçimli olmayan karşılıklı özel kod bloklarını ayırırlarsa, böyle bir kod parçasının okunabilirliğini ve basitliğini azaltır.

Bu, söz konusu kod pasajının karmaşıklığı ile yakından ilgilidir. Bu da sırasıyla döngüsel ve halhal karmaşıklığı önlemleriyle ilişkilidir. Bundan, aşağıdakiler gözlemlenebilir:

Bir alt rutinin veya işlevin boyutu ne kadar büyük olursa, iç kontrol akış yapısı da o kadar büyük ve karmaşık olur ve birden fazla veya tek dönüş ifadeleri kullanıp kullanmama sorusuyla karşı karşıya kalma olasılığınız artar.

Bunun sonucu şudur: fonksiyonlarınızı küçük ve tek bir şey yapmakla (ve iyi yapmak). Eğer nominal olarak küçük çevrimsel ve yarı karmaşık karmaşıklık ölçütleri sergilerlerse, sadece en muhtemel doğru olmaları zorunlu değildir ve anlaşılabilir işlerin uygulanması zorunlu değildir, iç yapıları da göreceli olarak açık olacaktır.

O zaman ve sadece o zaman oldukça kolay ve fazla uykusuzluk çekebilirsiniz, herhangi bir seçimde hata yapma riskiyle karşılaşmadan tek bir geri dönüş ve çoklu geri dönüş kullanıp kullanmamaya karar verebilirsiniz.

Bunların hepsine de bakabilir ve insanlar tek iadelerle ya da çoklu iadelerle sorun yaşadıklarında, ya deneyimsizlik, aptallık ya da iş ahlakı eksikliği yüzünden temiz kod yazmadıklarını ve yazma eğiliminde olduklarını söyleyebilirler. tamamen döngüsel ve halstead önlemleri aldırmayan canavarca fonksiyonlar.


1
C ++ return tipi int için varsayılan değil: varsayılan return tipi yoktur, bu nedenle her durumda belirtilmesi gerekir.
Sjoerd

Daha önce bu soruyu yazdım - programmers.stackexchange.com/questions/58237/… . Temel olarak, ilkenin farkındalığını savunuyorum, ama kesinlikle takip etmiyorum - tüm çıkış noktaları açıksa, mutluyum. Buradaki amacım - sadece bir örnek olarak bir ilkeden bahsetmem, o ilkeyi savunduğum anlamına gelmez, kesinlikle de kesin biçimde değil. Sübjektif görüşüm tam da olsa, belki de görüşüme göre daha güçlü bir tartışma var ya da belki de yanıldığım konusunda güçlü bir tartışma var.
Steve314

"İnt için varsayılan" nedir?
curiousguy

Demek istiyorum ki, kodun açık bir geri dönüş değeri olmayan bir yürütme şubesine sahip olması durumunda çoğu derleyicinin bir akümülatör kaydının değerini bir geri dönüş değeri olarak "sürdüğünü" söylemeliyim. Bunun anlamı, en son aritmetik işlemin sonucunu (olabilecek herhangi bir çöp) int biçiminde döndürmek anlamına gelir. Ve bu, işlevin ne yapması gerektiğine bakılmaksızın, kesinlikle çöp (ve ergo, tanımsız davranış) olacaktır. C ve C ++ sizi uyarabilir, ancak -Werror veya benzeri bir şey kullanmadıkça derlemeler derlemenize izin verir.
luis.espinal
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.