0Pricing
Scala for Backend Engineering & Functional Programming · Pelajaran

Inferensi Tipe

Biarkan kompiler menentukan tipe.

Inferensi Tipe adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Apa Itu Inferensi Tipe?

Scala memiliki tipe statis, tetapi Anda jarang perlu menuliskan tipe secara eksplisit. Kompiler menyimpulkan tipe dari nilai di sisi kanan.

Dengan begitu, Anda mendapatkan keamanan tipe dengan keringkasan seperti pada bahasa dinamis.

val n = 42        // inferred Int
val label = "hi" // inferred String

Menyimpulkan dari Literal

Ketika Anda menulis val x = 5, kompiler melihat literal Int dan memberikan tipe Int kepada x.

Literal desimal menjadi Double, sedangkan teks di dalam tanda petik menjadi String.

object Main extends App {
  val count = 5
  val ratio = 1.5
  println(count + ratio)
}

Inferensi untuk Nilai Kembalian Fungsi

Kompiler juga dapat menyimpulkan tipe kembalian metode dari isinya.

Di sini, square mengembalikan Int karena isinya mengalikan dua nilai Int. Anda tidak perlu menyatakannya.

object Main extends App {
  def square(x: Int) = x * x
  println(square(6))
}

Parameter Tetap Memerlukan Tipe

Inferensi memiliki batas. Parameter metode harus diberi anotasi karena kompiler tidak memiliki sumber untuk menyimpulkan tipenya.

Potongan kode di bawah tidak akan dikompilasi tanpa : Int pada x.

def increment(x: Int) = x + 1 // type on x is required

Tipe Umum yang Disimpulkan

Ketika nilai dapat memiliki beberapa tipe, Scala menyimpulkan tipe umum yang paling spesifik.

Mencampurkan Int dan Double dalam aritmetika memperluas hasilnya menjadi Double.

object Main extends App {
  val mixed = 3 + 2.0  // Double
  println(mixed)
}

Inferensi dalam Koleksi

Koleksi menyimpulkan tipe elemennya dari nilai-nilai yang Anda masukkan.

Daftar bilangan bulat secara otomatis menjadi List[Int], sehingga Anda tetap mendapatkan keamanan tipe penuh tanpa anotasi.

object Main extends App {
  val nums = List(1, 2, 3) // List[Int]
  println(nums.sum)
}

Saat Inferensi Mengejutkan Anda

Terkadang inferensi memilih tipe yang lebih luas daripada yang Anda inginkan. Daftar berisi angka dengan tipe campuran dapat disimpulkan sebagai List[Double] atau bahkan List[AnyVal].

Jika tipe yang disimpulkan tidak sesuai kebutuhan, tambahkan anotasi eksplisit.

val a = List(1, 2.0)        // List[Double]
val b = List(1, "two")     // List[Any]

Mengganti dengan Anotasi

Anda selalu dapat menentukannya secara eksplisit. Memberi anotasi tipe mendokumentasikan maksud Anda sekaligus menggantikan inferensi yang terlalu sempit.

Di sini, literal 7 sengaja diperluas menjadi Long.

val seconds: Long = 7
val data: List[Int] = List(1, 2, 3)

API Publik: Nyatakan secara Eksplisit

Aturan gaya yang umum: biarkan inferensi menangani val lokal, tetapi tuliskan tipe kembalian secara eksplisit pada metode publik.

Hal ini menjaga kontrak pustaka Anda tetap stabil meskipun implementasinya berubah.

def total(items: List[Int]): Int = items.sum

Inferensi Tetap Menjaga Keamanan Tipe

Inferensi tidak melemahkan sistem tipe. Kompiler tetap menolak operasi yang tidak valid.

Di bawah ini, name disimpulkan sebagai String, sehingga mengalikannya dengan angka gagal dikompilasi, sebagaimana mestinya.

val name = "Lia"
val bad = name * 3 // error: value * is not a member of String in this sense

val yang Disimpulkan Tetap Tidak Dapat Diubah

Inferensi hanya melengkapi tipe. Inferensi tidak mengubah apakah suatu pengikatan dapat diubah.

val n = 10 tetap tidak dapat diubah dan bertipe Int; kompiler hanya menghemat pekerjaan Anda untuk mengetikkan : Int.

object Main extends App {
  val n = 10 // inferred Int, still a val
  println(n * n)
}

Pemeriksaan Singkat

Dalam hal apa Scala tetap mengharuskan Anda menulis tipe?

Ringkasan

Inferensi tipe memungkinkan Scala tetap ringkas tanpa kehilangan keamanan statis.

  • val lokal dan tipe hasil biasanya diinferensikan.
  • Parameter metode harus diberi anotasi.
  • Inferensi memilih tipe umum yang paling spesifik.
  • Berikan anotasi secara eksplisit untuk API publik atau untuk mengesampingkan hasil inferensi yang mengejutkan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Inferensi Tipe” gratis?

Ya — teks lengkap “Inferensi Tipe” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Inferensi Tipe”?

Biarkan kompiler menentukan tipe. Kamu berlatih Scala for Backend Engineering & Functional Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Scala for Backend Engineering & Functional Programming?

Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Inferensi Tipe” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Scala for Backend Engineering & Functional Programming ini?

Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. val vs var
  2. Tipe Dasar dan Literal
  3. Inferensi Tipe
  4. Ekspresi, Bukan Pernyataan
← Kembali ke Scala for Backend Engineering & Functional Programming