Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
C# Queue, Stack, LinkedList ve PriorityQueue: Sırayla Çalışan Collection'lar
FIFO için Queue<T>, LIFO ve geri alma için Stack<T>, node'larla O(1) ekleme ve silme için LinkedList<T>, LinkedList ve Dictionary ile küçük bir LRU cache. .NET 6 PriorityQueue: UnorderedItems neden sırasız, eşit önceliklerde stable olmaması, sıra numarasıyla adil queue ve EnqueueDequeue ile en pahalı N kitap.
C# Dictionary ve HashSet: TryGetValue, Key Eşitliği ve Comparer
Dictionary bir key'i GetHashCode ve Equals ile nasıl bulur, eşitliği olmayan class key neden dictionary'yi şişirir. Add, indexer, TryAdd, TryGetValue farkları, .NET 6 CollectionsMarshal ile tek aramada sayma, değişen key tuzağı, OrdinalIgnoreCase ve Türkçe I tuzağı, sıra garantisi ve HashSet set işlemleri.
C# List<T> Rehberi: Ekleme, Silme, Capacity, Sıralama ve Arama
Döngüde silerken atlanan element'ler ve 'Collection was modified' hatası, RemoveAll ile doğru silme. İçerideki array, Capacity'nin 4-8-16-32 diye büyümesi ve EnsureCapacity; Add, Insert, Remove ve eşitlik, Find ailesi, Sort, BinarySearch ve Sort'un stable olmaması.
C# Generic Class, Generic Method ve Constraint'ler
Kendi generic class ve method'larını yazmak: Page<T> ile sayfalama, tip çıkarımının sınırları, default ve constraint'siz T? tuzağı. class, struct, new(), notnull, unmanaged ve Enum constraint'leri gerçek derleyici hatalarıyla; closed tip başına static ve generic kodda == tuzağı.
C# Generics Neden Var: ArrayList, Boxing ve Tip Güvenliği
ArrayList'in her şeyi object olarak saklamasının bedeli: runtime'a kayan InvalidCastException, value type'larda boxing ve sekiz kat bellek. List<T> ile tip güvenliği, runtime'ın generic tipleri nasıl gördüğü ve eski collection'ları OfType/Cast ile generic dünyaya taşımak.
C# ile Nesne Yönelimli Mini Proje: OOP Bookstore
Serinin bütün parçalarıyla küçük bir kitapçı: record struct value object'ler, inheritance, indexer, event ile stok bildirimi, composition, strategy ve factory ile ödeme, IDisposable log ve koleksiyon serisine köprü.
C#'ta Birkaç Design Pattern: Factory, Strategy ve Observer
Design pattern'lerin ne işe yaradığı, static factory method'lar ve switch ile factory, Func ve interface ile strategy, event ile observer, bozuk subscriber'ı izole etmek ve subscription leak'leri.
C#'ta Partial, Nested Type, Anonymous Type ve Tuple
Anonymous type'ların eşitliği ve sınırları, tuple ile birden fazla değer döndürmek, tuple adlarının sadece compiler için var olması, partial class/method, nested type ve hangisini ne zaman seçeceğin.
C#'ta Object'lerin Ömrü: Garbage Collector, IDisposable ve using
using'in temizliği ne zaman yaptığı, garbage collector'ın generation'ları ve sınırları, IDisposable'ı doğru implement etmek, finalizer'ların neden nadir yazıldığı ve dispose pattern.
C#'ta Composition ve SOLID'e Giriş
List'ten derive eden bir sepetin kuralları nasıl deldiği, composition ile sahip olmak, SOLID'in beş prensibi Bookstore örnekleriyle ve prensipleri aşırıya kaçırmanın bedeli.
C#'ta Operator Overloading ve Indexer
Operatörlerin static method olduğu ve bunun getirdiği tuzak, Money için aritmetik ve karşılaştırma operatörleri, compiler kuralları, implicit/explicit dönüşümler, indexer'lar ve Index/Range desteği.
C#'ta Eşitlik ve Karşılaştırma: Equals, GetHashCode, IEquatable ve IComparable
Reference ve value equality, Equals ile GetHashCode contract'ı, IEquatable<T> ve == operatörü, struct'larda eşitlik, IComparable<T> ile sıralama ve dışarıdan karar veren comparer'lar.