Bir işlevden erken dönmeli miyim yoksa bir if ifadesi mi kullanmalıyım? [kapalı]


304

Bu tür bir işlevi her iki formatta da sıklıkla yazdım ve bir formatın diğerine göre tercih edilip edilmediğini ve nedenini merak ediyordum.

public void SomeFunction(bool someCondition)
{
    if (someCondition)
    {
        // Do Something
    }
}

veya

public void SomeFunction(bool someCondition)
{
    if (!someCondition)
        return;

    // Do Something
}

Genellikle birinciyi kodluyorum çünkü kodlama sırasında beynimin çalışma şekli budur, sanırım 2. olanı tercih ediyorum, çünkü derhal herhangi bir hata işleme ile ilgileniyor ve okumayı daha kolay buluyorum.


9
Bu tartışmaya biraz geç kaldım, bu yüzden bunu bir cevaba sokmayacağım; Bunu iki yıl önce de düşündüm: lecterror.com/articles/view/code-formatting-and-readability Okunması, değiştirilmesi, bakımı ve hata ayıklaması için ikinci olanı daha kolay buluyorum. Ama belki bu sadece benim :)
dr Hannibal Lecter


4
şimdi bu soru kanaatine dayalı bir sorunun güzel bir örneğidir
Rudolf Olah

2
peki ya bir ya da başka bir yönde kesin bir kanıt yoksa? Bir ve başka yönde yeterli bir argüman sağlandığında ve cevabın doğru olup olmadığına dair bir oylama varsa - bu çok faydalı olur. Bu gibi kapanış sorularını bu sitenin değerine zararlı olarak görüyorum.
gsf 13.16

9
Ve fikir temelli soruları ve cevapları seviyorum Hangi çoğunluğun tercih ettiğini ve başkalarının okuması için kodu yazmama izin verdiğini söylüyorlar.
Zygimantas

Yanıtlar:


402

İkinci stili tercih ederim. İlk önce geçersiz durumlardan kurtulun, uygun şekilde istisnalardan yalnızca çıkma veya yükseltme yapma, buraya boş bir satır koyun ve ardından yöntemin "gerçek" gövdesini ekleyin. Okumasını daha kolay buluyorum.


7
Smalltalk bu "bekçi cümleleri" olarak adlandırıyor. En azından Kent Beck'in bunları Smalltalk En İyi Uygulama Kalıplarında söylediği şey; Ortak bir parite olup olmadığını bilmiyorum.
Frank Shearar

154
Erken çıkmak, sınırlı zihinsel yığınınızı doldurmanıza izin verir. :)
Joren

50
Bunu daha önce "Bouncer Pattern" olarak adlandırdığımı duydum - kapıya girmeden önce kötü vakalardan kurtulun.
RevBingo

14
Hatta kadar ileri gidip bunun kesinlikle SADECE yapılacak doğru şey olduğunu söyleyebilirim.
Oliver Weiler,

38
Ayrıca başlangıçta sınır davalarından kurtulursanız girintiler eklemeye devam etmiyorsunuz.
doppelgreener

170

Kesinlikle sonuncusu. Eski şu anda kötü görünmüyor, ancak daha karmaşık bir kod aldığınızda, kimsenin bunu düşüneceğini düşünemiyorum:

public int SomeFunction(bool cond1, string name, int value, AuthInfo perms)
{
    int retval = SUCCESS;
    if (someCondition)
    {
        if (name != null && name != "")
        {
            if (value != 0)
            {
                if (perms.allow(name)
                {
                    // Do Something
                }
                else
                {
                    reval = PERM_DENY;
                }
            }
            else
            {
                retval = BAD_VALUE;
            }
        }
        else
        {
            retval = BAD_NAME;
        }
    }
    else
    {
        retval = BAD_COND;
    }
    return retval;
}

daha okunabilir

public int SomeFunction(bool cond1, string name, int value, AuthInfo perms)
{
    if (!someCondition)
        return BAD_COND;

    if (name == null || name == "")
        return BAD_NAME;

    if (value == 0)
        return BAD_VALUE;

    if (!perms.allow(name))
        return PERM_DENY;

    // Do something
    return SUCCESS;
}

Tamamen kabul ediyorum ki tek çıkış noktalarının avantajını hiç anlamadım.


20
Tek bir çıkış noktasının avantajı şu ki ... tek bir çıkış noktası var! Örneğinizle geri dönebilecek birkaç nokta var. Daha karmaşık bir fonksiyonla, dönüş değerinin formatı değiştiğinde çıkış noktası avına dönüşebilir. Elbette, tek bir çıkış noktasını zorlamanın bir anlamı yoktur.
JohnL

71
@JohnL büyük fonksiyonlar problemdir, çoklu çıkış noktaları değil. Ek bir işlev çağrısının kodunuzu son derece yavaşlatacağı bir bağlamda çalışmadığınız sürece, elbette ...
Dan Rosenstark 11:10

4
@Yar: Doğru, ama mesele geçerli. Kimseyi dönüştürmeye çalışmayacağım ve mümkün olduğu kadar az çıkış noktası seçmenin avantajını işaret ediyordum (ve Jason'ın örneği zaten bir şekilde saman adamdı). Bir dahaki sefere saçınızı çekerken, SomeFunction’ın neden bazen tuhaf değerler verdiğini anlamaya çalışıyorsunuz, belki de geri dönmeden hemen önce bir günlük kaydı eklemek isteyebilirsiniz . Eğer sadece bir böcek varsa hata ayıklamak çok daha kolay! :)
JohnL

76
@ Jason Viers Bir tek return value;yardımcı olur sanki !?! Öyleyse, kişi yarım düzine avlanmak zorundadır value = ..., dezavantajı, bu atama ve son dönüş arasında değerin değişmeyeceğinden asla emin olmamanızdır. En azından hemen geri dönüş, hiçbir şeyin artık sonucu değiştirmeyeceği açıktır.
Sjoerd

5
@Sjoed: Ben burada ikinci Sjoerd. Sonucu kaydetmek istiyorsanız, arayan sitede oturum açabilirsiniz. Sebebini bilmek istiyorsanız, her çıkış noktasında / atamada oturum açmanız gerekir, böylece her ikisi de bu açıdan aynıdır.
Matthieu M.

32

Bu duruma bağlı olarak - Genel olarak, işlevden erken çıkmak için bir grup kodun yerini değiştirmeye çalışmaktan çıkmayacağım - derleyici genellikle benim için bunu halleder. Bununla birlikte, tepede ihtiyacım olan ve başka türlü devam edemem gereken bazı temel parametreler varsa, erken kırılacağım. Aynı şekilde, eğer bir koşul iffonksiyonda dev bir blok oluşturursa , bunun bir sonucu olarak erken kopmasını sağlayacağım.

Bununla birlikte, bir işlev çağrıldığında bazı veriler gerektiriyorsa, sadece geri dönmenin aksine bir istisna (örneğin örneğe bakınız) atacağım.

public int myFunction(string parameterOne, string parameterTwo) {
  // Can't work without a value
  if (string.IsNullOrEmpty(parameterOne)) {
    throw new ArgumentNullException("parameterOne");
  } 
  if (string.IsNullOrEmpty(parameterTwo)) {
    throw new ArgumentNullException("parameterTwo");
  }

  // ...      
  // Do some work
  // ...

  return value;
}

9
Ve eğer sonuç korunabilirse, hangi tarzın seçildiğini kim önemser?
Jeff Siver,

3
@Jeff Siver - Öyleyse bu neden “kutsal savaş” tarzı bir soru olmaya meyillidir, günün sonunda kişisel tercihlere ve içsel bir stil kılavuzunun ne söylediğine gelir.
rjzii

1
Buradaki anahtar paket, erken dönmek yerine bir istisna atması. Geçerlilik kontrolleri için iade değeri yeniden amaçlanmamalıdır. Çeşitli koşullarınız varsa ve yöntemi kullanarak kodun neden başarısız olduğunu bilmesini istiyorsanız? Birdenbire gerçek işletme verilerini, hiçbir şeyi (boş sonuç) veya bir çok farklı dizeleri, kodları, sayıları, ... tek bir yöntemle döndürebilirsiniz. Sadece neden başarısız olduğunu açıklamak için. Hayır teşekkürler.
DanMan

derleyicimin önerdiği gibi ne siklomatik karmaşıklık? Biri yardımcı olabilir eğer kod yuva değil daha iyi değil mi?
l

24

Erken dönüşü tercih ederim.

Bir giriş noktanız ve bir çıkış noktanız varsa, kafanızdaki kodun tamamını çıkış noktasına kadar her zaman izlemeniz gerekir (aşağıdaki başka bir kod parçasının sonuç için başka bir şey yapıp yapmadığını asla bilemezsiniz. var olana kadar onu izlemek zorunda). Nihai sonucu belirleyen hiçbir branş materyali yapmazsınız. Bunu takip etmek zor.

Bir giriş ve çoklu girişlerle, sonucunuzu aldığınızda geri dönersiniz ve sonuçta kimsenin başka bir şey yapmadığını görmek için uğraşmazsınız (çünkü geri döndüğünüzden beri başka bir şey olmaz). Yöntem gövdesinin daha fazla adıma bölünmesi gibi, ki her bir sonuç sonucu geri döndürme veya bir sonraki adımın şansını denemesine izin veriyor.


13

Manuel olarak temizlenmesi gereken C programlamada, bir puan geri dönüş için söylenecek çok şey var. Şu anda bir şeyi temizlemeye gerek olmasa bile, birisi işlevinizi düzenleyebilir, bir şey tahsis edebilir ve geri dönmeden önce temizlemesi gerekebilir. Bu olursa, tüm iade beyanlarını inceleyen bir kabusluk olacaktır.

C ++ programlamasında yıkıcılar var ve şimdi kapsam koruma görevlileri de var. Tüm bunların, kodun ilk başta istisna güvenli olduğundan emin olmak için burada olması gerekir, bu nedenle kod erken çıkışa karşı iyi korunur ve bu nedenle bunu yapmak için mantıklı bir olumsuzluk yoktur ve tamamen bir stil sorunudur.

Java hakkında yeterince bilgili değilim, "nihayet" blok kodunun çağrılıp çağrılmayacağı ve sonuçlandırıcıların bir şeyin olmasını sağlamak için gereken durumu ele alıp alamayacağı.

C # Kesinlikle cevap veremem.

D dili size uygun dahili kapsam çıkış korumaları sağlar ve bu nedenle erken çıkış için iyi hazırlanmıştır ve bu nedenle stil dışında bir sorun sunmamalıdır.

İşlevler elbette ilk başta çok uzun olmamalı ve eğer çok büyük bir anahtar ifadeniz varsa, kodunuz muhtemelen çok kötü bir faktördür.


1
C ++, derleyiciye normalde bir değer döndürdüğünüzde gerçekleşecek kopyalama işlemini atlamasına izin veren dönüş değeri optimizasyonu adı verilen bir şeye izin verir. Ancak, yapılması zor olan çeşitli koşullar altında ve birden fazla getiri değeri bu durumlardan biridir. Başka bir deyişle, C ++ 'da çoklu dönüş değerleri kullanmak kodunuzu yavaşlatır. Bu kesinlikle MSC'de geçerlidir ve RVO'yu birden fazla olası dönüş değeriyle uygulamak oldukça zor (imkansız olmasa da) olacağı göz önüne alındığında, tüm derleyicilerde bir sorun olması muhtemeldir.
Eamon Nerbonne

1
C'de sadece kullanın gotove muhtemelen iki noktalı bir dönüş kullanın. Örnek (yorumlarda kod biçimlendirme mümkün değil):foo() { init(); if (bad) goto err; bar(); if (bad) goto err; baz(); return 0; err: cleanup(); return 1; }
mirabilos

1
Bir goto yerine "Özüt Yöntemi" ni tercih ederim. Bir dönüş değeri değişkeni veya bir değere geçiş yapmanız gerektiğini düşündüğünüzde, temizleme kodunuzun her zaman çağrıldığından emin olmak için, onu birden fazla fonksiyona bölmeniz gereken bir Kokudur. Bu, karmaşık koşullu kodunuzu Guard Cümleleri ve diğer erken iade tekniklerini kullanarak basitleştirmenize izin verirken, temizleme kodunuzun her zaman çalışmasını sağlar.
BrandonLWhite

"birisi işlevinizi düzenleyebilir" - bu karar vermeniz için çok saçma bir açıklamadır. Herkes gelecekte her şeyi yapabilir. Gelecekte birilerinin bir şeyleri kırmasını önlemek için bugün belirli bir şey yapmanız gerektiği anlamına gelmez.
Victor Yarema

Kodunuzu sürdürülebilir hale getirme denir. Gerçek dünyada kod ticari amaçlar için yazılmıştır ve bazen daha sonra değiştirmesi gereken bir geliştiricidir. Ben önbelleğe alma tanıtmak ve gerçekten ++ Modern C uygun bir yeniden yazmak gerekli olduğunu spagetti karışıklık hatırlamak CURL yamalı sanki zamanda bunu cevabını yazdım
Cashcow

9

Kazanmak için erken iadeler. Çirkin görünebilirler, ancak büyük ifpaketleyicilere göre çok daha az çirkinler , özellikle de kontrol edilmesi gereken çok sayıda koşul varsa.


9

İkisini de kullanırım.

DoSomething3-5 kod satırı varsa , kod ilk biçimlendirme yöntemini kullanarak sadece güzel görünüyorsun.

Fakat bundan çok daha fazla satır varsa, o zaman ikinci formatı tercih ederim. Açma ve kapama braketlerinin aynı ekranda olmaması hoşuma gitmiyor.


2
Güzel olmaz! Çok fazla girinti!
JimmyKane

@JimmyKane Sadece 3-5 satırda meydana gelebilecek çok fazla girinti var, özellikle seviye başına 2 (?) Satıra ihtiyaç duyduğunuzda geri kalanlar girintili olur: Biri kontrol yapısı ve blok başlangıcı, biri blok sonu için.
Deduplicator

8

Tek giriş-tek çıkış için klasik bir neden, aksi halde biçimsel anlambilimin açıkça çirkinleşmesidir (GOTO’nun zararlı olduğu düşünülmekteydi).

Başka bir deyişle, yalnızca 1 iadeniz varsa, yazılımınızın rutinden ne zaman çıkacağını bilmek daha kolaydır. Bu da istisnalara karşı bir argümandır.

Genellikle erken dönüş yaklaşımını en aza indiririm.


Ancak, resmi bir analiz aracı için, aracın ihtiyaç duyduğu anlamsal özelliklerle bir dış işlev sentezleyebilir ve kodu insan tarafından okunabilir halde tutabilirsiniz.
Tim Williscroft

@Tim. Bu ne kadar içki yapmak istediğinize ve ne analiz ettiğinize bağlı. Kodlayıcı şeyler hakkında mantıklıysa, SESE'yi oldukça okunaklı buluyorum.
Paul Nathan

Analize olan tavrım, Self projesindeki optimizasyonlardan kaynaklanmaktadır. Dinamik yöntem çağrılarının% 99'u statik olarak çözülebilir ve elimine edilebilir. o zaman bazı düz hat kodlarını analiz edebilirsiniz. Çalışan bir programcı olarak, üzerinde çalışacağım kodların çoğunun güvenilir bir şekilde ortalama programcılar tarafından yazıldığını varsayabilirim. Böylece çok güzel kod yazmazlar.
Tim Williscroft

@Tim: Yeterince adil. Yine de, statik dillerin hala çok fazla oyunun olduğunu belirtmeye mecbur olduğumu hissediyorum.
Paul Nathan

İstisnalar karşısında geçerli olmayan bir sebep. Bu nedenle tek çıkış C de harika, ama C ++ 'da hiçbir şey satın almıyor.
peterchen

7

Şahsen, başlangıçta başarılı / başarısız durum kontrolleri yapmayı tercih ederim. Bu, fonksiyonun üstündeki en yaygın hataların çoğunu, takip edilecek mantığın geri kalanıyla birlikte gruplamama izin veriyor.


6

Değişir.

İşlevin geri kalanını anlamsız bir şekilde yürütecek derhal kontrol etmek için belirgin bir çıkmaz durumu varsa erken dönüş. *

İşlev daha karmaşıksa ve aksi takdirde birden fazla çıkış noktasına sahipse Retval + single return değerini ayarlayın (okunabilirlik sorunu).

* Bu genellikle bir tasarım problemini gösterebilir. Metodlarınızın çoğunun, kodun geri kalanını çalıştırmadan önce bazı harici / paramer durumlarını veya benzerlerini kontrol etmesi gerektiğini düşünüyorsanız, bu muhtemelen arayan tarafından ele alınması gereken bir şeydir.


6
Paylaşılabilecek bir kod yazdığımda, mantığım "Hiçbir Şey Yok. Hiçbirini Güvenme" dir. Girişlerinizi ve güvendiğiniz herhangi bir harici durumu her zaman doğrulamanız gerekir. Birisi size bozuk veriler verdiğinden, muhtemelen bir şeyi bozmak yerine istisna atmak daha iyidir.
TMN

@TMN: İyi nokta.
Bobby Tables

2
Buradaki kilit nokta, OO'da bir istisna atacağınız , geri dönmeyeceğinizdir . Çoklu iadeler kötü olabilir, çoklu istisna atamalarının mutlaka bir kod kokusu olması gerekmez.
Michael K

2
@MichaelK: Eğer bir koşul post-koşulu yerine getirilemez ise bir istisna olmalıdır. Bazı durumlarda, bir metot erken çıkmalıdır çünkü fonksiyona başlamadan önce post-koşul elde edilmiştir. Örneğin, bir kontrolün etiketini değiştirmek için bir "Kontrol etiketi ayarla" yöntemini çağırırsa Fred, pencerenin etiketi zaten vardır Fredve kontrolün ismini mevcut durumuna getirerek yeniden çizmeye zorlar (bazı durumlarda potansiyel olarak yararlı olsa da) Eldeki birinde sinir bozucu olmak), eski ve yeni isimler eşleşirse set-name yönteminin erken çıkması mükemmel bir şekilde mantıklı olacaktır.
supercat,

3

Bir If kullanın

Don Knuth'un GOTO'yla ilgili kitabında, onu her zaman en muhtemel koşulun if if ifadesinde gelmesi için bir sebep verdiğini okudum. Bunun hala makul bir fikir olduğu varsayımı altında (ve o dönemin hızı için saf bir düşünce değil). Erken iadelerin iyi bir programlama uygulaması olmadığını söyleyebilirim, özellikle de, kodunuzun başarısız olmama ihtimalinden daha fazla başarısız olmadıkça, hata işleme için kullanılmadıklarından daha sık oldukları gerçeğini göz önünde bulundurarak :-)

Yukarıdaki tavsiyeye uyursanız, bu iadeyi işlevin altına koymanız gerekir, o zaman bir geri dönüş bile denemez, hata kodunu ayarlayın ve iki satır döndürün. Böylece 1 giriş 1 çıkış idealine ulaşılır.

Delphi'ye Özel ...

Deliller olmasa da, bunun Delphi programcıları için iyi bir programlama uygulaması olduğunu düşünüyorum. D2009 öncesi, bir değer döndürmek için atomik bir yolumuz yok, sahip olduk exit;ve result := foo;ya da sadece istisnalar atabiliriz.

Eğer ikame etmek zorundaysan

if (true) {
 return foo;
} 

için

if true then 
begin
  result := foo; 
  exit; 
end;

Bunu fonksiyonlarınızın her birinin tepesinde görmekten bıkmış olabilirsiniz.

if false then 
begin
  result := bar;

   ... 
end
else
   result := foo;

ve sadece exittamamen kaçının .


2
Yeni DELPHIS ile, kısaltılmış olabilir if true then Exit(foo);ben ilk başlatmak için genellikle tekniği kullanmak resultiçin nilveya FALSEsonra tüm hata durumlarını kontrol edip sadece sırasıyla Exit;eğer biri karşılandığında. Daha resultsonra başarı durumu (tipik olarak) yöntemin sonunda bir yere ayarlanır.
JensG

evet, bu yeni özelliği sevmemize rağmen, Java programcılarını rahatlatmak için sadece şeker gibi görünüyor, bir sonraki şey, değişkenlerimizi prosedürler içinde tanımlamamıza izin vereceklerini bileceksiniz.
Peter Turner

Ve C # programcıları. Evet, dürüst olmak gerekirse, bildirim ile kullanım arasındaki satır sayısını azalttığı için gerçekten yararlı olduğunu görüyorum (IIRC bunun için bir ölçü bile var, adını unuttu).
JensG

2

Aşağıdaki ifadeye katılıyorum:

Şahsen ben, fonksiyonun girintisini azalttığı için, koruma cümlelerinin hayranıyım (ikinci örnek). Bazı insanlar onlardan hoşlanmıyor çünkü fonksiyondan çok sayıda geri dönüş noktasına yol açıyor, ancak bence onlarla daha açık.

Alındığı stackoverflow bu soruya .


+1 Koruma maddeleri için. Ayrıca pozitif odaklı bir muhafazayı da tercih ederim, örneğin: if (condition = false), return (! Condition) return yerine dönüş
JustinC

1

Erken dönüşleri neredeyse sadece bu günlerde aşırı derecede kullanıyorum. Bunu yazıyorum

self = [super init];

if (self != nil)
{
    // your code here
}

return self;

gibi

self = [super init];
if (!self)
    return;

// your code here

return self;

ama bu gerçekten önemli değil. İşlevlerinizde bir veya ikiden fazla iç içe geçme düzeyine sahipseniz, yakalanmaları gerekir.


Katılıyorum. Girinti, okumada sorun çıkaran şeydir. Girinti ne kadar az olursa, o kadar iyidir. Basit örneğiniz aynı girinti seviyesine sahiptir ancak bu ilk örnek kesinlikle daha fazla beyin gücü gerektiren daha fazla girinti ile büyüyecektir.
user441521

1

Yazmayı tercih ederim:

if(someCondition)
{
    SomeFunction();
}

2
eww. Bu ön doğrulama mı? Yoksa onaylamaya adanmış bir mehtod DoSomeFunctionIfSomeConditionmu?
STW

Bu, endişelerinizi nasıl ayırıyor?
sadece

2
İşlevin uygulamasını (bağımlılık mantığını) dış yaparak kapsüllemeyi ihlal ediyorsunuz.
TMN

1
Bu bir genel yöntemde çalıştırılırsa ve SomeFunction () aynı sınıftaki özel bir yöntemse, tamam olabilir. Fakat eğer birisi SomeFunction () 'ı arıyorsa, oradaki çekleri kopyalamanız gerekir. Her yöntemin işini yapmak için neye ihtiyacı olduğuna dikkat etmesini sağlamak için daha iyi buluyorum, başka kimsenin bunu bilmesi gerekmiyor.
Wiklander Başına

2
Bu kesinlikle Robert C. Martin'in “Temiz Kod” da önerdiği tarzdır. Bir fonksiyon sadece bir şey yapmalı. Ancak “Uygulama Kalıpları” nda Kent Beck, OP'de önerilen iki seçenekten ikincisinin daha iyi olduğunu öne sürüyor.
Scott Whitlock,

1

Senin gibi, genelde ilkini ben yazarım, ama sonunu tercih ederim. Çok fazla iç içe çekim varsa, genellikle ikinci yönteme başvururum.

Hata işlemenin kontrolden nasıl uzaklaştırılmasından hoşlanmıyorum.

if not error A
  if not error B
    if not error C
      // do something
    else handle error C
  else handle error B
else handle error A

Bunu tercih ederim:

if error A
  handle error A; return
if error B
  handle error B; return
if error C
  handle error C; return

// do something

0

Tepedeki koşullara "önkoşullar" denir. Koyarak if(!precond) return;, tüm ön koşulları görsel olarak listeliyorsunuz.

Büyük "if-else" bloğunun kullanılması ek yükü arttırabilir (3 düzeydeki girintiler hakkında teklifi unuttum).


2
Ne? Java’da erken bir dönüş yapamazsınız? C #, VB (.NET ve 6) ve görünüşe göre Java (sanırım, fakat 15 yıldan beri dili kullanmadığım için bakmak zorunda kaldım) erken dönmelere izin veriyor. bu yüzden 'kesinlikle yazılmış dilleri' bu özelliğe sahip olmadığı için suçlamayın. stackoverflow.com/questions/884429/…
ps2goat

-1

Eğer ifadeleri küçükse saklamayı tercih ederim.

Yani, arasında seçim yapma:

if condition:
   line1
   line2
    ...
   line-n

ve

if not condition: return

line1
line2
 ...
line-n

"Erken dönüş" olarak tanımladığın şeyi seçerdim.

Unutma, erken dönüşleri umursamıyorum ya da her neyse, sadece kodları basitleştirmeyi, if ifadelerinin vücutlarını kısaltmayı gerçekten seviyorum.

Olursa olsun ve olmasın ve içindeyken iç içe geçmişse , ne pahasına olursa olsun, kaçının.


-2

Diğerlerinin dediği gibi, buna bağlı. Değer döndüren küçük işlevler için erken getirileri kodlayabilirim. Ama büyük boyutta fonksiyonlar için, kodda her zaman dönmeden önce çalıştırılacak bir şey koyabileceğimi bildiğim bir yere sahip olmayı seviyorum.


-2

Fonksiyon seviyesinde hızlı çalışıyorum. Kodu tutarlı ve temiz tutar (bana ve birlikte çalıştığım kişiye). Bu yüzden her zaman erken dönüyorum.

Sık sık kontrol edilen koşullar için, AOP kullanıyorsanız bu kontroller için yönleri uygulayabilirsiniz.

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.