Bu ilgili bir S: Sonunda kötü stil / tehlikeli dönüş sonra iş yapmak için madde kullanımı tehlikeli mi?
Referans verilen Q'da, nihayet kod kullanılan yapı ve ön getirme gerekliliği ile ilgilidir. Sorum biraz farklı ve daha geniş bir kitleye açıklık getirdiğine inanıyorum. Benim özel örneğim bir C # winform uygulaması, ancak bu C ++ / Java nihayet kullanım için de geçerli olacaktır.
İstisnalar ve istisna işleme / blok içinde gömülü temizleme ile ilgili olmayan bir çok kod var oldukça birkaç try-catch-nihayet blokları fark ediyorum. Ve istisna ve işleme ile yakından ilgili kod ile çok sıkı try-catch-nihayet bloklara sahip olmanın önyargılarını kabul edeceğim. İşte gördüğüm bazı örnekler.
Try bloklarında çok sayıda ön çağrı ve atanabilecek koda giden değişkenler ayarlanacaktır. Günlüğe kaydetme bilgileri de kurulur ve try bloğunda çalıştırılır.
Son olarak, bloklar form / modül / kontrol biçimlendirme çağrılarına (uygulama, yakalama bloğunda ifade edildiği gibi sona ermek üzere olmasına rağmen) yanı sıra paneller gibi yeni nesneler oluşturacaktır.
Kabaca:
methodName (...) { Deneyin { // Yöntem için çok sayıda kod ... // atabilecek kod ... // Yöntem ve dönüş için daha fazla kod ... } yakalamak (bir şey) {// istisna ele} en sonunda { // istisna nedeniyle bazı temizlik, kapanış işleri // oluşturulan şeyler için daha fazla kod (istisnaların atılabileceğini yoksayarak) ... // belki başka nesneler de oluşturabilir } }
Kod çalışır, bu yüzden buna bir değer vardır. İyi kapsüllenmemiş ve mantık biraz kıvrıktır. (Acı verici) kod değiştirme ve yeniden düzenleme gibi risklere aşina değilim, bu yüzden sorum benzer yapılandırılmış kod ile başkalarının deneyimlerini bilmek istemek için kaynar.
Kötü stil değişikliklerin yapılmasını haklı çıkarıyor mu? Benzer bir durumdan kötü bir şekilde yakılan var mı? Bu kötü deneyimin ayrıntılarını paylaşmak ister misiniz? Aşırı tepki gösterdiğim için bırak ve stil o kadar da kötü değil mi? Bir şeyleri toplamanın bakım avantajlarından faydalanabiliyor musunuz?
finally
C # 'da ne olduğunu biliyorum ). C ++ eşdeğeri nedir? Ne düşünüyorum sonra kod catch
olduğunu ve C # sonra kod için aynı geçerlidir finally
.
Environment.FailFast()
; yakalanmamış bir istisnanız varsa yürütülmeyebilir. Ve finally
elle yinelediğiniz bir yineleyici bloğunuz varsa daha da karmaşıklaşır .
finally
. Tüm iyi kullanımlar RAII / RRID / SBRM (hangi kısaltmayı isterseniz) kapsamındadır.