Aracılığıyla paylaş


Kavramlar ve terminoloji (işlevsel dönüşüm) (LINQ to XML)

Bu makalede saf işlevsel dönüşümlerin kavramları ve terminolojisi tanıtılır. Verileri dönüştürmeye yönelik işlevsel dönüştürme yaklaşımı genellikle daha hızlı programlama, daha açıklayıcı ve daha geleneksel, kesinlik temelli programlamaya göre hata ayıklaması ve bakımı daha kolay kod verir.

Bu bölümdeki makalelerin işlevsel programlamayı tam olarak açıklamaya yönelik olmadığını unutmayın. Bunun yerine, bu makaleler XML'i bir şekilden diğerine dönüştürmeyi kolaylaştıran bazı işlevsel programlama özelliklerini tanımlar.

Saf işlevsel dönüşüm nedir?

Saf işlevsel dönüşümde, saf işlevler olarak adlandırılan bir işlev kümesi, yapılandırılmış bir veri kümesinin özgün biçiminden başka bir forma nasıl dönüştürüldüğünü tanımlar. "Saf" sözcüğü işlevlerin birleştirilebilir olduğunu belirtir ve bu da şunları gerektirir:

  • Kendi kendine, böylece serbestçe sıralanabilir ve programın geri kalanı ile bağımlılıklar veya bağımlılıklar olmadan yeniden düzenlenebilir. Saf dönüşümlerin ortamları hakkında hiçbir bilgisi veya etkisi yoktur. Başka bir ifadeyle, dönüştürmede kullanılan işlevlerin yan etkisi yoktur.
  • Durum bilgisi olmadığından, aynı işlevin veya belirli işlev kümesinin aynı girişte yürütülmesi her zaman aynı çıkışa neden olur. Saf dönüşümler, önceki kullanımlarıyla ilgili hiçbir belleğe sahip değildir.

Önemli

Bu öğreticinin geri kalanında, "saf işlev" terimi genel anlamda belirli bir dil özelliğini değil programlama yaklaşımını belirtmek için kullanılır.

Saf işlevlerin C# dilinde yöntem olarak ve Visual Basic'te işlev olarak uygulanması gerektiğini unutmayın.

C++ dilinde saf işlevleri saf sanal yöntemlerle karıştırmamalısınız. İkincisi, içeren sınıfın soyut olduğunu ve hiçbir yöntem gövdesinin sağlanmadığını gösterir.

İşlevsel programlama

İşlevsel programlama , saf işlevsel dönüşümü doğrudan destekleyen bir programlama yaklaşımıdır.

Geçmişte ML, Scheme, Haskell ve F# gibi genel amaçlı işlevsel programlama dilleri öncelikle akademik topluluğun ilgisini çekmiştir. C# ve Visual Basic'te saf işlevsel dönüşümler yazmak her zaman mümkün olsa da, bunu yapmanın zorluğu onu çoğu programcı için cazip bir seçenek haline getirmiyor. Ancak bu dillerin son sürümlerinde lambda ifadeleri ve tür çıkarımı gibi yeni dil yapıları, işlevsel programlamayı çok daha kolay ve daha üretken hale getirir.

İşlevsel programlama hakkında daha fazla bilgi için bkz . İşlevsel programlama ve kesinlik temelli programlama.

Etki alanına özgü işlevsel programlama dilleri

Genel işlevsel programlama dilleri yaygın olarak benimsenmiş olmasa da, etki alanına özgü bazı işlevsel programlama dilleri daha başarılı olmuştur. Örneğin, birçok web sayfasının genel görünümünü belirlemek için Basamaklı Stil Sayfaları (CSS) ve XML veri işlemesinde Genişletilebilir Stil Sayfası Dil Dönüştürmeleri (XSLT) stil sayfaları yaygın olarak kullanılır. XSLT hakkında daha fazla bilgi için bkz . XSLT Dönüşümleri.

Terminoloji

Aşağıdaki liste işlevsel dönüşümlerle ilgili bazı terimleri tanımlar.

higher-order (birinci sınıf) işlevi
Programlı nesne olarak ele alınabilen bir işlev. Örneğin, daha yüksek sıralı bir işleve geçirilebilir veya diğer işlevlerden döndürülebilir. C# ve Visual Basic'te temsilciler ve lambda ifadeleri, daha yüksek sıralı işlevleri destekleyen dil özellikleridir. Daha yüksek sıralı bir işlev yazmak için, temsilci almak için bir veya daha fazla bağımsız değişken bildirirsiniz ve genellikle çağırırken lambda ifadeleri kullanırsınız. Standart sorgu işleçlerinin çoğu yüksek sıralı işlevlerdir.

Daha fazla bilgi için bkz . Standart Sorgu İşleçlerine Genel Bakış (C#) ve Standart Sorgu İşleçlerine Genel Bakış (Visual Basic).

lambda ifadesi
Temelde, temsilci türünün beklendiği her yerde kullanılabilen satır içi anonim bir işlevdir. Bu, lambda ifadelerinin basitleştirilmiş bir tanımıdır, ancak bu öğreticinin amaçları için yeterlidir.

Daha fazla bilgi için bkz. Lambda ifadeleri (C# Programlama Kılavuzu) ve Lambda İfadeleri (Visual Basic)).

Koleksiyon
Genellikle tekdüzen türde yapılandırılmış bir veri kümesi. LINQ ile uyumlu olması için bir koleksiyonun IEnumerable arabirimini veya IQueryable arabirimini (veya genel karşılıklarından IEnumerator<T> birini veya IQueryable<T>) uygulaması gerekir.

tanımlama grubu (anonim türler)
Matematiksel kavram, tanımlama grubu, her biri belirli bir tür olan sonlu bir nesne dizisidir. Tanımlama grubu, sıralı liste olarak da bilinir. Anonim türler, adsız bir sınıf türünün bildirilmesine ve bu türdeki bir nesnenin aynı anda örneklendirilebilmesine olanak tanıyan bu kavramın bir dil uygulamasıdır.

Daha fazla bilgi için bkz . Anonim Türler (C# Programlama Kılavuzu) ve Anonim Türler (Visual Basic).

tür çıkarımı (örtük yazma)
Bir derleyicinin, açık tür bildiriminin yokluğunda bir değişkenin türünü belirleme yeteneği.

Daha fazla bilgi için bkz . Örtük olarak yazılan yerel değişkenler (C# Programlama Kılavuzu) ve Yerel Tür Çıkarımı (Visual Basic).

ertelenen yürütme ve gecikmeli değerlendirme
Bir ifadenin çözümlenen değeri gerçekten gerekli olana kadar değerlendirilmesinin geciktirilmesi. Ertelenmiş yürütme koleksiyonlarda desteklenir.

Daha fazla C# bilgisi için bkz . LINQ Sorgularına Giriş (C#) ve LINQ to XML'de Gecikmeli Yürütme ve Gecikmeli Değerlendirme (C#).

Daha fazla Visual Basic bilgisi için bkz . Temel Sorgu İşlemleri (Visual Basic) ve LINQ to XML'de Ertelenen Yürütme ve Gecikmeli Değerlendirme (Visual Basic)...

Bu dil özellikleri bu bölüm boyunca kod örneklerinde kullanılacaktır.

Ayrıca bkz.