NotImplementedException Kullanımı


15

NotImplementedExceptionHenüz yazmadığınız kodları atmak kötü bir uygulama mıdır ? Muhtemelen TODO yorumları daha güvenli kabul edilir mi?


6
Bu tür istisnaları kullanmanın dezavantajı ne olurdu?
SRKX

@SRKX Üretim koduna girme ve tüm kod bloğunun çalışmamasına neden olan istisnalar riski vardır. (henüz bana henüz olmadı ama hepimiz kapalı gün var) Ben şahsen onları kullanmak, bazı dezavantajları gözden kaçmış olabilir endişeliydi.
Tom Squires

İşin garibi, etiketlerin hiçbiri hangi dilin kullanıldığını belirtmiyor. C'nin herhangi bir istisnası olmadığından, bu her ortak dil için geçerli değildir. Burada bir dil etiketi için yer var beyler.
David Thornley

1
@DavidThornley, soru başlangıçta C # olarak etiketlendi, bu yüzden etiketi okudum.
svick

@svick: Muhtemelen C # olduğunu düşündüm. Etiketi eklediğiniz için teşekkür ederiz.
David Thornley

Yanıtlar:


34

NotImplementedExceptionAslında iyi bir uygulama olduğuna inanıyorum .

Aslında, bir yöntemi uygulamayı unutursanız ve daha sonra projenizde kullanırsanız (ve inan bana, bunun gerçekleştiğini), adım adım yanlış olanları aramak için uzun bir hata ayıklama harcayabilirsiniz. İstisna varsa, program doğrudan durur ve istisnayı sorar (istisnayı yakalarsanız, yakaladığınız istisnayı arayarak bunu hızlı bir şekilde bulacaksınız).

Ben kullanarak öneriyoruz NotImplementedException kombine , YAPILACAK yorumlarla sen (VS görevlerle) GUI yardım ve program güvenliği birleştiren bu şekilde.

Yayın sürümü için, bence daha da önemlidir, çünkü çoğu durumda görünüşte düzgün çalışan bir programa sahip olmak yerine hatalı sonuçlar üretmek yerine programınızın çökmesini tercih edersiniz.


6
Resharper kullanırsanız, NotImplementedExceptionTODO yorumlarıyla aynı şekilde gösterilir. Bence bu güzel bir özellik.
svick

1
İyi bir TDD pratiği yapın ve bir kazanın var
LRE

7

Hatalar ve hata işleme hakkındaki genel felsefenize bağlıdır. Ben "zor hata" tip adamım: Ben bir şey yanlış olabilir en ufak bir ipucu bir istisna atacak; Her şeyi iddia edeceğim; Eğer bir hata varsa, orada bir şey olması bekleniyordu ve orada değilse ya da bir şey varsa ve olmamalıysa, tüm evren durmalıdır. Camların ünlem sesi hoparlörlerden uğursuzca çalmalıdır.

Hatalarla uğraşmak istemeyen başka insanlar da var. Peki, istemciye gönderirsek ve tüm kod modülü eksikse, kodlamayı unuttuğumuz ve testte kimse bunu gerçekleştirmediği için, uygulama bu konuda çok sessiz olduğu için ne olacak? Müşterinin yüzüne bir istisna atmaktan daha iyi bir şey yapmayın!


Hata ayıklama ve bırakmada farklı davranışlar isteyeceksiniz ve bir iddia her zaman kesmeyecektir. Net Kod Sözleşmelerinin Sürümde kapatılabileceğine inanıyorum.
İş

1
Çoğunlukla sürümde de kapalı olan iddiaları kullanıyorum. Hata ayıklamada bir kesme noktasına çarpan, test sırasında bir istisna atan veya hatta sürümde derlemeyen kendi onaylama işlevim var.
Mike Nakis

3

Bunun iyi bir fikir olduğunu söyleyebilirim. Genellikle, bir form veya diyagramdan veya başka bir şeyden otomatik olarak oluşturulan iskelet koduyla atılan istisnaları görüyorum. İstisna bana kodu uygulamak hatırlatıyor ve ben kurulmuş ama asla tam olarak uygulanmış işlevselliği kullanmaya çalışırsanız hataların olmasını sağlar. Bazen, onu durdurur veya yürütmeyi durdurma olasılığı daha düşük olan bir şeyle değiştiririm (konsola uyarı yazdırmak gibi), ancak bunun benim için çalıştığını görüyorum.

Başkalarının bu istisnayı kullanmanın kullanacağı bir kitaplık oluşturuyorsanız, kitaplığınızın bir işlevi çağıran ve neden hiçbir şeyin gerçekleşmediğini merak eden bir kullanıcı olması daha iyi olacaktır. Tabii ki, bu istisnayı sevk edilen bir kütüphanede bulundurmak hala oldukça kötü, ancak sessiz hatalardan daha iyi, IMO.


1

Bence bu iyi bir uygulama. Alternatif, hem testi hem de üretim kodunu etkileyecek geçersiz bir değer veya durum yaymaktır.


1
Bekle .... demek istediğin, nerede çalıştığın, NotImpl atar kod QA için sonuna kadar yapar? Üretime bile mi?
Steven Evers

3
Hayır, tam tersi: Bir NotImpl güzel bir kırmızı bayrak / hata durumudur. Ancak TODO'ların anlamsal bir değeri yoktur ve bunu test veya üretime sokarak işleri sessizce mahvedebilir. (YAPILACAKLAR'ı üretimden çıkarma politikasını hayal edebilirim, ama böyle bir kuralımız yok.)
Larry OBrien

1

Her zaman kullanırım NotImplementedException- sonuçta bunun için.

Bu, "hızlı başarısız" kavramı ile ilgilidir: kodunuz bir istisna atarsa, üretime geçmeden önce yakalanması gerekir. Üretime geçerse, en azından müşteri montajın yanlış olduğunu bilir .

Kod anlamsız bir değer döndürürse veya voidyöntemler için herhangi bir işlem yapmazsa, kodunuzun tüketicileri çağrının olmadığı zamanlarda anlamlı olduğunu düşünebilir. Daha sonra, bazı doğru kodları aldıklarında, kodları eski yanlış davranışa bağlı olduğu için bozulabilir.


0

Bu nasıl bir proje? İş mi evde mi? Evde, istediğinizi yapın - üzerinde çalıştığınız her şeyi bitirmeniz gerektiğini en iyi hatırlatan ne varsa.

İşte, yazmayı bitirin.

Diğer devs, QA veya bir yapı kırmak / bozacak kodu kontrol ediyorum bir durum göremiyorum.


Her ikisi de, evde de iyi uygulamalara bağlı kalmaya çalışıyorum.
Tom Squires

0

Doxygene autodocing'de hem ben hem de \ todo yapıyorum ve sonra istisnayı atıyorum. Bu şekilde, insanlar en azından RTFM'ye rahatsız edilemezlerse, neden mantıksal bir değer döndürmeyen bildirilen bir işlev olduğunu merak etmek yerine, programlarının neden çöktüğünü anlayabilirler.

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.