Belajar Scala - Instalasi & Hello World
Episode 3 of 23

Belajar Scala - Instalasi & Hello World

Memastikan toolchain Scala terpasang dengan benar via Coursier, menulis dan menjalankan Hello World pertama dengan @main, serta mengenal tiga jalur eksekusi: scala run untuk file tunggal, kompilasi eksplisit dengan scalac, dan eksperimen cepat di REPL.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah memahami arsitektur Scala di episode 2 — bagaimana scalac mengubah source menjadi bytecode JVM — sekarang saatnya praktik nyata pertama. Di episode 0 kita sudah menginstall toolchain; di episode ini kita memastikan semuanya berfungsi dan menulis program Scala pertama kalian.

Mengapa episode ini penting? Karena banyak developer JVM baru gagal di langkah pertama bukan karena bahasa, melainkan karena toolchain yang tidak konsisten — versi JDK salah, PATH tidak terkonfigurasi, atau memakai cara run yang ketinggalan zaman. Setelah episode ini, kalian akan punya alur kerja yang bersih untuk menjalankan kode Scala sepanjang series: cepat, bisa dipercaya, dan mudah di-debug.

Verifikasi Toolchain

Mulai dengan memastikan JDK dan Scala terpasang dengan benar:

Verifikasi toolchain
java -version
scala -version
scalac -version

Tiga perintah ini adalah barometer environment kalian:

  • java -version → harus 17 atau lebih baru (baseline Scala 3.8).
  • scala -version → harus 3.8.4 (rilis 5 Juni 2026) atau versi 3.8.x lain.
  • scalac -version → compiler tersedia, versi sama dengan scala.

Jika scala tidak ditemukan, kemungkinan besar cs setup belum menambahkan ~/.local/share/coursier/bin ke PATH:

Tambahkan bin Coursier ke PATH
export PATH="$PATH:$HOME/.local/share/coursier/bin"

Warning

Jangan pernah menjalankan Scala dengan JDK 8 jika memakai Scala 3.8 — baseline resminya JDK 17, dan versi di bawah itu akan menghasilkan error runtime yang membingungkan. Untuk project library yang butuh JDK 8, pakai jalur LTS 3.3.

Hello World dengan @main

Di Scala 3, cara paling ringkas mendefinisikan entry point adalah @main:

hello.scala - Hello World pertama
@main def hello(): Unit = println("Hello, Scala!")

Buka folder ~/scala-lab, simpan file di atas sebagai hello.scala, lalu jalankan:

Jalankan file tunggal dengan scala run
cd ~/scala-lab
scala run hello.scala

Output-nya harus mencetak Hello, Scala!. Inilah jalur termudah untuk seluruh praktik di dua fase awal series ini.

Anatomi Program Minimal

Mari bedah program di atas baris per baris:

  • @main — annotation yang memberi tahu compiler: ini entry point. Compiler otomatis membuat class hello dengan method main statis, persis yang dicari JVM.
  • def hello(): Unit — fungsi bernama hello, tanpa parameter, mengembalikan Unit (analog void di Java/C).
  • println("Hello, Scala!") — mencetak string lalu newline.

Unit adalah tipe khusus yang berarti "tidak ada nilai yang berguna dikembalikan" — kita akan sering bertemu lagi. Yang menarik: @main menerima parameter sebagai argumen command-line:

main dengan parameter
@main def hello(name: String, count: Int): Unit =
  println(s"Hello, $name!")
Berikan argumen
scala run hello.scala -- Bima 3

Tiga Jalur Eksekusi

Ada tiga cara menjalankan kode Scala, masing-masing dengan tempatnya sendiri:

1. scala run (file tunggal)

Paling cepat untuk praktik dan prototyping — kita sudah memakainya di atas. Scala CLI mengelola dependensi lewat using directives di bagian atas file:

File dengan dependency via using directive
//> using dep "org.typelevel::cats-core:2.13.0"
 
@main def run(): Unit = println("pakai cats")

Berkat directive ini, file tunggal bisa memakai library eksternal tanpa project sbt. Di episode 9 kita akan memakai ini lebih serius.

2. Kompilasi eksplisit dengan scalac

Untuk memahami apa yang terjadi di balik layar, kompilasi secara manual:

Kompilasi dan jalankan manual
scalac hello.scala
scala hello

scalac menghasilkan file .class (dan .tasty) di direktori kerja, lalu scala hello menjalankan class hello yang dihasilkan @main. Ini persis yang episode 2 bicarakan: .scala → bytecode → JVM.

3. REPL untuk eksperimen

Ketika ingin mencoba ekspresi tanpa membuat file:

Sesi REPL
scala
scala> val names = List("Sari", "Budi", "Eka")
scala> names.map(_.toUpperCase)
val res0: List[String] = List(SARI, BUDI, EKA)
scala> :quit

REPL berguna untuk menguji sintaks dan melihat tipe hasil secara instan. Di Scala 3.8, REPL terpisah menjadi artifact scala3-repl — jika scala tidak membuka REPL, pastikan artifact tersebut terinstall:

Install repl jika terpisah
cs install scala3-repl

Tip

Selama dua fase awal series (episode 3-8), scala run dan REPL adalah teman terbaik kalian: cepat, tanpa build step, dan langsung memberi umpan balik. Kita baru benar-benar beralih ke proyek sbt di episode 9.

Struktur Proyek Sederhana

Untuk latihan yang lebih teratur, buat struktur minimal:

Struktur folder scala-lab
scala-lab/
  hello.scala
  name.scala

Beberapa file bisa dipakai bersama: scala run hello.scala name.scala mengkompilasi keduanya dalam satu sesi, sehingga definisi di satu file bisa dipakai file lain. Untuk jumlah file lebih dari beberapa, kalian akan ingin project sbt (episode 9).

Common Pitfalls

  • not found: value ... — fungsi/val dipakai sebelum didefinisikan di file lain yang tidak diikutkan saat scala run. Sertakan semua file yang dibutuhkan.
  • Error version mismatchscala dan scalac dari versi berbeda. Cek keduanya dengan scala -version dan scalac -version.
  • Encoding aneh saat print — pastikan file tersimpan sebagai UTF-8; teks Indonesia bisa rusak jika editor menyimpan sebagai encoding lain.

Ringkasan Instalasi

Yang sudah kalian lakukan di episode 3:

  • JDK 17+, scala 3.8.x, dan scalac 3.8.x terverifikasi.
  • Hello World berjalan via scala run, dengan anatomi @main, def, dan Unit yang dipahami.
  • Tiga jalur eksekusi dikuasai: scala run, scalac + scala, dan REPL.
  • Using directive //> using dep untuk dependency pada file tunggal.

Penutup

Inti yang harus dibawa pulang:

  • Verifikasi selalu dengan java -version, scala -version, dan scalac -version.
  • Entry point Scala 3 adalah @main def; fungsi mengembalikan Unit untuk efek saja.
  • scala run adalah jalur tercepat untuk file tunggal; REPL untuk eksperimen; scalac manual untuk memahami kompilasi.
  • Using directive memungkinkan file tunggal memakai library eksternal.

Di episode 4 selanjutnya, kita masuk ke inti sintaks: val dan var — mengapa Scala mendorong val immutable, bagaimana type inference bekerja, dan cara mendefinisikan fungsi dengan parameter, default argumen, serta named arguments. Sampai jumpa di episode 4!

Belajar Scala - Instalasi & Hello World | Belajar Scala