Altbilgi içeriğine atla
Iron Academy Logo
C# Uygulaması
C# Uygulaması

Diğer Kategoriler

İstisna Gösterimini Formatlama - Spectre Console Serisi

Tim Corey
8m 51s

.NET konsol uygulamaları oluştururken, geliştiricilere ve kullanıcılara mantıklı gelecek bir şekilde istisnaları ele almanız gerekebilir. Düz konsol çıktısı, özellikle yığın izleri ve yansıma yoğun kütüphanelerle uğraşırken, istisnaları uzun, okunamayan veri dizileri gibi gösterebilir. "Istisna Görüntüsünü Biçimlendirme - Spectre Console Serisi"" videosunda, Tim Corey, Spectre.Console kütüphanesini kullanarak istisnaların okunmasının, çözümlemenin ve anlaşılmasının nasıl daha kolay hale getirileceğini anlatıyor.

Bu makalede, Tim'in istisnaları nasıl ele aldığına, Spectre.Console'dan komut ve yöntemleri nasıl kullandığına ve istisna görüntüsüne farklı ayarlar ve stiller nasıl uyguladığına bir göz atacağız.

Giriş: İstisnalar Neden Biçimlendirilmeli?

Videonun başında, Tim Corey Spectre.Console'u tanıtarak, geliştiricilerin sıradan konsol uygulamalarını görsel olarak çekici, bilgi verici uygulamalara dönüştürmelerine yardımcı olan bir kütüphane olarak tanımlıyor. Bu özel derste, istisnaları görüntülemenin daha açık ve okunabilir olmasını sağlayan bir şekilde ele alıyor.

Tim, varsayılan olarak, bir konsol uygulamasında bir istisna atıldığında, Console.WriteLine(ex) çıktınızın sadece bir metin duvarı olduğunu açıklıyor. Kapsadığı yollar, yığın izleri ve tür adları — hepsi kesintisiz bir dize olarak. Fonksiyonel, ama dostça değil.

Göstermek için, Tim küçük bir örnek oluşturur:

try
{
    throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}
try
{
    throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

Terminalde bu komutu çalıştırır ve beklenildiği gibi çıktı karışıktır. Her şey bir araya geliyor. Tim, önemli olanın ne olduğunu seçmenin zor olduğunu belirtiyor — mesaj mı, yöntem mi yoksa dosya konumu mu. Bu nedenle, Spectre.Console istisna biçimlendirmesini kullanarak bunu düzeltmeye başlar.

AnsiConsole.WriteException Kullanımı – İlk Adım

Görüntüyü iyileştirmek için Tim satırı değiştirir:

Console.WriteLine(ex);
Console.WriteLine(ex);

bir Spectre komutuyla:

AnsiConsole.WriteException(ex);
AnsiConsole.WriteException(ex);

Bu tek yöntem çağrısı her şeyi değiştirir.

Uygulamayı tekrar çalıştırdığında, terminaldeki çıktı artık renklendirilmiş durumda. Mesaj net bir şekilde görünür ve yığın izleme bölümleri farklı bir şekilde stillendirilmiştir. Metin daha kolay ayrıştırılır ve anahtar değerler öne çıkar.

Tim, AnsiConsole sınıfının, Spectre.Console'da stilize edilmiş çıktıyı render etmek için merkezi erişim noktası olarak görev yaptığını belirtir. WriteException() metodu, özellikle istisnaları ele almak ve onları sizin için otomatik olarak biçimlendirmek amacıyla tasarlanmıştır.

O, "Bu zaten bir adım yukarı." diyor. Konsol artık mesajı, dosya yolunu ve yöntem adını vurguluyor, bu da bir bakışta okumayı çok daha kolay hale getiriyor.

ExceptionFormats ile Biçimlendirme Seçenekleri Ekleme

Temel örneği gösterdikten sonra, Tim istisnanın hangi bölümlerinin gösterileceğini ve nasıl kısaltılacağını kontrol etmek için formatlama parametreleri ekleyerek bir adım daha ileri gider.

ExceptionFormats numaralandırmasını tanıtır ve bu numaralandırma, ShortenPaths, ShortenTypes, ShortenMethods ve ShowLinks gibi çeşitli seçenekler sunar. Bunları tek tek kullanabilir veya pipe (|) karakteri.

Tim aşağıdaki kodu yazar:

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);

Bu komutu çalıştırdığında, konsol çıktısı daha kısa ve daha öz olur.

Şunları açıklıyor:

  • Yollar kısaltılır – tam dizin yolu yerine, sadece Program.cs gibi dosya adını gösterir.

  • Türler kısaltılır – System.IO.InvalidDataException yerine, sadece InvalidDataException görüyorsunuz.

  • Metotlar kısaltılmıştır – uzun jenerik metot adları, açıklık sağlamak için kısaltılmıştır.

Bu örnek, Spectre.Console'un istisna biçimlendirme seçeneklerinin, gerekli bilgileri kaybetmeden sonucu nasıl daha kompakt hale getirdiğini gösteriyor.

Tim, ilk versiyonun (tam yol ve ad alanları) "çoğunlukla gürültü" içerdiğini vurgularken, bu biçimlendirilmiş versiyonun problemi hızlıca görmek istediğinizde daha anlamlı olduğunu belirtiyor.

Daha Fazla Kontrol İçin Birden Fazla Formatın Birleştirilmesi

Tim orada durmuyor. Çoklu biçimlendirme ayarlarını boru operatörü kullanarak nasıl birleştirebileceğinizi gösterir:

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);

3:54'te, Tim ShowLinks seçeneğini açıklıyor. Bu, Spectre.Console'un uyumlu terminallerde tıklanabilir veya üzerine gelindiğinde tepki veren dosya bağlantılarını işleyebilmesini sağlar. Bu örneğinde, Program.cs dosya adı şimdi altı çizili olarak görünmektedir. Üzerine geldiğinde, terminal tam dosya yolunu içeren bir araç ipucu gösterir.

Bu davranışın, ortamınıza bağlı olduğunu belirtir — tıklanabilir linkleri destekleyen terminallerde (bazı bash veya VS Code terminalleri gibi) daha iyi çalışır.

Formatları birleştirerek, hata çıktınızın ne kadar bilgi göstermesi gerektiğine tam olarak karar verebilirsiniz — belki kısaltılmış yollar ama tam tür adları istiyorsunuz ya da yöntem detaylarını tamamen gizlemek istiyorsunuz. Spectre.Console size bu esnekliği sunar.

ExceptionSettings ile Daha Derine Gitmek

Bu noktada, Tim ExceptionSettings adında yeni bir nesne tanıtır. Bu, istisnaların hem biçimlendirmesini hem de stilini daha gelişmiş bir şekilde özelleştirmenizi sağlar.

Tek bir format değeri geçmek yerine, bir ayar nesnesinin tamamını geçebileceğinizi açıklar:

var settings = new ExceptionSettings
{
    Format = ExceptionFormats.ShortenEverything,
    Style = new ExceptionStyle
    {
        Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
    }
};
AnsiConsole.WriteException(ex, settings);
var settings = new ExceptionSettings
{
    Format = ExceptionFormats.ShortenEverything,
    Style = new ExceptionStyle
    {
        Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
    }
};
AnsiConsole.WriteException(ex, settings);

Burada, Tim iki özelliği yapılandırır:

  • Biçim – istisna bilgilerinin nasıl kısaltılacağını belirtir.

  • Stil – farklı istisna öğelerinin (yöntem adları, yollar veya mesajlar gibi) nasıl görünmesi gerektiğini tanımlar.

Spectre.Console; ön plan renkleri, arka plan renkleri ve süslemeler (alt çizgi, yanıp sönme, kalın yazı vb. gibi) gibi zengin bir stil seçenekleri seti sunar.

Tim, yalnızca mesajı değil, istisna görüntüsünün diğer bölümlerini de, örneğin parametre adları, yöntem çağrıları veya parantezler gibi kısımları da stilize edebileceğinizi belirtir. Bu, CLI'deki istisna çıktınızın nasıl görüneceği üzerinde çok hassas kontrol sağlar.

Hata Mesajını Stilize Etme

Stil uygulamalarının nasıl çalıştığını göstermek için, Tim istisnanın mesaj kısmına özel bir stil uygular. Mesajın rengini kırmızıya ayarlar ve daha da dikkat çekici olması için yavaş bir kırpma efekti ekler:

Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)

Uygulamayı çalıştırdığında, terminal penceresinin içinde kırmızı renkte yanıp sönen "Hey, veriyi bana vermeyi unuttun." mesajı görünür.

Tim, bunun istisna çıktısındaki en önemli bilgiyi — mesajın kendisini — vurgulamakta yardımcı olduğunu belirtir. Metnin geri kalanı (dosya adı ve satır numarası gibi) aşağıda mevcut olmaya devam eder, ancak gözleriniz hemen neyin yanlış gittiğine odaklanır.

O, "Gerçekten dikkatinizi en önemli şeye, yani mesajın kendisine çekiyor," diye açıklıyor. Ve sonra, bunun Program.cs'de ana bölümde 256. satırda olduğunu anlayabilirler.

Bu, Spectre.Console'un yalnızca verileri okunabilir kılmakla kalmayıp, aynı zamanda sonuçları daha hızlı yorumlamanıza yardımcı olmak için vurgu ve görsel hiyerarşi de eklediğini gösterir.

Spectre Console Serisinin Kapanışı

Video sona ererken, Tim bunun Spectre.Console serisinin son bölümü olduğunu — en azından şimdilik — belirtiyor. İzleyicileri geri bildirim veya daha fazla konu önerisi bırakmaları için suggestions.iamtimcorey.com adresine yönlendiriyor.

Tüm dizi boyunca bir dizi Spectre özelliğini ele aldıklarını belirtiyor: tabloları işleme, CLI komutları ve argümanlarıyla çalışma, yapılandırılmış metinlerle çalışma ve şimdi istisnaları formatlama.

Tim, bu dersin geliştiricilere istisnaları düzgün bir şekilde ele almak için araçlar sunduğunu; netlik ve görsel geri bildirim sağladığını ve tüm bunların basit bir .NET konsol uygulaması içinde olduğunu söyleyerek bitiriyor.

Son Düşünceler

Bu rehberde, Tim Corey Spectre.Console istisnalarını nasıl daha okunabilir, bilgilendirici ve görsel olarak etkileyici hale getireceğini net bir şekilde göstermektedir. Geliştiriciler, sadece birkaç satır kod kullanarak şunları yapabilir:

İstisnaları daha etkili bir şekilde yönetin.

  • Konsol çıktısını, kısaltılmış yollar ve daha temiz metin ile biçimlendirin.

  • ExceptionSettings nesnelerini kullanarak format ve stili ince ayarlayın.

  • Önemli bilgileri vurgulamak için renk ve süsleme ekleyin.

  • Dosya yollarını tıklanabilir veya üzerine gelindiğinde görülebilir bağlantılar olarak gösterin.

Bu yaklaşım, hataları düzeltmeyi iyileştirmekle kalmaz, aynı zamanda CLI tabanlı uygulamaların da düzgün ve profesyonel görünmesini sağlar. Güçlü yöntemler, AnsiConsole.WriteException() gibi özelleştirilebilir ayarlar ve zengin stil seçeneklerini birleştirerek, geliştiriciler,.NET konsol uygulamaları oluşturabilir ve anlamlı, iyi yapılandırılmış ve anlaşılması kolay istisna çıktıları sağlar — tam olarak Tim Corey'nin mükemmel örneğinde gösterdiği gibi.

Hero Worlddot related to İstisna Gösterimini Formatlama - Spectre Console Serisi
Hero Affiliate related to İstisna Gösterimini Formatlama - Spectre Console Serisi

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara