SORU
16 Kasım 2009, PAZARTESİ


Neden istisnalar ölçülü kullanılmalıdır?

Olası Çoğalt:
Why is exception handling bad?

Ben sık sık insanlar istisnalar nadiren kullanılması gerektiğini söylüyorlar, ama hiçbir zaman niçin gördüm ne de duydum. Bu doğru olabilir, gerekçesi normalde bir laf vardır:< . em ^"bir nedenle bir istisna deniyor"ki, bana hiç saygın programcı/mühendis tarafından kabul edilmesi gerektiğini açıklaması gibi görünüyor.

Bir istisna çözmek için kullanılan bir dizi sorunu var.Neden denetim akışı için bunları kullanmak akıllıca mı? Nasıl kullanıldıkları ile son derece muhafazakar olmak ardındaki felsefe nedir? Anlambilim? Performans? Karmaşıklık? Estetik? Kongre?

Performans bazı analizler daha önce de görmüştüm, ama bir düzeyde bazı sistemlere ilgili ve diğerleri için yersiz olur.

Yine, mutlaka özel durumlar için saklanması gerektiğini itirazım yok, ama fikir birliği mantığı nedir merak ediyorum eğer böyle bir şey varsa ().

CEVAP
16 Kasım 2009, PAZARTESİ


Sürtünme birincil anlamı anlambilim. Pek çok geliştirici istisnalar istismar ve her fırsatta onları atmak. Bu fikir biraz istisnai bir durum için istisna kullanmaktır. Örneğin, yanlış bir kullanıcı girişi bir istisna olarak bunun olmasını mı bekliyorsun çünkü bunun için hazır sayılmaz. Ama bir dosya oluşturmak için çalıştı ve diskte yeterli boş alan yoktu, o zaman evet, bu kesin bir durum.

Bir diğer konu özel durumlar sık sık atılan ve yutulur. Geliştiriciler bu yöntem sadece "sessizlik" programı ve tamamen çöken kadar mümkün olduğunca uzun süre çalıştırmak izin. Bu çok yanlış. Yoksa süreci özel durumlar, yoksa tepki uygun tarafından azat bazı kaynaklar, bulamazsan günlük özel durum olay ya da en azından haberdar kullanıcı değilsinizdir kullanarak özel durum için ne oldukları anlamına geliyordu.

Doğrudan sorunuza cevap. Özel durumlar nadiren istisnai durumlar nadirdir, çünkü kullanılmalı ve istisnalar pahalı.

Hatalı kullanıcı her giriş her düğmeye basın ya da program kazayı beklemeyin çünkü nadirdir. Söyle, veritabanı olabilir aniden değil erişilebilir, orada olmayabilir yeterli boş alan disk, bazı üçüncü şahıs servis size bağlı. çevrimdışı, bu olabilir, ama çok nadiren, bu olurdu açık istisnai durumlarda.

Bir özel durum üretiliyor normal program akışı kesecektir çünkü pahalı. Çalışma zamanı özel durum işleyebileceği uygun bir özel durum işleyicisi bulana kadar yığın düğümü çözecek. Ayrıca yol boyunca arayıp bilgi işleyicisi alacak özel durum nesnesi iletilmek üzere bir araya gelecek. Tüm bu maliyeti vardır.

Bu özel durumlar (gülümseme) kullanarak istisna olabilir hayır demek değildir. Bazen ise birçok katmanı üzerinden iletimi dönüş kodları yerine bir istisna eğer kod yapısı kolaylaştırmak. Bazı yöntem genellikle beklediğiniz ve keşfetmek eğer basit bir kural olarak, bazı "daha iyi bir çözüm bulmak için" durum yarım saat sonra olağanüstü Ancak bu durum sadece bazı nadir durumlarda ortaya çıkar, o zaman iyi bir özel durum. "olağanüstü ederken çoğu zaman işlemin normal akışını bekliyoruz

@Açıklamaları: özel Durum kesinlikle eğer bu kodu daha basit ve kolay olsaydı daha az istisnai bazı durumlarda kullanılabilir. Bu seçenek açık ama oldukça nadir bir uygulama geliyor diyebilirim.

Neden denetim akışı için bunları kullanmak akıllıca mı?

Özel durumlar normal bozabilir çünkü "denetim akış". Bir istisna yükseltmek ve programın normal yürütme tutarsız bir durumda potansiyel olarak bırakarak, nesneleri ve bazı açık kaynak unfreed terk edilmiş. Tabii, C# nesne bir istisna kullanarak vücuttan atılır, hatta imha olacak emin olacak. kullanarak ifade etti Ama bizim dilden şu an için Özet yapalım. Çerçeve sizin için nesneleri çözmez sanırım. Bunu el ile yapmak. İstemek ve ücretsiz kaynakları ve bellek için bazı sistem var. Hangi durumlarda nesneleri ve kaynakları boşaltmak için sorumlu olan anlaşma, sistem genelinde var. Dış kitaplıkları ile başa çıkmak için nasıl kurallar var. Eğer program normal çalışma akışını takip ederse harika çalışıyor. Ama aniden yürütme ortasında bir istisna. Kaynakların yarısı unfreed kaldı. Yarısı henüz talep edilmemiş. Eğer işlem işlem şimdi olması gerekiyordu eğer kırık. Kaynakları Kullanım Kuralları bu kod parçaları kaynakları boşaltmak için sorumlu sadece idam olmayacak, çünkü çalışmaz. Eğer başka biri bu kaynakları kullanmak istedim tutarsız devlet ve kazada bu özel durum tahmin edemedikleri için de bulabilirler.

Bir yöntem istediğini söyle M() yöntemi çağrısı N() bazı işler yapmak ve bazı kaynak için sonra M geri dönüş sağlayabilir() kullanın ve onu imha edilecek. Güzel. Şimdi bir terslik N() ve bir istisna atar seni beklemiyordum M() çok özel kabarcıklar, en tepeye kadar belki yakalamak bazı yöntem C() olacak hiçbir fikrim yok. dalga mı geçiyorsun derinlerde N() ve olsun ve ne kadar ücretsiz bazı kaynaklar.

Özel durumlar yaratmak ile prognose zor durumda olan pek çok yeni öngörülemeyen Ara Birleşik Devletleri, programa getirmek, anlamak ve başa çıkmak için bir yol oluşturun. GOTO kullanarak biraz benzer. Çok zor rastgele başka bir yerden yürütme atlamak için bir program tasarım. Aynı zamanda onu korumak ve hata ayıklama için zor olacak. Program karmaşıklığı büyüdükçe, sadece bir bakış ne zaman ve nerede kaybedecek daha az tamir oluyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • B3ASTTY™

    B3ASTTY™

    27 Mayıs 2013
  • kylelandry

    kylelandry

    9 AĞUSTOS 2007
  • NightShader1

    NightShader1

    25 Temmuz 2006