0Pricing
C# Academy · Ders

İ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)); // 6

Elle 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)); // 12

Sonucu Ç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)); // 30

Derlemenin 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)); // False

Koş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 False

Hesaplamaları 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)); // 120

Tü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)); // 15

Performans 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 = 20

Hatalar 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)); // 11

Kı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

  1. İfade Ağaçları Nedir
  2. İfadeleri Elle Oluşturma
  3. İfadeleri Derleme ve Yürütme
  4. LINQ Sağlayıcılarında İfade Ağaçları
← C# Academy Sayfasına Dön