Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
9 yazı bulundu
C# String API'si Ayrıntılı: Arama, Bölme, Birleştirme, Kırpma ve Değiştirme Method'ları
Backend SERİ 01

C# String API'si Ayrıntılı: Arama, Bölme, Birleştirme, Kırpma ve Değiştirme Method'ları

String'de string arayan IndexOf, StartsWith ve EndsWith varsayılan olarak culture'a duyarlıdır; char arayanlar, Contains, Replace ve Split ise ordinal çalışır, bu yüzden makine verisinde her zaman StringComparison.Ordinal vermek gerekir. Bookstore'da slug üretme ve ISBN normalizasyonu üzerinden Split seçeneklerini, Join ile += farkını, AsSpan'i, SearchValues ve CompositeFormat'ı ve .NET 11'in Rune overload'larını gerçek çıktılarla gösteriyoruz.

15 Kas 2026 17 dk 5
C#'ta Format String'leri: Standart ve Custom Sayı/Tarih Formatları, Alignment ve Composite Formatting
Backend SERİ 02

C#'ta Format String'leri: Standart ve Custom Sayı/Tarih Formatları, Alignment ve Composite Formatting

Format string'i değeri culture'ın kurallarıyla string'e çevirir: N, C, d ve D culture'a göre değişir, o, s ve InvariantCulture ise makineye giden çıktıyı sabit tutar. Bookstore'un fatura satırı üzerinden standart ve custom sayı/tarih formatlarını, alignment'ı, para birimini veriden almayı, ICU'da N'nin 3 ondalık yazmasını ve Isbn tipini ISpanFormattable ile yazdırılabilir yapmayı gerçek çıktılarla gösteriyoruz.

15 Kas 2026 15 dk 5
.NET'te Globalization: CultureInfo, CurrentCulture/CurrentUICulture, Türkçe I ve Linux'ta ICU
Backend SERİ 03

.NET'te Globalization: CultureInfo, CurrentCulture/CurrentUICulture, Türkçe I ve Linux'ta ICU

.NET'te CurrentCulture format ve karşılaştırmayı, CurrentUICulture arayüz metnini belirler; ikisi de async akışla taşınır ve container'da ICU yoksa invariant mode'a düşer. Bookstore'un katalog sıralaması ve arama kutusu üzerinden Türkçe sıralamayı, ı/İ dönüşümünü, culture'lı dictionary comparer tuzağını, PredefinedCulturesOnly'yi ve chiseled/alpine image'larda tr-TR'nin nasıl kırıldığını gerçek çıktılarla gösteriyoruz.

15 Kas 2026 15 dk 8
Sayılarla Günlük İşler: Math, Yuvarlama Modları, Random.Shared, Guid v4/v7 ve BigInteger
Backend SERİ 04

Sayılarla Günlük İşler: Math, Yuvarlama Modları, Random.Shared, Guid v4/v7 ve BigInteger

Math.Round varsayılan olarak çifte yuvarlar (2,5 → 2), decimal format'ları ise sıfırdan uzağa; para için modu açıkça verip önce yuvarlamak, sonra format'lamak gerekir. Bookstore'un kampanya indirimi üzerinden MidpointRounding modlarını, double ile para hatasını ve .NET 11'deki decimal dönüşüm değişikliğini, Random.Shared ile thread güvenliğini, Guid v7'nin sıralama davranışını ve BigInteger'ı gerçek çıktılarla gösteriyoruz.

15 Kas 2026 16 dk 9
Encoding, Base64, Hex ve URI: UTF-8, BOM, Windows-1254, Base64Url, Uri ve URL Encoding
Backend SERİ 05

Encoding, Base64, Hex ve URI: UTF-8, BOM, Windows-1254, Base64Url, Uri ve URL Encoding

String ile byte arasındaki her geçişte encoding sözleşmenin parçasıdır: yanlış encoding Türkçe harfleri sessizce bozar, BOM CSV başlığına görünmez bir karakter ekler, Base64 ise şifreleme değildir. Bookstore'un eski muhasebe sisteminden gelen Windows-1254 verisi ve arama linki üzerinden Encoding, CodePagesEncodingProvider, Base64Url, ToHexStringLower, URL encoding API'lerinin farkları, QueryHelpers ve Uri'nin tuzaklarını gerçek çıktılarla gösteriyoruz.

15 Kas 2026 14 dk 9
Tarih ve Saat İleri: TimeZoneInfo, IANA/Windows Id'leri, ParseExact, ISO 8601 ve Tarih Aritmetiği
Backend SERİ 06

Tarih ve Saat İleri: TimeZoneInfo, IANA/Windows Id'leri, ParseExact, ISO 8601 ve Tarih Aritmetiği

Tarih ve saat hatalarının çoğu üç yerden çıkar: yanlış time zone id'si, Kind'ı belirsiz parse edilmiş bir DateTime ve ay sonunu ya da yaz saatini hesaba katmayan aritmetik. Bookstore'un 5 iş günlük teslim kuralı ve Frankfurt deposu üzerinden TimeZoneInfo'nun Windows/IANA id davranışını, ParseExact ve DateTimeStyles'ı, ISO 8601 round-trip'ini, DateOnly/TimeOnly JSON'unu ve TimeProvider ile test edilebilir tarih hesabını gerçek çıktılarla gösteriyoruz.

15 Kas 2026 20 dk 9
Environment, Process ve Stopwatch: Ortam Bilgisi, Dış Komut Çalıştırmak ve Süre Ölçmek
Backend SERİ 07

Environment, Process ve Stopwatch: Ortam Bilgisi, Dış Komut Çalıştırmak ve Süre Ölçmek

Harici bir komutu .NET'ten güvenle çalıştırmanın üç kuralı var: argümanları ArgumentList ile ver, stdout ve stderr'i aynı anda oku, exit code'u ve timeout'u kontrol et. Bookstore'un gece raporu aracı üzerinden Environment ve RuntimeInformation'ı, ortam değişkenlerini, SpecialFolder ve AppContext switch'lerini, Process'teki deadlock ve injection tuzaklarını, .NET 11'in Process.RunAsync API'lerini ve Stopwatch ile süre ölçmeyi gerçek çıktılarla gösteriyoruz.

15 Kas 2026 18 dk 9
Konsol Uygulaması ve CLI Aracı Yazmak: args, System.CommandLine, Exit Code, Renkli Çıktı ve Generic Host
Backend SERİ 08

Konsol Uygulaması ve CLI Aracı Yazmak: args, System.CommandLine, Exit Code, Renkli Çıktı ve Generic Host

İyi bir CLI aracı args'ı elle parse etmez, sonucu stdout'a ve hataları stderr'e yazar, her durum için belgelenmiş bir exit code döner ve Ctrl+C'de yarım dosya bırakmaz. Bookstore'un bookstore-admin import-prices aracını System.CommandLine 3.0 ile yazıyor; yardım ve tab completion'ı, exit code sözleşmesini, SIGINT/SIGTERM ile iptali, NO_COLOR ve .NET 11'in FORCE_COLOR desteğini ve Generic Host ile DI ve logging'i gerçek çıktılarla gösteriyoruz.

15 Kas 2026 15 dk 10
Guard Clause Yardımcıları, Equality Helper'ları ve .NET 8'den 11'e BCL'de Gelenler
Backend SERİ 09

Guard Clause Yardımcıları, Equality Helper'ları ve .NET 8'den 11'e BCL'de Gelenler

ArgumentNullException.ThrowIfNull ve .NET 8'in ArgumentOutOfRangeException helper'ları, CallerArgumentExpression sayesinde parametre adını, değeri ve kuralı tek satırda exception'a yazar. Bookstore'un Order constructor'ını bu helper'lara çeviriyor; kendi guard method'larını, multi-targeting tuzağını, HashCode.Combine ve değişen key'leri, comparer seçimini, Lazy<T>'nin exception saklamasını ve .NET 8'den 11'e BCL'ye gelen API'lerin tablosunu gösteriyoruz.

15 Kas 2026 15 dk 10
Blog Haritası