İfadeleri Derleme ve Yürütme
İfade ağaçlarını çalıştırılabilir temsilcilere dönüştürün.
İfadeleri Derleme ve Yürütme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. 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.
Ağaçtan Temsilciye
Bir ifade ağacı, siz onu derleyene kadar veridir. Expression<TDelegate>.Compile(), ağacı çağırabileceğiniz gerçek bir temsilciye dönüştürür.
using System;
using System.Linq.Expressions;
Expression<Func<int, int>> tree = x => x + 1;
Func<int, int> fn = tree.Compile();
Console.WriteLine(fn(5)); // 6Elle Oluşturulmuş Ağacı Derleme
Elle oluşturduğunuz ağaçlar da aynı şekilde derlenir ve çalışan bir temsilci üretir.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var body = Expression.Multiply(x, Expression.Constant(3));
var lambda = Expression.Lambda<Func<int, int>>(body, x);
var fn = lambda.Compile();
Console.WriteLine(fn(4)); // 12Sonucu Çağırma
Derlenmiş temsilci, diğer tüm temsilciler gibi davranır: onu çağırabilir, saklayabilir ve başka yerlere aktarabilirsiniz.
using System;
using System.Linq.Expressions;
Expression<Func<int, int, int>> addExpr = (a, b) => a + b;
var add = addExpr.Compile();
Console.WriteLine(add(2, 3)); // 5
Console.WriteLine(add(10, 20)); // 30Derlemenin Maliyeti Vardır
Derlemenin çalışma zamanı maliyeti vardır; bu nedenle her çağrıda yeniden derlemek yerine ortaya çıkan temsilciyi önbelleğe alıp yeniden kullanın.
using System;
using System.Linq.Expressions;
Expression<Func<int, int>> tree = x => x * x;
var square = tree.Compile(); // compile once
for (int i = 1; i <= 3; i++)
Console.Write(square(i) + " "); // 1 4 9
Console.WriteLine();Koşulları Dinamik Olarak Oluşturma
Yaygın bir kullanım, çalışma zamanında kullanıcı girişinden filtreleme koşulları oluşturmak ve ardından bunları bir Func türüne derlemektir.
using System;
using System.Linq.Expressions;
var n = Expression.Parameter(typeof(int), "n");
var isPositive = Expression.GreaterThan(n, Expression.Constant(0));
var pred = Expression.Lambda<Func<int, bool>>(isPositive, n).Compile();
Console.WriteLine(pred(5)); // True
Console.WriteLine(pred(-2)); // FalseKoşulları Birleştirme
Derlemeden önce koşulları birleştirmek için Expression.AndAlso / OrElse kullanın.
using System;
using System.Linq.Expressions;
var n = Expression.Parameter(typeof(int), "n");
var inRange = Expression.AndAlso(
Expression.GreaterThanOrEqual(n, Expression.Constant(1)),
Expression.LessThanOrEqual(n, Expression.Constant(10)));
var fn = Expression.Lambda<Func<int, bool>>(inRange, n).Compile();
Console.WriteLine(fn(5) + " " + fn(11)); // True FalseHesaplamaları Derleme
Çalışma zamanında aritmetik formüller oluşturabilirsiniz; bu, kural motorları ve hesap makineleri için kullanışlıdır.
using System;
using System.Linq.Expressions;
var p = Expression.Parameter(typeof(double), "p");
// price * 1.2 (add 20% tax)
var withTax = Expression.Multiply(p, Expression.Constant(1.2));
var calc = Expression.Lambda<Func<double, double>>(withTax, p).Compile();
Console.WriteLine(calc(100)); // 120Türsüz Lambdalar İçin DynamicInvoke
Jenerik olmayan bir Expression.Lambda kullandıysanız, bunu bir Delegate türüne derleyin ve DynamicInvoke çağrısını yapın.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var body = Expression.Add(x, Expression.Constant(10));
Delegate d = Expression.Lambda(body, x).Compile();
Console.WriteLine(d.DynamicInvoke(5)); // 15Performans Notu
Derlenmiş bir ifade, tek seferlik derlemeden sonra yaklaşık temsilci hızında çalışır. Sık çalıştırılan yollar için başlangıçta bir kez derleyin ve temsilciyi saklayın.
using System;
using System.Linq.Expressions;
Expression<Func<int, int>> tree = x => x + x;
var doubler = tree.Compile();
int total = 0;
for (int i = 0; i < 5; i++) total += doubler(i);
Console.WriteLine(total); // 0+2+4+6+8 = 20Hatalar Derleme Zamanında Ortaya Çıkar
Ağaç hatalıysa (örneğin bir parametre eksikse) Compile() hata oluşturur; bu nedenle ağaçlara güvenmeden önce onları doğrulayın.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var y = Expression.Parameter(typeof(int), "y");
try {
// body references y but lambda only declares x
var lambda = Expression.Lambda<Func<int, int>>(Expression.Add(x, y), x);
lambda.Compile();
} catch (InvalidOperationException) {
Console.WriteLine("unbound parameter");
}Hepsini Bir Araya Getirme
Küçük bir formülü tek bir akışta oluşturun, derleyin ve çalıştırın.
using System;
using System.Linq.Expressions;
var x = Expression.Parameter(typeof(int), "x");
var formula = Expression.Add(
Expression.Multiply(x, Expression.Constant(2)),
Expression.Constant(3)); // 2x + 3
var fn = Expression.Lambda<Func<int, int>>(formula, x).Compile();
Console.WriteLine(fn(4)); // 11Kısa Kontrol
Bir ifade ağacının nasıl çalıştırılacağını kontrol edin.
Özet
İfade ağaçlarını derlemeyi ve çalıştırmayı öğrendiniz.
Compile(), bir ağacı çağrılabilir bir temsilciye dönüştürür.- Derlemenin tek seferlik bir maliyeti olduğundan temsilciyi önbelleğe alın.
- Koşulları ve formülleri dinamik olarak oluşturun, ardından derleyin.
- Hatalı ağaçlar
Compile()sırasında hata oluşturur.
Sıkça Sorulan Sorular
“İfadeleri Derleme ve Yürütme” dersi ücretsiz mi?
Evet — “İfadeleri Derleme ve Yürütme” 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.
“İfadeleri Derleme ve Yürütme” dersinde ne öğreneceğim?
İfade ağaçlarını çalıştırılabilir temsilcilere dönüştürü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 3. dersidir.
“İfadeleri Derleme ve Yürütme” 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ı