Bahasa Pemrograman

F#

Jalur pemrograman F# functional-first di atas .NET 10: memodelkan domain dengan tipe, menggerakkan logika dengan pattern matching, dan mengirimkan pustaka yang teruji.

Jalur ini mengajarkan pemrograman F# secara berurutan dari nol, dengan versi F# 10 di atas .NET SDK 10 sebagai lingkungannya. Urutannya menempatkan tipe dan pattern matching sejak awal, error diperlakukan sebagai nilai melalui Option dan Result, dan interop C# diajarkan cukup awal untuk digunakan di dunia kerja. Setiap topik mengandung kode yang benar-benar dijalankan beserta keluaran aslinya, dan jalur ditutup dengan proyek terpandu yang merancang tipe lebih dahulu sebelum badan kode. Perkakas yang menyertai adalah dotnet CLI, Ionide untuk editor, serta Expecto dan FsCheck untuk pengujian.

Mengenal F# 3 pelajaran

Modul pembuka jalur: posisi F# di ekosistem .NET, penyiapan lingkungan kerja, dan skrip interaktif sebagai taman bermain.

  1. Apa itu F#?Mengenal F# sebagai bahasa functional-first bertipe statis yang berjalan di atas runtime .NET.
  2. PenyiapanMemasang .NET SDK 10, memeriksa instalasi F# 10, dan menyiapkan VS Code dengan ekstensi Ionide.
  3. Skrip dengan fsxMenjalankan berkas skrip .fsx dengan dotnet fsi sebagai taman bermain interaktif untuk bereksperimen.
Langkah pertama 4 pelajaran

Fondasi bahasa: binding let dan imutabilitas, fungsi sebagai nilai bawaan, inferensi tipe, serta operator pipeline.

  1. let dan imutabilitasBinding let yang imutabel secara baku serta kata kunci mutable untuk kebutuhan yang memang beralasan.
  2. Fungsi di mana-manaParameter curried, shadowing, dan operator komposisi untuk membangun program dari fungsi kecil.
  3. Inferensi tipeCara compiler menyimpulkan tipe dari penggunaan tanpa anotasi eksplisit di setiap baris.
  4. Operator pipelineOperator |> dan >> untuk merantai transformasi menjadi aliran data yang terbaca dari atas ke bawah.
Pemodelan dengan tipe 5 pelajaran

Memodelkan domain menggunakan tuple, record, discriminated union, enum, struct, satuan ukur, dan idiom desain berbasis tipe.

  1. Tuple dan recordData berlabel imutabel dengan kesetaraan struktural untuk memodelkan nilai gabungan sederhana.
  2. Discriminated unionTipe sum yang memodelkan alternatif domain secara presisi, satu kasus satu bentuk data.
  3. Enum dan structTipe enum untuk himpunan konstanta dan struct untuk nilai kecil yang peka terhadap alokasi.
  4. Satuan ukurSatuan fisik seperti meter dan detik yang diperiksa saat kompilasi pada nilai numerik.
  5. Idiom pemodelan domainMenggunakan tipe untuk membuat status ilegal tidak dapat direpresentasikan sejak konstruksi.
Pattern matching 4 pelajaran

Menggerakkan logika dengan ekspresi match, pola destructuring, klausul when, dan active pattern.

  1. Ekspresi matchPencocokan pola yang lengkap dan diperiksa compiler, dengan peringatan bila ada kasus yang terlewat.
  2. Pola destructuringMembongkar tuple, record, dan list langsung di dalam binding maupun pola match.
  3. Guard dan klausul whenKlausul when untuk menyempurnakan pola individual dengan syarat yang lebih halus.
  4. Active patternFungsi pola khusus, baik parsial maupun berparameter, yang dikenali compiler sebagai pola.
Koleksi 4 pelajaran

Koleksi bawaan: list imutabel, array dan sekuens lazy, Map, Set, dict, serta agregasi dengan fold.

  1. ListList imutabel berstruktur kepala-ekor dan modul List untuk transformasi fungsional.
  2. Array dan SeqArray yang mutable dan sekuens lazy, beserta situasi ketika masing-masing unggul.
  3. Map, Set, dan dictStruktur pencarian dalam ragam imutabel maupun mutable beserta pertimbangan pemilihannya.
  4. Agregasi dengan foldFold dan reduce sebagai pola konsumsi umum untuk membangun hasil dari kumpulan data.
Error sebagai nilai 4 pelajaran

Penanganan error tanpa lemparan: tipe Option, tipe Result, komposisi railway-oriented, dan posisi exception yang jujur.

  1. Tipe OptionKetidakhadiran nilai yang dinyatakan eksplisit dalam tipe, akhir dari ketakutan akan null.
  2. Tipe ResultKeberhasilan atau kegagalan yang dibawa sebagai data biasa alih-alih lemparan exception.
  3. Komposisi railway-orientedMengikat langkah-langkah rawan gagal menjadi satu pipeline dengan bind dan map.
  4. Exception secara jujurSituasi ketika exception .NET masih sah diterapkan dan cara menanganinya dengan try-with.

Workflow async, interop Task dengan C#, paralelisme data, dan komunikasi antartugas dengan agent serta channel.

  1. Workflow asyncI/O non-blocking yang ditulis dengan gaya computation expression dan dijalankan secara efisien.
  2. Interop TaskAsinkroni berbasis Task yang dibagikan langsung dengan C# dan pustaka .NET modern.
  3. Paralelisme dataArray.Parallel dan paralelisme data berbasis Task untuk memanfaatkan banyak inti.
  4. Agent dan channelAgent MailboxProcessor untuk pesan berurutan dan channel dengan buffer antar tugas.
Objek dan interop C# 4 pelajaran

Pemrograman berorientasi objek secukupnya, aksesibilitas dan pewarisan, serta interop dua arah dengan C#.

  1. Kelas dan antarmukaPemrograman berorientasi objek di tempat yang memang cocok, tanpa mengorbankan tipe domain.
  2. Aksesibilitas dan pewarisanModifier akses, overriding anggota, dan kelas abstrak di dalam F#.
  3. Mengonsumsi pustaka C#Menggunakan paket NuGet dan API .NET dari F#, termasuk penanganan null di batas interoperabilitas.
  4. Menyediakan F# untuk C#Menulis pustaka F# yang terbaca wajar bagi pemanggil C#, dari penamaan sampai tipe antarmuka.
Computation expression 4 pelajaran

Pola builder di balik workflow khusus, pemahaman ulang ekspresi bawaan, dan dukungan tail call pada F# 10.

  1. Pola builderDefinisi Bind dan return di balik workflow khusus beserta kelas builder-nya.
  2. Membahas ulang ekspresi bawaanasync, seq, dan result dipahami kembali sebagai builder dengan mekanisme yang sama.
  3. Workflow khususMembangun workflow logging atau validasi dari nol dengan computation expression.
  4. Tail call pada F# 10Dukungan tail call di dalam computation expression yang dibawa F# 10.
Perkakas dan pengujian 4 pelajaran

Proyek fsproj dan CLI, pengujian dengan Expecto, pengujian properti dengan FsCheck, serta alur kerja editor.

  1. Proyek dan CLIStruktur berkas fsproj dan pengelolaan solusi dotnet multi proyek lewat CLI.
  2. ExpectoFramework pengujian yang dapat dikomposisi dan peduli performa eksekusi tes.
  3. FsCheckPengujian berbasis properti, port dari QuickCheck, untuk menemukan kasus yang tak terduga.
  4. Alur kerja editorIonide, formatter Fantomas, dan penekanan peringatan terlingkup lewat #nowarn serta #warnon.
Pengerjaan proyek 2 pelajaran

Proyek terpandu penutup jalur: memilih layanan domain dan merancang tipe sebelum badan kode.

  1. Pemilihan proyekMemilih layanan domain untuk inventaris gudang, jadwal piket, atau arsip catatan sebagai bahan proyek.
  2. Tipe sebelum badanMerancang signature dan invarian lebih dahulu, baru mengisi badan fungsi dan pengujian.