Neden istisna yerine bug kelimesini kullanmıyorsunuz? [kapalı]


18

İstisnaları hata olarak adlandırırsak, neden istisna yerine ilk etapta sadece bir hata olarak adlandırılmıyor?

Kodda istisna denir ve meydana gelir gelmez hata denir. Öyleyse neden ilk başta böcek olarak adlandırmıyorsunuz?

Herhangi bir cevap veya yorum için teşekkür ederim.


Umarım bahsettiğim teknik detaylar bir istisnanın hataya karşı ayrımını netleştirmeye yardımcı olur. Büyük soru BTW, +1
Jeremy Thompson


1
Aslında onları nasıl karıştırdığınızı bilmiyorum, çünkü bunlar çok farklı şeyler. İstisnalar, kod tarafından işlenen ve bir tür hatayı gösteren durumlardır. Tipik olarak, belirsiz bir tür hatalar, tam olarak açıklanamaz ve bu tür. - Hatalar ... bir hata tanımı gereği kodun kendisi tarafından ele alınmaz. Bunlar hata bile değildir, olmaması gereken yerde mantık eksikliğini gösterirler.
tvCa

1
@NiklasRtz: Neden büyük ödül? Tonlarca insan ne olursa olsun cevap verirdi.
ThePopMachine

@ThePopMachine Çünkü diğer insanların ilginç bulabileceği sorular için büyük lütufları severim. "Popüler" sorularıma cevap veriyorum ve elimden geldiğince cevap veriyorum. Güzel ve eğlenceli sorular ve cevaplardan çok yardım aldım. Ayrıca bu programcılar için hata işleme ve hata kodları hakkında yeni bir soru hazırlıyorum ... bu nasıl kod yazılır ancak sınırlı sayıda iade edebilirsiniz webapps için exmple için sınırlı ve umarım standart bir şekilde hataları işlemek için belirli değil hata kodları, hataların ne kadar iyi olduğu ve kod parçalarının isimlendirilmesi.
Niklas

Yanıtlar:


93

Oldukça basit: tüm istisnalar hata değildir (ve benzer şekilde, tüm hatalar kendilerini istisna olarak göstermez).

Hata olmayan bir istisna örneği olarak, bir USB sürücüsünden bir dosya okuyorsanız ve birisi sürücüyü soketten çıkarırsa. Bu bir istisna oluşturacaktır (istisnaları destekleyen çoğu dilde). Ancak kodda bir hata değil.

Tersine, bir hata kendisini bir hesaplama hatası veya bir şey olarak gösterebilir. Hala bir cevap alıyorsunuz, doğru olan bu değil.

Bu having, tüm yol yığının üstüne yolunda istisna yapan olasılıkla olan bir hata. Yukarıdaki USB örneğimde, bu istisnayı yakalayabilmeli ve kullanıcıya "Artık bağlı olmadığı için dosyayı okuyamadık" diyerek hoş bir hata gösterebilmelisiniz. ya da başka birşey. Onlara bir IOExceptionve bazı funky hata kodu sunuyorsanız , bu bir hatadır. Ancak istisnanın kendisi değildir.


1
Nasıl yaptığımı gördüğümde bile haklısın: Bir yöntem en yakın şehrin adını (Los Angeles) alamazsa, bir istisna yakalar ve daha büyük yönetim alanının (örneğin California) adını döndürür, ancak geçerli olduğu için herhangi bir koordinat için, yakın şehri olmayan bir yer bir hata değildir, bir istisnadır. Katılıyor musun?
Niklas

1
@Nicke: Evet, buna katılırdım.
Dean Harding

1
Bir IOException ve hata kodu sunmak her zaman bir hata değildir. Bu bir teşhis. Bunu genellikle kişisel betikler için yapıyorum, başarısızlık sadece yanlış argümanlar koyduğum anlamına geliyor.
Thomas Eding

23

Basit ve basit, bir istisna (her zaman) bir hata değildir!

İstisnai bir şey olduğunda bir istisna atılır (veya olmalıdır). Sabit diskimle ilgili bir sorun varsa ve bir dosya yazılamıyorsa, bu bir hata değildir. Bu donanımın bir hatasıdır.

Bir hata genellikle kötü programlamanın bir sonucudur. Bir uygulama, programlama hatası nedeniyle beklenmeyen bir şey yaparsa, bu bir hatadır.


1
Heh, neredeyse aynı anda cevap verdik ve temelde aynı örnekle :-)
Dean Harding

5
@DeanHarding Büyük beyinler benzer düşünür, değil mi? : D

1
İlk cümlenizi kabul ederken, son cümlenize katılmıyorum. Birinci bilgisayar hata (uydurma olsa da), aslında, bir güve bir röle noktaları arasında sıkışıp oldu. Arızalı bir sabit diskin farkı nedir?
Scott Whitlock

1
@ScottWhitlock Sanırım "hata" nın birden fazla tanımı var. Her zaman insanların neden olduğu hatalar anlamına geldiğini varsaydım: en.wikipedia.org/wiki/Software_bug

1
@ScottWhitlock: ve sözde programcılar "benim hatam değil, bir hata olmalı" derdi ki, "hata" bir yazılım hatası anlamına gelen geri tepti. Bugün, bir donanım arızasına neden olabilmesine rağmen, bir donanım arızası hata olarak adlandırılamaz.
jmoreno

20

Aynı şey değiller.

Bir hata , bir yazılım parçasının istenmeyen davranışıdır: yazılım yapması gerekeni yapmaz. Hatalar, düz eski yazım hatalarından mantıksal hatalara ve yetersiz işlevsel özelliklere kadar her türlü yazılım geliştirmede yaşayabilir.

Bunun aksine bir istisna , normal çalışmadan sapan bir programın olağandışı bir koşuluna veya daha spesifik olarak bu tür durumları belirtmek ve işlemek için kullanılan dil yapısına atıfta bulunabilir.

Bir istisnanın meydana gelmesi bir hatanın işareti olabilir, ancak genellikle değildir. Örneğin, bir URL'den belge indirmesi ve yerel olarak işlemesi gereken bir uygulama, uzak sunucu kapalı olduğunda bir istisna atabilir: uygulama normal işlemden sapıyor (belgeyi indirip işleyemiyor), ancak istisnayı düzgün şekilde işler ve kurtarır, o zaman hata yoktur.

Tersine, bir hatanın varlığı mutlaka bir istisna olarak kendini göstermez. Bir uygulama, veritabanında saklamak yerine girdiğiniz verileri sessizce atabilir; bir istisna atılmaz, ama yine de bir hatadır.


Terimlerinizi tanımlamak için +1. Genel olarak, insanlar bunu daha sık yapmalıdır!
yfeldblum

Bu kesinlikle en açık cevap. çok açık ve özlü. İyi iş!
Locke

5

İstisnalar ve hatalar hiç ilgili değildir. Tabii, bazen bir istisna atarsınız ve bu bir hata anlamına gelir. Ancak bazen, programda bir hata olması gerekmeyen istisnai, olağandışı bir durum anlamına gelir. Özellikle her standart işlemin ve köpeğinin yaklaşık beş farklı istisna attığı Java gibi istisnai bir dilde - örneğin, dosya açma başarısız, dosya okuma başarısız, vb.


3

İstisnalar her zaman hata ile ilgili değildir. Bunu yaptığınız şeyde yanlış gidebilecek bir şey olarak düşünün.

Akla gelen bir örnek, bir etki alanı adını çözümlemek için kullanılan InetAddress.getByName () yöntemidir. Bir şey olursa ve bir UnknownHostException gerçekten bir kod sorunu atılır.


2

Yazılım hatası, yanlış veya beklenmedik bir sonuç üreten veya istenmeyen şekillerde davranmasına neden olan bir bilgisayar programı veya sistemindeki bir hatayı, kusuru, hatayı, arızayı veya hatayı tanımlamak için kullanılan yaygın terimdir. Bir etikette yazım hatası bile olabilir.

İstisnalar hatalardan farklıdır. Her tür istisna (erişim ihlali, yığın taşması vb.) Bir hata ayıklayıcıya "ilk şans" veya "ikinci şans" istisnası olarak yükseltilebilir. İlk şans istisnaları, bir hata işleyici ile düzgün bir şekilde ele alınmadıkları sürece, tanım gereği ölümcül değildir, bu noktada ikinci bir şans istisnası olarak tekrar yükseltilirler (yalnızca bir hata ayıklayıcı işleyebilir).

Hiçbir hata ayıklayıcı ikinci bir şans istisnasını işlemezse, uygulama kapatılır.


2

Kendinize meşru bir şekilde bir istisna oluşturabilirsiniz, umarım hiçbir zaman bilerek hata yapmazsınız.


bu bir yorum gibi daha fazla okur, bkz. Nasıl Cevap
Verilir

1
Kısalık, bunun iki şey arasındaki farkı vurgulayan bir cevap olmadığı anlamına gelmez.
Alan B

1

Tüm istisnalar hata değildir. Tüm hataların istisna olup olmadığı bir tartışma konusu olabilir.

İstisnaların normal veya beklenen uygulama akışının bir parçası olmayan olaylar olduğunu söyleyebiliriz. Bu olaylar, kodun nasıl yazıldığından bağımsız olabilir, çünkü bir hata aslında kötü koddan kaynaklanır (yanlış hesaplama gibi).

Aşağıda, bir özel durumun ele alınmamasının nasıl bir hata olabileceğinin bir örneği verilmiştir.

Diyelim ki bir harici depolama cihazına bazı veriler yazan bir program var. Harici depolama aygıtını yazarken fişi çekildi, çöktü veya imha edilebilir (herhangi bir nedenle). Şimdi bu istisnai bir durum, şimdi programlama dili istisnai işlemeyi desteklese de, program bu olay nedeniyle çökerse veya yanlış davranırsa, bu bir hatadır. (Son kullanıcı ne olduğunu bilmiyor olabilir. Ayrıca çok rahatsız edici) . Ancak program işlemi zarif bir şekilde iptal ederse, kullanıcıyı bilgilendirin (başka bir deyişle istisnayı işleyin) bu açıkça bir hata değildir.

Try catch machanism programlama dilleri aslında beklenmedik olayları ele almak için çıkış yolumuzu kolaylaştırmak için bir araçtır.


1

Özet : İstisnalar kötü sonuçların kanıtıdır, hatalar (bazılarının) kötü sonuçların nedenleridir. Sorun (çözülecek) istisna değildir, sorun istisnaya neden olan şeydir.

Resoning: Bir hata , bir ürünün tasarım veya uygulanmasında bir kusur olduğunu (yazılım sınırlı olmamak üzere). Örneğin, yanlış spesifikasyonlar veya basit inşa hatası nedeniyle uygun şekilde derecelendirilmiş bir röle (zaman / hassasiyet / güvenilirlik / kapasite) kullanmamak. Bunun bir istisnası , öngörülen ('beklenen' demeye cüret edersin?

Açıkçası, bir hata istisna oluşturabilir, çünkü 1) 'deki örnek 2)' de örneğe yol açabilir. Ancak tüm istisnalar, örneğin bir taşıtın kontrolünün kaybedilmesi nedeniyle hatalardan kaynaklanmayacaktır, çünkü operatör bir felç geçirmiştir.


0

Bu soru bir ödül için yeniden açıldığından, 2003'teki "İstisna mı Hata mı?" Başlıklı CUJ makalemi, OP'nin sorusunu tam olarak ele aldım.

Temel olarak, makale "hata" ve "istisna" terimlerini tanımlar (örnekler vererek) ve her biriyle başa çıkmak için stratejiler önerir.

Makale, hataların "ele alınmamasını", bunun yerine iddialarla işaretlenmesini önermektedir. Buna karşılık, gerçek istisnalar kodla işlem yapılmasını gerektirir (muhtemelen atma / yakalama istisnaları).

Ana nokta, hataların istisnalardan ziyade tam tersi strateji gerektirmesidir .

Yukarıda sözü edilen makaleye şu anda Dr.Dobb'dan şu adresten ulaşılabilir : http://www.drdobbs.com/an-exception-or-a-bug/184401686

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.