Ekranda Canlı Veri Değiştirme - Spectre Console Serisi
Spectre.Console, siyah-beyaz komut satırının çok ötesinde güzel konsol uygulamaları oluşturmanıza olanak tanıyan bir .NET kütüphanesidir. Tim Corey, "Verileri Ekranda Canlı Olarak Değiştirme – Spectre Console Serisi" videosunda Spectre Console canlı görüntüleme özelliğini gösteriyor. Bu özellik, konsol uygulamalarınız içinde ekranda ilerleme göstermeye ve verileri gerçek zamanlı olarak güncellemeye olanak tanır.
Bu makalede Tim'in videosunda adım adım ilerleyecek ve her şeyi nasıl açıkladığını ve nasıl yaptığını göstereceğiz.
Canlı Görüntülemeye Giriş
Tim, Spectre.Console'u ve konsol uygulamalarınızı nasıl görsel olarak çekici hale getirdiğini açıklayarak başlıyor. Bu seride, her ders kısa bir örnektir ve kaynak kod açıklamada bağlantılıdır.
Bu dersin odak noktası, ekrandaki mevcut verileri değiştirmek için canlı görüntüleme özelliğini nasıl kullanacağınızı açıklıyor. Tim ayrıca izleyicilere abone olmalarını ve daha fazla eğitim kaynağı için iamtimcorey.com'u ziyaret etmelerini teşvik ediyor.
Veri İçin Yeni Bir Tablo Oluşturma
Tim, başlık, dersler ve saatler sütunlarıyla yeni bir tablo oluşturduğunu gösteriyor. Bu tablo, bir API'den alınan kurs bilgilerinin gösterimi için kullanılacaktır.
Ayrıca ders adı, ders sayısı ve ders süresi için güçlü türde özelliklere sahip CourseInfo adında bir kayıt türü tanıtıyor. Bu, API yapısını yansıtıyor ve metni güçlü bir şekilde tiplenmiş bir şekilde kolayca çıkarmasına olanak tanır.
Tabloda ayakların gösterilmesi özelliği açık durumda, bu nedenle daha sonra toplamlar gösterilebilir. Tim, bu yerleşimin, Spectre'nin desteklediği birçok keyfi widget'tan biri olduğunu ve güzel konsol uygulamaları için sunar.
Canlı Görüntülemeyi Başlatma
Tim, canlı görüntülemeyi başlatmak için AnsiConsole.Live(table).StartAsync(...) yöntemini kullanıyor. Uzun süre çalışan görevleri beklemenize gerek yoksa asenkron olmayan bir Start() işlevinin de olduğunu belirtir.
Kodunu asenkron bir bağlam içinde sarıyor, böylece yeni satırlar geldikçe konsol yenilenebiliyor. Bu, mevcut terminalin ekranı temizlemeden çıktıyı yeniden çizebilme yeteneğini gösterir.
Veri Alma ve İlerlemeyi Gösterme
Canlı bağlam içinde, Tim, örnek API'de 31 kurs listelendiği için, 1'den 31'e bir int indeks kullanarak bir döngü yazıyor. Her indeks için, API verilerini almak üzere bir yardımcı sınıf yöntemi çağırır.
Bu yardımcı, ham JSON dizgisini güçlü bir şekilde tiplenmiş CourseInfo nesnesine dönüştürür. Tim, API'yi toplu olarak yerine, bir seferde bir kez çağırarak ilerleme gösteriminin canlı gerçekleşmesini sağlamak için bunun harika bir örnek olduğuna dikkat çeker — bir konsol ortamında uzun süre çalışan görevler simüle etmek için harika bir örnek.
Tek bir isteğe ihtiyaçı olsaydı, URL'deki /i'yi kaldırabileceğini, ancak "gelmesini göstermek için" birden çok çağrı yaptığını not eder.
Satır Ekleme ve Çıktıyı Güncelleme
Her döndürülen CourseInfo örneği ile Tim, course'un başlığı, ders sayısı ve saat cinsinden uzunluğunu yeni bir satır oluşturmak için table.AddRow(...) çağırır. $ formatı ile string enterpolasyonunu kullanır ve string olmayan değerleri dönüştürmek için gerekli olduğunda .ToString() çağırır.
Bu, her geçişte yeni satırlara sahip tablonun işlenmesini sağlar ve Spectre'nin satırları dinamik olarak nasıl güncelleyebileceğini gösterir. Ayrıca, tür uyumsuzlukları gibi potansiyel sorunları dönüştürümler hakkında net olarak yakalayarak gösterir.
Özel Ayaklar ve İşleyen Toplamlar
Sonraki Tim, sütunlara özel ayaklar nasıl ekleyeceğini gösterir. Şimdiye kadar indirilen kursların sayısını göstermek için table.Columns[0].Footer ayarlar. Bunu ikinci ve üçüncü sütunlar için tekrar eder, ancak bu kez tüm kurslar boyunca ders sayıları ve toplam saatleri toplar.
Bu sayede kullanıcı, toplu ders sayısını ve toplam kaç saat toplandığını bir bakışta görebilir. Bu, Spectre'nin kontrollerini canlı verilerin yanında değer toplamlarını göstermek için kullanmanın gerçek dünya örneğidir.
Tim, penceredeki sabitlemeyi kısa süreliğine kaldırdı; böylece rakamlar arttıkça tam yerleşimi görebilirsiniz. Alt bilgilerin, çerçeveler, işaretleme ve temalar gibi, Spectre'nin sunduğu yerleşik stillerin bir parçası olduğunu açıklar.
Her İşlemden Sonra Bağlamı Yenileme
Tim, canlı görüntülerde "kritik noktayı" vurgular: değişiklik yaptıktan sonra her zaman context.Refresh() çağrılmalıdır. Bu, terminalin çıktınızı yeni verilerle gerçekten yeniden çizmesini sağlar. Bunu yapmadan satırlarınız, alt bilgileriniz veya farklı renkler, canlı oturum sona erene kadar görünmez kalırdı.
Hata Ayıklama ve İstisna Yönetimi
Kodunu ilk çalıştırdığında, Tim Bir Dizin Aralığı Dışı istisnası ile karşılaşır. Hatasını gözden geçirir — sütun indekslerini yanlış sayar (onlar 0,1,2 değil, 0,2,3) — ve düzeltir.
Bu, Spectre.Console'da bile hataları yakalamanız ve indekslerinizin ve argümanlarınızın doğru olduğundan emin olmanız gerektiğine dair nazik bir hatırlatmadır.

Canlı Görüntüyü Eylemde İzleme
Tim, düzeltilmiş kodu çalıştırır ve canlı görüntüyü eylemde gösterir: satırların eklenmesi, toplamların güncellenmesi ve ayakların birleştirilmiş değerleri göstermesi.
"1,652 ders","403,5 saat" ve "31 toplam ders" veri akışı geldikçe görebilirsiniz. Bu, Spectre Console canlı görüntüsünü mevcut terminalinizde bir kontrol paneli gibi hissettiren türde bir eylemdir.

Sadece Ayaklara Odaklanma
Tim, değişikliklerin daha görünür hale gelmesi için, satır ekleme kodunu yorumlar, böylece sadece ayaklar güncellenir. Bu, kaydırma verisi olmadan bile toplamları canlı olarak takip edebileceğinizi gösterir.
Ayrıca, Spectre'nin sayılar büyüdüğünde (örneğin, 9'dan 10'a) otomatik olarak sütun genişliklerini ayarladığını belirtir. Bu, kütüphanenin genişlikler ve format hakkında otomatik algılamasının küçük ama güçlü bir örneğidir.

Tablolardan Öte – Keyfi Widget ve Temalar
Tim, canlı görüntülemenin yalnızca tablolarla sınırlı olmadığını açıklar. Paneller, kullanıcı girdisi istemi veya hatta bir çubuk grafik gibi keyfi widget'lara uygulayabilirsiniz. Metni güncelleyebilir, farklı renkler vurgulayabilir, özel renk kodlu temalar uygulayabilir veya spinnerler ekleyebilirsiniz.
Mavi, yeşil veya gri gibi stilleri temalarınıza uyması için değiştirebileceğinizi ve hatta yuvalanmış yerleşim veya widget'larla çalışabileceğinizi belirtir. Bu esneklik, Spectre'yi diğer ekosistemlerde (bazıları python ile yazılmış) zengin konsol araçlarından "ağır şekilde ilham almış" ancak .NET için uyarlanmış kılmaktadır.
Async vs. Sync Canlı Görüntüleme Başlatma
Tim, neden asenkron sürümü kullandığını açıklar: çünkü API çağrılarını bekliyordu. Güncellemeleriniz asenkron değilse, await olmadan Start() çağırabilirsiniz.
Bu seçim, uzun süre çalışan görevlerle bile yanıt vermeye devam eden güzel konsol uygulamaları oluşturmanıza yardımcı olur.
Sonuç
Tim, videosunda, Spectre Console canlı görüntüsünü nasıl oluşturduğunu, veri güncellemelerini, toplamlarını ve yenilemeleri doğrudan konsolda nasıl yaptığını gösterdi.
Bu, kullanıcı girdisini isteyebilmek, widget ekleyebilmek veya farklı renkler ve özel renk kodlu temalar ile gösterge tabloları oluşturmak için harika bir temel. Spectre kapasitesi, metinleri kolayca çıktısını alma, işaretleme kullanımı ve paneller veya ağaçlar gibi kontroller oluşturma ile birleştirildiğinde, terminalinizde dinamik .NET uygulamaları oluşturabilirsiniz.
Tim'in gösterimi Spectre.Console ile yalnızca gösterge tabloları değil, aynı zamanda canlı güncellenen tablolar, spinnerlar ve diğer widget'lar da oluşturabileceğinizi gösterir. Bu, sıradan bir konsolu gerçek zamanlı, etkileşimli bir araç haline getirmenin pratik bir örneğidir — ve kullanıcılarınıza "mutlu kodlama" demenin hoş bir yolu.

