SORU
15 Kasım 2009, Pazar


Neden özel durum kötü idare ediyor?

Google'ın dil bir tasarım seçimi gibi istisnaları yoktur Git ve Linux ün Linus istisnalar bok çağırdı. Neden?

CEVAP
15 Kasım 2009, Pazar


İstisnalar istisna atılan cismi kırmak ve tutarsız bir durumda nesneleri bırakacaktır gerçekten kolay kod yazmak. Onlar aslında senin yaptığın her açıklamada potansiyel atmak ve doğru işleyebileceği en hatırlamak güç. Bunu yapmak zor ve mantıksız olabilir.

Basit bir örnek olarak şöyle bir şey düşünün:

class Frobber
{
private:
    int m_NumberOfFrobs;
    FrobManager m_FrobManager;

public:

    void Frob()
    {
        m_NumberOfFrobs  ;

        m_FrobManager.HandleFrob(new FrobObject());
    }
};

FrobManager FrobObject, Bu iyi görünüyor, 3 ** olacak varsayarak, değil mi? Ya da belki... Hayal sonra FrobManager::HandleFrob() operator new da bir istisna değil. Bu örnekte, m_NumberOfFrobs artımı geri almaz. Böylece, herkes Frobber bu örneği kullanarak muhtemelen bozuk bir nesne olacak.

Bu örnek görünse de aptal (Tamam, vardı germek kendimi biraz inşa: -)) ama paket olduğunu Eğer bir programcı değil sürekli düşünme istisnalar ve emin her permütasyon devlet alır geri zaman orada atar, başın belaya girerse bu şekilde.

Örnek olarak, birbirini kapsamayan nesneler düşünmek gibi düşünebilirsiniz. Önemli bir bölümü içinde, veri yapıları bozuk olmadığından ve diğer konuları Ara değerleri görmüyor emin olmak için birkaç ifadeleri güveniyor. Eğer bu ifadelerin herhangi biri rastgele çalışmıyor eğer, acı bir dünyada buluruz. Şimdi kilitler ve eşzamanlılık götürün ve düşünün böyle her yöntemi. Eğer isterseniz nesne durumuna permütasyon bir işlem olarak her bir yöntem düşünün. Yöntem aramanız başında, nesne, temiz bir devlet, ve sonunda da temiz bir devlet olmalı. Arasında, değişken foo bar ama kod sonunda bunu düzelteceği ile tutarsız olabilir. İstisnalar ne demek tabloların herhangi biri, herhangi bir zamanda kesebilirsiniz. Sorumluluk atar nesne durumu etkisi yok çok doğru ve bu durumda geri, veya operasyon emri için tek tek her yöntemi. Yanlış (ve kolay böyle bir hata yapmak), sonra arayan Ara değerleri görmek biter.

C programcıları bu sorun için kesin çözüm olarak söylemeyi aşk olan DEMİRYOLU gibi yöntemler, bu karşı korumak için uzun bir yol. Ama bir gümüş kurşun değil. Atmak kaynakları serbest olduğundan emin olun, ama nesne durumu ve arayanlar Ara değerleri görmek hakkında yolsuzluk düşünmek zorunda ücretsiz değil. Bu yüzden, kodlama stilini, fiat ile bir çok insan için, daha kolay bunu söylemekistisna yok. Eğer yazdığınız kod biraz kısıtlamak, daha bu böcekleri tanıtmak. Eğer istemezsen, bunu çok kolay bir hata yapmak.

Tüm kitaplar istisna C güvenli kodlama hakkında yazılmıştır . Uzmanlar çok yanlış verildi. Gerçekten o kadar karmaşık değil ve çok ince bir ayrıntı vardır, belki de bu özelliği göz ardı etmek gerekir, bu iyi bir işaret. :-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • SegaAmerica

    SegaAmerica

    5 Mart 2008
  • Xbox

    Xbox

    1 Kasım 2005