Bugünkü yazımız statik kod analizi yapan sonarqube alt
yapısına bağlanan ve benzer kuralları işleten bir araç olan SonarLint'i
inceleyeceğiz. SonarLint microsoft visual studio üzerine kurulan bir extention olup bunu rahatlıkla
microsoft visual studio içinde kurabilir veya
buradan da indirip kurabilirsiniz. Resmi sitesinde C# ile ilgili yaklaşık
390 kural görünmektedir, fakat biz sadece kendi karşılaştıklarımızı ele
alacağız. Bunların bazılarını çözmek biraz daha kolay iken bazılarını çözmek ise biraz
vakit alabiliyor. Tüm kurallar için ise
buraya göz
gezdirebilirsiniz. Karşılaştığım kuralları hangi kritere göre sıralamak
konusunda çok düşündüm. En sonunda hata kodlarını küçükten büyüğe sıralamaya
karar verdim. Bu yazıyı güncelle tutmaya özen gösterip karşılaştığımız hataları eklemeye devam edeceğiz.
C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
21 Haziran 2020 Pazar
Sonarlint ile Refactoring
S.A. Arkadaşlar,
Etiketler:
C#,
clean code,
csharp,
performance,
sonarqube,
temiz kod
23 Mayıs 2020 Cumartesi
C# 9.0 ile Gelen Yenilikler
S.A. Arkadaşlar,
Bugün C#'in en son yayımlanan sürümü olan 9.0 sürümünü ele alacağız. Yapılan yenilikler nelerdir, neler değişmiş onları anlatmaya çalışacağız. Daha önceki sürümlerde olduğu gibi Microsoft yine çok güzel özellikler geliştirmiş, fakat bu sefer veri şekillerini kısaltmak(okunurluk) ve veri şekillerinin değişmezliğine(performans) odaklanmışlar. Bunun yanı sıra fonksiyonel programlamayı anımsatan değişiklikler de var. Tüm bunları elimizden geldiğince incelemeye çalıştık.
Etiketler:
?:,
??,
C#,
Convariant Returns,
data,
data keyword,
init,
init keyword,
keyword,
records,
target-typed,
top-level,
value-based,
with
23 Nisan 2020 Perşembe
Type-Safe Configuration (IOptions - IOptionsMonitor - .Net Core)
S.A. Arkadaşlar,
Bugün .NET Core ile uğraşanların genelde bildiği ve kullandığı bir konuyu ele alacağız. Bu konu her ne kadar bilinse de, birlikte bir miktar daha ileriye taşımaya çalışalım.
Bazı değişken bilgilerini genellikle .config dosyası içinde tutmaktayız. Bu dosyayı çoğu zaman development ortamı için ayrı, test ortamında ayrı ve production ortamlarında ayrı tutmaktayız. Tabi ki bu örnekler çoğaltılabilir. Asıl aktarmak isteğim mevzu, config değerleri string olarak tutulduğundan dolayı hataya açık bir durum oluşmaktadır zaman zaman. Gelin hep birlikte bunu type-safe bir yapıya taşıyalım.
Bugün .NET Core ile uğraşanların genelde bildiği ve kullandığı bir konuyu ele alacağız. Bu konu her ne kadar bilinse de, birlikte bir miktar daha ileriye taşımaya çalışalım.
Bazı değişken bilgilerini genellikle .config dosyası içinde tutmaktayız. Bu dosyayı çoğu zaman development ortamı için ayrı, test ortamında ayrı ve production ortamlarında ayrı tutmaktayız. Tabi ki bu örnekler çoğaltılabilir. Asıl aktarmak isteğim mevzu, config değerleri string olarak tutulduğundan dolayı hataya açık bir durum oluşmaktadır zaman zaman. Gelin hep birlikte bunu type-safe bir yapıya taşıyalım.
Etiketler:
.net core,
C#,
IMonitorOptions,
IOptions,
mock,
programming,
unit test
16 Nisan 2020 Perşembe
Health Check and Monitoring - .Net Core ( Servislerin Durumunu Kontrol Etme ve Görüntüleme)
S.A. Arkadaşlar,
Bugün .net core 2.2 ile gelen ve 3.1 ile olgunlaşan bir kavramı ele alacağız. Dağıtık bir yapınız var ve bunun içinde onlarca belki yüzlerce servis bulunmaktadır. Her bir servis kendi içinde çalışacağı için de hepsini kontrol etmek zor belki imkansız olacaktır. İşte bu ihtiyaçtan meydana çıkmış ve tüm servislerin durumlarını kontrol eden yapıya Health Check denmektedir. Bu yapıyı kullanıcı ara yüzü ile birlikte ayağa kaldıracağız. Hazırsak başlayalım.
Bugün .net core 2.2 ile gelen ve 3.1 ile olgunlaşan bir kavramı ele alacağız. Dağıtık bir yapınız var ve bunun içinde onlarca belki yüzlerce servis bulunmaktadır. Her bir servis kendi içinde çalışacağı için de hepsini kontrol etmek zor belki imkansız olacaktır. İşte bu ihtiyaçtan meydana çıkmış ve tüm servislerin durumlarını kontrol eden yapıya Health Check denmektedir. Bu yapıyı kullanıcı ara yüzü ile birlikte ayağa kaldıracağız. Hazırsak başlayalım.
11 Nisan 2020 Cumartesi
Birim(Unit) Test ile Veri Kümeleri - xUnit (Inline - Member - Class Data)
S.A. Arkadaşlar,
Bugün unit/xunit (birim) test ile bir konuya odaklanmak istedim. Bu konunun amacı, birim test nedir? Neden yazılır? Faydaları nelerdir? vb. gibi bilgiler olmayacak. Odaklanacağımız konu birim testler de çoğu zaman olması gereken girdi değerleri üzerine yoğunlaşacağız. Bazen bir kereye mahsus bir sabit değer, bazen de birden fazla ve farklı değerler girdi ihtiyacı olabilmektedir. Şimdi adım adım olması gerekene doğru ilerlemeye çalışalım, buyurun birlikte ilerleyelim..
Bugün unit/xunit (birim) test ile bir konuya odaklanmak istedim. Bu konunun amacı, birim test nedir? Neden yazılır? Faydaları nelerdir? vb. gibi bilgiler olmayacak. Odaklanacağımız konu birim testler de çoğu zaman olması gereken girdi değerleri üzerine yoğunlaşacağız. Bazen bir kereye mahsus bir sabit değer, bazen de birden fazla ve farklı değerler girdi ihtiyacı olabilmektedir. Şimdi adım adım olması gerekene doğru ilerlemeye çalışalım, buyurun birlikte ilerleyelim..
Etiketler:
C#,
ClassData,
csharp,
Fact,
InlineData,
MemberData,
programming,
Theory,
unit test,
xunit
6 Şubat 2020 Perşembe
Operatörlere Aşırı Yükleme (implicit - explicit)
S.A. Arkadaşlar,
Bugün operatörlere aşırı yükleme işlemine göz atacağız. Metodlara aşırı yükleme ile benzer mantıkta olsa da farklı işlemlerdir. Genel kullanımı +, - gibi operatörlere aşırı yükleme yapılır. Normal koşullarda 2 nesne toplanamaz, fakat biz operatörlere aşırı yükleme yaparak artık bu operatörleri istediğimiz gibi kullanabiliyoruz. Burada implicit and explicit diye 2 tür dönüştürme vardır. Implicit aritmetik işlemleri içerir ve veri kaybı olmadığından cast işlemi de gerektirmez. Explicit ise cast işlemi gerektirir, veri kaybı olma ihtimali de vardır.
Bugün operatörlere aşırı yükleme işlemine göz atacağız. Metodlara aşırı yükleme ile benzer mantıkta olsa da farklı işlemlerdir. Genel kullanımı +, - gibi operatörlere aşırı yükleme yapılır. Normal koşullarda 2 nesne toplanamaz, fakat biz operatörlere aşırı yükleme yaparak artık bu operatörleri istediğimiz gibi kullanabiliyoruz. Burada implicit and explicit diye 2 tür dönüştürme vardır. Implicit aritmetik işlemleri içerir ve veri kaybı olmadığından cast işlemi de gerektirmez. Explicit ise cast işlemi gerektirir, veri kaybı olma ihtimali de vardır.
17 Ekim 2019 Perşembe
Birbirine Benzeyen 3 İfade: const, static ve readonly
S.a. Arkadaşlar,
Bugün herkesin bildiği ama aslında aralarında farklar bulunan 3 keywordü inceleyeceğiz: const, readonly ve static. Bu yazının çıkış noktası mülakatta bana sorulan readonly ile const arasındaki fark nedir sorusuydu. Buna ek olarak bugün const olarak tanımladığım değişkeni değiştirmek istediğimde (.net core - vs - debug mode) kodu tekrardan derlememi istedi, değişkeni daha sonra readonly yaptığımda buna gerek kalmadığını gördüm. Böylece bu konuda güzel bir toparlama yazısı yazmak istedim. Hazırsak başlayalım.
Bugün herkesin bildiği ama aslında aralarında farklar bulunan 3 keywordü inceleyeceğiz: const, readonly ve static. Bu yazının çıkış noktası mülakatta bana sorulan readonly ile const arasındaki fark nedir sorusuydu. Buna ek olarak bugün const olarak tanımladığım değişkeni değiştirmek istediğimde (.net core - vs - debug mode) kodu tekrardan derlememi istedi, değişkeni daha sonra readonly yaptığımda buna gerek kalmadığını gördüm. Böylece bu konuda güzel bir toparlama yazısı yazmak istedim. Hazırsak başlayalım.
8 Eylül 2019 Pazar
Tip Kontrolü (Type Checking)
S.a. Arkadaşlar,
Uzun süren bir aradan sonra nihayet gelebildim. İnsan yazmaya alışınca yazmadan edemiyor artık. Ben de not aldığım konulardan biri olan tip kontrolünü ( Type Checking) ele almaya çalışacağım. typeof, GetType, is ve as kavramların inceleyeceğiz. Şahsım adına kullandığım yapıların sadece kullanımını değil; nerelerde ve ne zaman kullanılır, alternatifleri nelerdir gibi soruların cevaplarını bulmaya çalışıyorum. Ortaya çıkan şeyleri de elimden geldiğince paylaşmak istiyorum. Bu da bu şekilde orta çıkan bir yazı oldu. Bu kısa girişten sonra yazıya başlayalım.
Uzun süren bir aradan sonra nihayet gelebildim. İnsan yazmaya alışınca yazmadan edemiyor artık. Ben de not aldığım konulardan biri olan tip kontrolünü ( Type Checking) ele almaya çalışacağım. typeof, GetType, is ve as kavramların inceleyeceğiz. Şahsım adına kullandığım yapıların sadece kullanımını değil; nerelerde ve ne zaman kullanılır, alternatifleri nelerdir gibi soruların cevaplarını bulmaya çalışıyorum. Ortaya çıkan şeyleri de elimden geldiğince paylaşmak istiyorum. Bu da bu şekilde orta çıkan bir yazı oldu. Bu kısa girişten sonra yazıya başlayalım.
Etiketler:
as,
C#,
GetType,
is,
keyword,
OOP,
programming,
Type Checking,
typeof
26 Kasım 2018 Pazartesi
Mvc'de Filtrleme İşlemleri - Attribute Kullanımı - AOP
S.a. Arkadaşlar,
Bugünkü yazımız üye yetki kontrolü ile ilgili olacaktır. Bir sisteminiz var ve bu burada bulunan sayfalara herkes giriş yaptığında girebilecek mi, yoksa bazı sayfalara sadece belirlediğiniz kullanıcı tipleri mi erişebilecektir. Eğer böyle bir sisteminiz varsa doğru yere geldiniz. Burada her metodu ayrı ayrı kod yazıp kontrol etmeyeceğiz. Burada devreye attribute'leri devreye sokacağız.
Bugünkü yazımız üye yetki kontrolü ile ilgili olacaktır. Bir sisteminiz var ve bu burada bulunan sayfalara herkes giriş yaptığında girebilecek mi, yoksa bazı sayfalara sadece belirlediğiniz kullanıcı tipleri mi erişebilecektir. Eğer böyle bir sisteminiz varsa doğru yere geldiniz. Burada her metodu ayrı ayrı kod yazıp kontrol etmeyeceğiz. Burada devreye attribute'leri devreye sokacağız.
11 Ekim 2018 Perşembe
MVC Sürecinde Karşılaştığım Problemler
S.a. Arkadaşlar,
Bir süredir üzerinde çalıştığım projede kullandığımız ASP MVC konusunda yaşadığım kendimce ciddi problemleri ve onları nasıl hangi kaynaklardan çözdüğümü kısaca bir toparlamak istedim. Zaman zaman çok zorlandığım anlar da oldu. Hem lazım olursa tekrardan dönüp bakmak açısından hem de belki başkalarına yardımcı olur düşüncesiyle bu yazıyı yazıyorum.
Bir süredir üzerinde çalıştığım projede kullandığımız ASP MVC konusunda yaşadığım kendimce ciddi problemleri ve onları nasıl hangi kaynaklardan çözdüğümü kısaca bir toparlamak istedim. Zaman zaman çok zorlandığım anlar da oldu. Hem lazım olursa tekrardan dönüp bakmak açısından hem de belki başkalarına yardımcı olur düşüncesiyle bu yazıyı yazıyorum.
Etiketler:
action result,
ASP,
bug,
C#,
Entity Framework,
exception,
extension method,
json result,
linq,
MVC,
programming
18 Eylül 2018 Salı
Canlı Destek Entegrasyonu (MVC)
S.a. Arkadaşlar,
Üzerinde çalıştığım proje için canlı destek ihtiyacı doğdu. Bu yüzden ben de bir ön araştırma yaptım. İlk başlarda farklı bir kaç araç buldum. Bunlardan bazıları tawk, ondestek, zopim oldu. Bu araçların 3ü de güzel olan araçlar fakat uğraşılması gerekebilir. Biraz daha araştırdığımda bu iş için SingnalR diye gerçek zamanlı uygulamalar geliştirmek için kullanılan bir framework olduğunu öğrendim. Araştırmaya devam ettiğimde Github'dan bununla ilgili güzel bir proje buldum ve o proje üzerinden devam etmek istiyorum.
Üzerinde çalıştığım proje için canlı destek ihtiyacı doğdu. Bu yüzden ben de bir ön araştırma yaptım. İlk başlarda farklı bir kaç araç buldum. Bunlardan bazıları tawk, ondestek, zopim oldu. Bu araçların 3ü de güzel olan araçlar fakat uğraşılması gerekebilir. Biraz daha araştırdığımda bu iş için SingnalR diye gerçek zamanlı uygulamalar geliştirmek için kullanılan bir framework olduğunu öğrendim. Araştırmaya devam ettiğimde Github'dan bununla ilgili güzel bir proje buldum ve o proje üzerinden devam etmek istiyorum.
Etiketler:
asp mvc,
C#,
canlı destek,
live,
live support,
MVC,
Real time,
SignalR,
support
6 Ağustos 2018 Pazartesi
İngilizce Kelime Getirme - Oxford API (Dictionary, not Translation)
S.a. Arkadaşlar,
Geçenlerde sözlükle ilgili bir api arıyordum. Sürekli translate tarzı apiler ve componentlerle karşılaştım, fakat benim aradığım kendi dilinde çeviri yapan , bildiğimiz ilk okullarda kelime baktığımız sözlüktü. Önce bunun Türkçe için olanını aradım, onla ilgili tam bir sonuca varamadım, ama daha sonra tekrar bakacağım, bunla ilgili yardımlarını beklerim, ama yabancı diller için bir çok api denedim, en sonunda oxford apide karar kıldım. Onun da bir sürü dil seçeneği vardı ama C# yoktu. Bugünkü konumuz bununla ilgili.
Geçenlerde sözlükle ilgili bir api arıyordum. Sürekli translate tarzı apiler ve componentlerle karşılaştım, fakat benim aradığım kendi dilinde çeviri yapan , bildiğimiz ilk okullarda kelime baktığımız sözlüktü. Önce bunun Türkçe için olanını aradım, onla ilgili tam bir sonuca varamadım, ama daha sonra tekrar bakacağım, bunla ilgili yardımlarını beklerim, ama yabancı diller için bir çok api denedim, en sonunda oxford apide karar kıldım. Onun da bir sürü dil seçeneği vardı ama C# yoktu. Bugünkü konumuz bununla ilgili.
7 Mayıs 2018 Pazartesi
Delegation Dictionary ile Sınıfları Koşulsuz Çağırma
S.a. Arkadaşlar,
Bugünkü yazacağımız konu, kodun düzenlenmesiyle ilgilidir. Farklı sınıfları çağırırken if veya switch case yapısı yerine nasıl bir yöntem izleyebiliriz ona bakacağız. Öncelikle switch case yapısını inceleyeceğiz, daha sonra reflection ile düzenleme yapacağız, en son da delegate dictionary ile kodu düzenleyeceğiz. Aradaki farkı gördükten sonra istediğiniz yapıyı kullanmak size kalmış, fakat sanki tercihiniz belli gibi olacak. Hazırsak başlayalım.
Bugünkü yazacağımız konu, kodun düzenlenmesiyle ilgilidir. Farklı sınıfları çağırırken if veya switch case yapısı yerine nasıl bir yöntem izleyebiliriz ona bakacağız. Öncelikle switch case yapısını inceleyeceğiz, daha sonra reflection ile düzenleme yapacağız, en son da delegate dictionary ile kodu düzenleyeceğiz. Aradaki farkı gördükten sonra istediğiniz yapıyı kullanmak size kalmış, fakat sanki tercihiniz belli gibi olacak. Hazırsak başlayalım.
25 Mart 2018 Pazar
Null-coalescing (? ?), Ternary (? :), Monadic Null-Checking (?)
S.a. Arkadaşlar,
Bugün yazacağımız konu soru işaretinin(?) ne işe yaradığı ile ilgili olacaktır. Aslında basitçe bir if-else görevi görmektedir, fakat bununla birlikte bazı işlerde gayet kısa işlemler de yaptırıyor bize. Biz bugün ? , ? : , ?? işleçlerini ele almayı deneyeceğiz. Şimdi başlayalım.
Bugün yazacağımız konu soru işaretinin(?) ne işe yaradığı ile ilgili olacaktır. Aslında basitçe bir if-else görevi görmektedir, fakat bununla birlikte bazı işlerde gayet kısa işlemler de yaptırıyor bize. Biz bugün ? , ? : , ?? işleçlerini ele almayı deneyeceğiz. Şimdi başlayalım.
Etiketler:
?:,
??,
C#,
condition,
if else,
Monadic null checking,
Null-coalescing,
programming,
Ternary
19 Mart 2018 Pazartesi
SFTP ile Dosya Gönderme
S.a. Arkadaşlar,
Bugün C# ile stfp ile dosya göndermeyi işleyeceğiz. Daha önce Java'da yazmış olduğum bir blog yazım vardı konuyla ilgili, fakat şuan C# ile örnek yazacağız. Java ile yazdığımız ftp ile ilgiliyken örneğimiz güvenli ftp manasındaki sftp olacak. Burada dahili kütüphane yeterli gelmiyor, bu nedenle nuget'ten ssh.net indirdik. Eğer siz de hazırsanız başlayabiliriz :)
Bugün C# ile stfp ile dosya göndermeyi işleyeceğiz. Daha önce Java'da yazmış olduğum bir blog yazım vardı konuyla ilgili, fakat şuan C# ile örnek yazacağız. Java ile yazdığımız ftp ile ilgiliyken örneğimiz güvenli ftp manasındaki sftp olacak. Burada dahili kütüphane yeterli gelmiyor, bu nedenle nuget'ten ssh.net indirdik. Eğer siz de hazırsanız başlayabiliriz :)
11 Mart 2018 Pazar
App.config Dosyasından Okuma (Github Projesi)
S.a. Arkadaşlar,
Bugün C# ile app.config dosyasından okuma yapacağız. Daha sonra okuduğumuz verileri kullanacağımız bir projemiz var. Onu kısaca açıklayacağız. Bu projeyi github üzerinden yayımladık, daha sonra buraya eklemeler yapmayı düşünüyoruz. Şimdi başlayalım.
Bugün C# ile app.config dosyasından okuma yapacağız. Daha sonra okuduğumuz verileri kullanacağımız bir projemiz var. Onu kısaca açıklayacağız. Bu projeyi github üzerinden yayımladık, daha sonra buraya eklemeler yapmayı düşünüyoruz. Şimdi başlayalım.
11 Şubat 2018 Pazar
Visual Studio ile Github Bağlantısı
S.a. Arkadaşlar,
Bugün Visiual Studio 15 ile oluşturduğumuz projeyi githuba yüklemeyi yapacağız. Normal koşullarda studio içinde github eklentisi gelmiyor. Bunu kendimiz manuel olarak eklememiz gerekiyor. Nuget içerisine baktım fakat orada yoktu. Küçük bir araştırma ile .vsix dosyasını indirdim. Siz de buradan indirebilirsiniz. Daha sonra ileri ileri deyip işlemi tamamlayabilirsiniz. Bu arada studio kapalı olursa iyi olur. Şimdi kurulumu yaptıktan sonra artık studioyu açabiliriz.
Bugün Visiual Studio 15 ile oluşturduğumuz projeyi githuba yüklemeyi yapacağız. Normal koşullarda studio içinde github eklentisi gelmiyor. Bunu kendimiz manuel olarak eklememiz gerekiyor. Nuget içerisine baktım fakat orada yoktu. Küçük bir araştırma ile .vsix dosyasını indirdim. Siz de buradan indirebilirsiniz. Daha sonra ileri ileri deyip işlemi tamamlayabilirsiniz. Bu arada studio kapalı olursa iyi olur. Şimdi kurulumu yaptıktan sonra artık studioyu açabiliriz.
9 Ocak 2018 Salı
Foreach ve Linq Kullanımı
S.a. Arkadaşlar,
Bir önceki yazıda belirttiğim gibi bu aralar kodun kalitesi ile ilgili ufak tefek şeyler okumaya çalışıyorum. foreach kullanımın ile ilgili örneklere göz atarken karşıma burada sorulan bir soru çıktı. Soru şöyle :
Bir önceki yazıda belirttiğim gibi bu aralar kodun kalitesi ile ilgili ufak tefek şeyler okumaya çalışıyorum. foreach kullanımın ile ilgili örneklere göz atarken karşıma burada sorulan bir soru çıktı. Soru şöyle :
foreach (var item in items)
{
if (item.Field != null)
continue;
if (item.State != ItemStates.Deleted)
continue;
//kod
}
foreach (var item in items.Where(i => i.Field != null && i.State != ItemStates.Deleted))
{
//kod
}
Kaydol:
Kayıtlar (Atom)