Konsep dan terminologi (transformasi fungsional) (LINQ ke XML)

Artikel ini memperkenalkan konsep dan terminologi transformasi fungsional murni. Pendekatan transformasi fungsional untuk mengubah data menghasilkan kode yang sering lebih cepat untuk diprogram, lebih ekspresif, dan lebih mudah untuk di-debug dan dikelola daripada pemrograman yang lebih tradisional dan imperatif.

Perhatikan bahwa artikel di bagian ini tidak dimaksudkan untuk sepenuhnya menjelaskan pemrograman fungsi. Sebaliknya, artikel ini mengidentifikasi beberapa kemampuan pemrograman fungsi yang memudahkan untuk mengubah XML dari satu bentuk ke bentuk lainnya.

Apa itu transformasi fungsional pure XML

Dalam transformasi fungsi murni, sekumpulan fungsi, yang disebut fungsi murni, menentukan cara mengubah sekumpulan data terstruktur dari bentuk aslinya menjadi bentuk lain. Kata "murni" menunjukkan bahwa fungsinya dapat dikomposisi, yang mengharuskan fungsi tersebut:

  • Mandiri, sehingga mereka dapat dengan bebas dipesan dan disusun ulang tanpa terjerat atau saling ketergantungan dengan sisa program. Transformasi murni tidak memiliki pengetahuan atau efek terhadap lingkungan mereka. Artinya, fungsi yang digunakan dalam transformasi tidak memiliki efek samping.
  • Stateless, sehingga menjalankan fungsi yang sama atau set fungsi tertentu pada input yang sama akan selalu menghasilkan output yang sama. Transformasi murni tidak memiliki memori penggunaan sebelumnya.

Penting

Dalam sisa tutorial ini, istilah "fungsi murni" digunakan dalam arti umum untuk menunjukkan pendekatan pemrograman, dan bukan fitur bahasa tertentu.

Perhatikan bahwa fungsi murni harus diimplementasikan sebagai metode dalam C#, dan sebagai fungsi dalam Visual Basic.

Anda tidak boleh membingungkan fungsi murni dengan metode virtual murni di C++. Yang terakhir menunjukkan bahwa kelas yang berisi abstrak dan tidak ada isi metode yang disediakan.

Konsep pemrograman fungsional

Pemrograman fungsi adalah pendekatan pemrograman yang secara langsung mendukung transformasi fungsi murni.

Secara historis, bahasa pemrograman fungsional untuk tujuan umum, seperti ML, Scheme, Haskell, dan F#, terutama menarik bagi komunitas akademik. Meskipun selalu mungkin untuk menulis transformasi fungsional murni di C# dan Visual Basic, kesulitan melakukannya belum menjadikannya pilihan yang menarik bagi sebagian besar programmer. Namun, dalam versi terbaru bahasa ini, konstruksi bahasa baru seperti ekspresi lambda dan inferensi jenis membuat pemrograman fungsional jauh lebih mudah dan lebih produktif.

Untuk informasi selengkapnya tentang pemrograman fungsional, lihat Pemrograman fungsional vs. pemrograman imperatif.

Bahasa pemrograman fungsi khusus domain

Meskipun bahasa pemrograman fungsi umum belum diadopsi secara luas, beberapa bahasa pemrograman fungsi khusus domain telah memiliki kesuksesan yang lebih baik. Misalnya, Lembar Gaya Tumpuk (CSS) digunakan untuk menentukan tampilan dan nuansa banyak halaman web, dan style sheet Extensible Stylesheet Language Transformations (Bahasa Lembar Gaya yang Terluaskan) digunakan secara luas dalam manipulasi data XML. Untuk informasi selengkapnya tentang XSLT, lihat Transformasi XSLT.

Terminologi

Daftar berikut mendefinisikan beberapa istilah yang terkait dengan transformasi fungsi.

fungsi urutan lebih tinggi (kelas satu)
Fungsi yang dapat diperlakukan sebagai objek terprogram. Misalnya, fungsi dengan urutan yang lebih tinggi dapat diteruskan ke atau dikembalikan dari fungsi lain. Dalam C# dan Visual Basic, delegasi dan ekspresi lambda adalah fitur bahasa yang mendukung fungsi dengan urutan lebih tinggi. Untuk menulis fungsi dengan urutan yang lebih tinggi, Anda menyatakan satu atau beberapa argumen untuk mengambil delegasi, dan Anda sering menggunakan ekspresi lambda saat memanggilnya. Banyak operator kueri standar adalah fungsi dengan urutan yang lebih tinggi.

Untuk mendapatkan informasi selengkapnya, lihat Gambaran Umum Operator Kueri Standar (C#) atau Gambaran Umum Operator Kueri Standar (Visual Basic).

Ekspresi Lambda
Pada dasarnya, fungsi anonim sebaris yang dapat digunakan di mana pun jenis delegasi diharapkan. Ini adalah definisi yang disederhanakan dari ekspresi lambda, tetapi memadai untuk tujuan tutorial ini.

Untuk informasi selengkapnya, lihat Ekspresi Lambda (Panduan Pemrograman C#) dan Ekspresi Lambda (Visual Basic)).

koleksi
Sekumpulan data terstruktur, biasanya dari jenis yang seragam. Agar kompatibel dengan LINQ, koleksi harus mengimplementasikan IEnumerable antarmuka atau IQueryable antarmuka (atau salah satu rekan generiknya, IEnumerator<T> atau IQueryable<T>).

(Jenis anonim) tuple
Konsep matematika, tuple adalah urutan objek terbatas, masing-masing dari jenis tertentu. Tuple juga dikenal sebagai daftar yang dipesan. Jenis anonim adalah implementasi bahasa dari konsep ini, yang memungkinkan jenis kelas yang tidak disebutkan namanya dideklarasikan dan objek dari jenis tersebut akan dibuat secara bersamaan.

Untuk informasi selengkapnya, lihat Jenis Anonim (Panduan Pemrograman C#) dan Jenis Anonim (Visual Basic).

inferensi jenis (pengetikan implisit)
Kemampuan kompilator untuk menentukan jenis variabel tanpa adanya deklarasi jenis eksplisit.

Untuk informasi selengkapnya, lihat Variabel lokal yang diketik secara implisit (Panduan Pemrograman C#) dan Inferensi Jenis Lokal (Visual Basic).

Eksekusi yang ditangguhkan dan evaluasi yang malas
Penundaan evaluasi ekspresi sampai nilai yang diselesaikan benar-benar diperlukan. Eksekusi yang ditangguhkan didukung dalam koleksi.

Untuk informasi C# selengkapnya, lihat Pengantar Kueri LINQ (C#) dan Eksekusi yang Ditangguhkan dan Evaluasi Malas di LINQ ke XML (C#).

Untuk informasi Visual Basic selengkapnya, lihat Operasi Kueri Dasar (Visual Basic) dan Eksekusi Yang Ditangguhkan dan Evaluasi Malas di LINQ ke XML (Visual Basic).

Fitur bahasa ini akan digunakan dalam sampel kode di seluruh bagian ini.

Lihat juga