Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Iterator ve Interpreter: C#'ın İçine Gömülmüş İki Pattern — yield return ve Expression Tree
Iterator, bir collection'ın içini göstermeden element'lerini sırayla dolaşmayı sağlar ve C#'ta IEnumerable, IEnumerator ve yield return olarak dilin içindedir; Interpreter ise küçük bir dilin gramerini bir AST olarak temsil edip yorumlar. Sayfalı bir katalog API'sini yield ve IAsyncEnumerable ile okumayı, kampanya kuralları için küçük bir kural dili yazıp onu Expression tree'ye derlemeyi, Regex'in içindeki interpreter'ı ve dinamik expression'larda güvenlik sınırını gerçek çıktılarla görüyoruz.
Visitor Pattern: Double Dispatch, ExpressionVisitor ve Pattern Matching ile Karşılaştırma
Visitor, C#'ın tek boyutlu virtual dispatch'ini Accept ve Visit çağrılarıyla ikiye katlayarak sabit bir tip hiyerarşisine element'lere dokunmadan yeni işlemler eklemeyi sağlar; bedeli, yeni bir tipin bütün visitor'ları kırmasıdır. Overload seçiminin static tip tuzağı, expression problem, ExpressionVisitor ve Roslyn CSharpSyntaxWalker, ve exhaustiveness kontrolü olmayan switch expression ile karşılaştırma.