Bahasa Pemrograman

Scala

Jalur lengkap bahasa Scala pada versi 3.9 LTS: dari ekspresi pertama di REPL sampai meluncurkan layanan web bertipe dan membaca kode Spark produksi.

Jalur ini mengajarkan bahasa Scala pada versi 3.9 LTS secara lengkap, mulai dari ekspresi pertama di REPL sampai meluncurkan layanan web bertipe dan membaca kode Spark produksi. Bahasan mengikuti dua tradisi yang dipadukan Scala, yaitu pemrograman berorientasi objek untuk struktur dan pemrograman fungsional untuk perilaku, dengan tipe yang kuat sebagai penjaganya. Seluruh contoh dijalankan dengan Scala CLI 1.18 di atas JDK 21, dan setiap keluaran yang ditampilkan merupakan hasil eksekusi nyata. Prasyaratnya sederhana, yaitu terminal yang berfungsi dan kemauan membaca pesan error compiler.

Mengenal Scala 3 pelajaran

Modul pembuka: posisi Scala di dunia JVM, penyiapan toolchain Coursier dan Scala CLI, serta konsol REPL untuk eksperimen pertama.

  1. Apa itu Scala ?Bahasa JVM yang memadukan pemrograman berorientasi objek dan fungsional dalam satu model yang terpadu.
  2. PenyiapanMemasang Coursier, JDK 21, dan Scala CLI 1.18 sebagai fondasi toolchain Scala.
  3. REPLMenggunakan konsol Scala CLI untuk mengevaluasi ekspresi, memeriksa tipe, dan menjajal sintaks dengan cepat.
Nilai dan ekspresi 4 pelajaran

Modul fondasi bahasa: pengikatan nilai, sifat ekspresif dari if, blok, dan match, tipe data dasar, serta string dengan interpolasi.

  1. val dan varPengikatan immutable sebagai pilihan utama dan mutasi sebagai keputusan yang disengaja.
  2. Ekspresi di mana-manaif, blok, dan match semuanya menghasilkan nilai, sehingga program tersusun dari ekspresi.
  3. Tipe dasarInt, Long, Double, Boolean, Unit, dan Nothing beserta konversi di antara tipe-tipe angka.
  4. String dan interpolasiInterpolator s, f, dan raw untuk menyusun string yang terbaca dan terformat.
Model objek terpadu 4 pelajaran

Modul model objek sebagai satu kesatuan: kelas, objek singleton, trait dengan stacking, dan case class untuk data immutable.

  1. Kelas dan metodeConstructor utama, field, dan daftar parameter dalam deklarasi kelas Scala.
  2. Objek dan companionSingleton sebagai pengganti static dan pola factory dengan metode apply.
  3. TraitMixin perilaku dengan urutan stacking dan metode bawaan yang dapat diwariskan.
  4. Case classData immutable dengan copy, kesetaraan struktural, dan destructuring siap pakai.

Modul koleksi immutable bawaan: hierarki Seq, Set, dan Map, transformasi map, filter, flatMap, pelipatan, serta for-comprehension.

  1. Hierarki koleksiSeq, Set, Map, dan Vector pada pustaka bawaan immutable beserta pertimbangan pemilihannya.
  2. Transformasimap, filter, dan flatMap beserta biaya alokasi yang menyertai setiap tahap transformasi.
  3. Pelipatan dan agregasifoldLeft, reduce, groupBy, dan pipeline agregasi yang diakhiri sorted.
  4. For-comprehensionFor-comprehension yang mudah dibaca beserta padanan flatMap dan map bersarang hasil desugaring.

Modul pattern matching sebagai gaya utama menguraikan data: ekspresi match, bentuk pola, destructuring, dan enum untuk ADT.

  1. Ekspresi matchCase, guard, dan pemeriksaan exhaustiveness yang dijamin compiler.
  2. Bentuk polaPola literal, variabel, tuple, barisan, dan alternatif beserta urutan pencocokannya.
  3. Destrukturisasi dataCase class dan pola bersarang yang mengikat field ke nama lokal.
  4. Enum dan ADTSintaks enum Scala 3 untuk membangun tipe data aljabar yang tertutup.

Modul sistem tipe Scala 3: parameter tipe dan varians, type class dengan given dan using, metode ekstensi, tipe union, dan tipe opaque.

  1. Parameter tipe dan variansGenerik dengan anotasi kovarians dan kontravarians beserta aturan posisinya.
  2. Type class dengan given dan usingParameter konteks Scala 3 sebagai mekanisme type class tanpa kebisingan implicit.
  3. Metode ekstensiMenambahkan metode pada tipe milik pihak lain tanpa mewarisi kelasnya.
  4. Tipe union dan tipe intersectionMenyusun tipe baru dengan kombinasi or dan and secara langsung.
  5. Tipe opaque dan aliasPembungkus tanpa biaya runtime yang menyembunyikan representasi di dalam lingkup modulnya.

Modul gaya fungsional: fungsi sebagai nilai, kemurnian dan transparansi referensial, serta error sebagai nilai melalui Option, Try, dan Either.

  1. Fungsi sebagai nilaiLambda, closure, dan fungsi tingkat tinggi sebagai fondasi gaya fungsional.
  2. Kemurnian dan imutabilitasTransparansi referensial dan penalaran substitusi untuk program yang mudah diuji.
  3. OptionMemodelkan ketiadaan nilai secara eksplisit tanpa pemeriksaan null.
  4. Try dan EitherKegagalan sebagai data dan eksepsi yang tetap di batas sistem saja.
Konkurensi 3 pelajaran

Modul konkurensi di JVM: Future dan ExecutionContext, penyusunan future dengan for-comprehension, serta lanskap actor pasca-Akka.

  1. FutureHasil asinkron yang berjalan pada ExecutionContext beserta model waktunya.
  2. Penyusunan futureFor-comprehension menggantikan piramida callback dalam menyusun alur asinkron.
  3. Lanskap actorApache Pekko sebagai kelanjutan ekosistem actor setelah perubahan lisensi Akka tahun 2022.
Alat dan pengujian 4 pelajaran

Modul toolchain profesional: direktif Scala CLI, struktur build sbt, penyuntingan dengan Metals dan scalafmt, serta pengujian munit.

  1. Scala CLI secara mendalamDirektif, skrip, pengemasan, dan pengelolaan dependensi pada Scala CLI.
  2. Build sbtStruktur build.sbt, modul, dan resolusi dependensi pada alat build utama ekosistem Scala.
  3. Metals dan scalafmtPenyuntingan kelas IDE dengan LSP dan format kode yang konsisten di seluruh tim.
  4. Pengujian dengan munitAsersi, suite, dan pemeriksaan properti ScalaCheck di atas kerangka uji munit.
Scala untuk data 3 pelajaran

Modul ekosistem data: serialisasi JSON dengan circe, kesadaran effect system cats-effect dan ZIO, serta Apache Spark pada Scala 2.13.

  1. JSON dengan circeEncoder dan decoder yang diderivasi otomatis untuk case class.
  2. Kesadaran effect systemcats-effect dan ZIO sebagai langkah lanjutan menuju pemrograman berbasis efek di produksi.
  3. Scala dengan Apache SparkAlasan Spark masih berjalan pada Scala 2.13 dan cara membaca kode lintas versi.
Layanan web 3 pelajaran

Modul layanan web bertipe: dasar http4s, endpoint dengan tapir, dan kontrak serialisasi circe yang digunakan bersama klien dan server.

  1. Dasar http4sHttpRoutes, permintaan, respons, dan middleware pada server ember http4s.
  2. Endpoint bertipe dengan tapirDeskripsi endpoint yang menghasilkan server sekaligus dokumentasi dari satu sumber.
  3. Kontrak serialisasiCodec circe yang digunakan bersama oleh sisi klien dan server layanan.
Kinerja dan JVM 4 pelajaran

Modul lapisan runtime: memori dan garbage collector JVM, interoperabilitas Java, evaluasi malas dan ketat, serta disiplin pengukuran kinerja.

  1. JVM di balik ScalaHeap, garbage collector, dan kompilasi JIT sebagai panggung tempat kode Scala berjalan.
  2. Interoperabilitas JavaMemanggil pustaka Java, koleksi Java, dan konverter di antara dua ekosistem.
  3. Evaluasi malas dan ketatlazy val, parameter by-name, dan biaya tersembunyi LazyList.
  4. Pengukuran kinerjaProfil JFR dan disiplin benchmark untuk keputusan optimasi yang berdasar.
Pengerjaan proyek 3 pelajaran

Modul penutup berupa proyek terpandu: pemilihan proyek, perancangan tipe terlebih dahulu, dan pembangunan dengan titik pemeriksaan.

  1. Pemilihan proyekMemilih di antara alat CLI, pipeline data, atau layanan web JSON sebagai proyek penutup.
  2. Rancang tipe terlebih dahuluTanda tangan dan ADT sebagai kerangka desain sebelum implementasi ditulis.
  3. Membangun dengan titik pemeriksaanPengujian, pemformatan, dan peninjauan pada setiap tahap pembangunan proyek.