İfade Ağaçları Nedir
Kodun veri yapısı olarak nasıl temsil edildiğini anlayın.
İfade Ağaçları Nedir, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Veri Olarak Kod
İfade ağacı, kodu yalnızca çalıştırabileceğiniz derlenmiş talimatlar yerine, çalışma zamanında inceleyebileceğiniz bir veri yapısı olarak temsil eder. C#, bunu Expression<TDelegate> ile modeller.
Temsilciye Dönüştürülen Lambda ile Ağaca Dönüştürülen Lambda
Bir lambda'yı Func<...> türüne atadığınızda çalıştırılabilir kod elde edersiniz. Aynı lambda'yı Expression<Func<...>> türüne atadığınızda derleyici, onu açıklayan bir ağaç oluşturur.
using System;
using System.Linq.Expressions;
Func<int, int> runnable = x => x + 1; // compiled delegate
Expression<Func<int, int>> tree = x => x + 1; // data structure
Console.WriteLine(runnable(5)); // 6
Console.WriteLine(tree); // x => (x + 1)Ağacı İnceleme
Bu bir veri olduğundan, bir ifade ağacının parçalarını okuyabilirsiniz: parametrelerini, body'sini ve düğüm türünü.
using System;
using System.Linq.Expressions;
Expression<Func<int, int>> tree = x => x + 1;
Console.WriteLine(tree.Parameters[0].Name); // x
Console.WriteLine(tree.Body.NodeType); // Add
Console.WriteLine(tree.ReturnType); // System.Int32İfade Hiyerarşisi
Her düğüm System.Linq.Expressions.Expression sınıfından türetilir. Yaygın türler arasında BinaryExpression, ParameterExpression, ConstantExpression ve MethodCallExpression bulunur.
using System;
using System.Linq.Expressions;
Expression<Func<int, int>> tree = x => x + 1;
var body = (BinaryExpression)tree.Body;
Console.WriteLine(body.Left); // x
Console.WriteLine(body.Right); // 1Yalnızca İfade Lambdalarına İzin Verilir
Yalnızca tek ifadeli bir lambda'yı ağaca dönüştürebilirsiniz. Deyim gövdeli lambdalar (süslü parantez içerenler) ifade ağacı olamaz.
using System;
using System.Linq.Expressions;
Expression<Func<int, int>> ok = x => x * 2; // fine
// Expression<Func<int,int>> bad = x => { return x*2; }; // compile error
Console.WriteLine(ok); // x => (x * 2)Neden Önemlidir
İfade ağaçları, kitaplıkların kodunuzu yalnızca çalıştırmak yerine anlamasını sağlar. LINQ sağlayıcıları bunları SQL'e, dinamik sorgulara veya başka hedeflere dönüştürür.
NodeType İşlemi Belirtir
NodeType özelliği, o düğümdeki işlemi tanımlayan bir ExpressionType enum değeridir.
using System;
using System.Linq.Expressions;
Expression<Func<int, bool>> tree = x => x > 10;
Console.WriteLine(tree.Body.NodeType); // GreaterThanSabitler ve Parametreler
Bir ParameterExpression bir girişi temsil eder; bir ConstantExpression ise koda gömülü bir sabit değeri barındırır.
using System;
using System.Linq.Expressions;
Expression<Func<int, int>> tree = x => x + 5;
var body = (BinaryExpression)tree.Body;
Console.WriteLine(body.Left.GetType().Name); // ParameterExpression (or TypedParameterExpression)
Console.WriteLine(((ConstantExpression)body.Right).Value); // 5Ağaçlardaki Yöntem Çağrıları
Bir yöntemi çağıran lambda, yöntemi ve bağımsız değişkenlerini açığa çıkaran bir MethodCallExpression olur.
using System;
using System.Linq.Expressions;
Expression<Func<string, int>> tree = s => s.Length;
// member access here; a call example:
Expression<Func<string, string>> call = s => s.ToUpper();
var mc = (MethodCallExpression)call.Body;
Console.WriteLine(mc.Method.Name); // ToUpperAğaçlar Değişmezdir
İfade ağaçları değişmezdir. Birini "değiştirmek" için parçalarından yeni bir ağaç oluşturursunuz; ziyaretçiler ve yeniden yazıcılar bu şekilde çalışır.
Hepsini Bir Araya Getirme
Burada küçük bir koşul ağacını baştan sona inceliyoruz: parametre, işleç ve sabit.
using System;
using System.Linq.Expressions;
Expression<Func<int, bool>> isAdult = age => age >= 18;
var body = (BinaryExpression)isAdult.Body;
Console.WriteLine(isAdult.Parameters[0].Name); // age
Console.WriteLine(body.NodeType); // GreaterThanOrEqual
Console.WriteLine(((ConstantExpression)body.Right).Value); // 18Kısa Kontrol
Bir ifade ağacını özel kılan şeyi kontrol edin.
Özet
İfade ağaçlarının ne olduğunu öğrendiniz.
Expression<TDelegate>, kodu incelenebilir veri olarak temsil eder.- Düğümler arasında parametreler, sabitler, ikili işlemler ve yöntem çağrıları bulunur.
- Yalnızca tek ifadeli lambdalar uygundur.
- Ağaçlar değişmezdir; yeniden yazma işlemi yeni ağaçlar oluşturur.
Sıkça Sorulan Sorular
“İfade Ağaçları Nedir” dersi ücretsiz mi?
Evet — “İfade Ağaçları Nedir” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“İfade Ağaçları Nedir” dersinde ne öğreneceğim?
Kodun veri yapısı olarak nasıl temsil edildiğini anlayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“İfade Ağaçları Nedir” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İfade Ağaçları Nedir
- İfadeleri Elle Oluşturma
- İfadeleri Derleme ve Yürütme
- LINQ Sağlayıcılarında İfade Ağaçları