Static Typing dan Dynamic Typing, apa Bedanya?

baca 4 menit
Static Typing dan Dynamic Typing, apa Bedanya?

Bicara tentang pemrograman tidak bisa lepas dengan yang namanya variabel. Dalam penulisannya ada 2 cara yang umum yaitu penulisan statis (statically typed) dan penulisan dinamis (dynamically typed). Kira-kira apa bedanya?

Static Typing

Static typing atau gaya penulisan statis merujuk pada bahasa pemrograman dengan tipe data yang tidak dapat diubah. Hal ini disebabkan karena semua variabel harus diketahui tipenya ketika compile time.

Contoh bahasa dengan gaya static typing adalah C++, Go, Pascal, dan Java. Mari kita bahas karakteristik, kelebihan, dan kekurangannya.

Karakteristik

Static typing umumnya ada pada bahasa pemrograman yang terkompilasi (compiled language). Pada bahasa tipe ini, programmer biasanya diwajibkan memberi tipe data secara eksplisit. Tipe data yang ditentukan bersifat permanen dan tidak dapat diubah dengan cara apapun.

Contohnya dalam bahasa Java:

java
int angka = 90       // variabel bertipe int
String nama = "inva" // variabel bertipe string

Pada contoh tersebut, baik variabel angka maupun nama tidak dapat berubah tipe datanya. Selain itu, jika kita coba mengisi variabel dengan nilai yang tidak sesuai tipe datanya pasti akan muncul type error. Contohnya:

java
int angka = "satu" // error tipe data
String nama = 12   // error tipe data

Walaupun tipe data tidak dapat diubah, kebanyakan bahasa pemrograman menyediakan fitur untuk mengkonversi data yang sudah ada menjadi tipe data yang lain. Tentunya tanpa mengubah tipe dari variabel tersebut. Contohnya saja dengan type casting dan parsing.

java
double pecahan = 3.14d
int bulat = (int) pecahan // typecasting double ke int

String stringAngka = '12'
int angka = Integer.parseInt(stringAngka) // parsing string ke int

Ada juga statically typed language yang tidak memerlukan tipe data secara eksplisit. Bahasa ini melakukan pengecekan tipe data secara implisit langsung dari data yang dimasukkan. Contoh yang menggunakan gaya ini adalah Go. Berikut ini sintaksnya.

go
var a int = 12 // tipe data int secara eksplisit
var b = 12     // tipe data int implisit diambil dari data yang dimasukkan
c := 12        // varsi singkat dari baris di atas

Kelebihan

  • Meminimalisir bug — Pengecekan tipe data oleh kompiler dapat menghindari bug remeh yang berkaitan dengan tipe data. Jika ada kesalahan tipe data pasti kompiler akan langsung marah-marah.
  • Self documented code — Dengan tipe data pada setiap variabel, kita jadi punya gambaran yang jelas bagaimana variabel tersebut harus diperlakukan. Hal ini juga memungkinkan scaling program yang lebih mudah.
  • Meningkatkan DX — Fitur IDE seperti code completion dan code suggestion yang aktif tentunya dapat meningkatkan developer experience (DX). Belum lagi beberapa bahasa yang menyediakan formatter dan linter secara bawaan.
  • Performa lebih cepat — Karena ketika eksekusi tidak lagi dilakukan pengecekan, perintah kode bisa berjalan dengan lebih cepat.Hal ini juga berlaku untuk compiled language pada umumnya.

Kekurangan

  • Penulisan kode memakan waktu — Mulai dari merencanakan, memutuskan, hingga menulis tipe data pasti memakan waktu. Walaupun tidak signifikan, ini tetap membuat penulisan kode tersendat-sendat.
  • Kurang leluasa memanipulasi data — Karena variabel tidak bisa seenaknya diisi data, proses manipulasi data kadang membutuhkan banyak langkah-langkah.

Dynamic Typing

Jika static typing ada pada bahasa terkompilasi, dynamic typing biasanya ada pada bahasa terinterpretasi (interpreted language). Gaya penulisan ini memungkinkan programmer membuat variabel tanpa perlu memberikan tipe data.

Contoh dari dynamically typed language adalah Python, Javascript, Ruby, PHP, dan Perl. Sama seperti sebelumnya, mari kita bahas karakteristik, kelebihan, dan kekurangannya.

Karakteristik

Kebalikan dari static typing, dengan gaya penulisan dinamis kita tidak perlu menuliskan tipe data ketika membuat variabel. Pengecekan tipe akan dilakukan oleh interpreter ketika runtime berdasarkan data yang diberikan.

Contohnya dengan bahasa Python:

python
angka = 90    # variabel bertipe int
nama = 'inva' # variabel bertipe string 

Tipe dari data yang sudah dibuat juga dapat berubah sesuai keingingan. Interpreter secara otomatis mengubah tipe data ketika kita melakukan assignment.

Berbicara tentang operasi data, ada 2 gaya implementasi yang bisa dilakukan dengan dynamic typing. Strongly typed dan *weakly typed.*

Strongly typed language tidak mengijinkan programmer untuk melakukan operasi dari 2 tipe data yang berbeda. Sehingga, sebelum melakukan operasi harus dikonversi terlebih dahulu. Contoh bahasa dengan gaya ini adalah Python dan Ruby.

python
a = 1 + 'satu'      # muncul error
b = str(1) + 'satu' # harus dikonversi terlebih dahulu

Di sisi lain, weakly typed language mengijinkan programmer mengoperasikan 2 tipe data berbeda. Pada bahasa jenis ini, tipe data dikonversi secara otomatis oleh interpreter. Contohnya adalah Javascript dan PHP.

javascript
let a = 1 + 'satu' // hasilnya '1satu'
let b = true && [] // hasilnya []
let c = !![]       // hasilnya true — hmm..

Kelebihan

  • Penulisan kode lebih cepat — Karena tidak perlu memutuskan tipe data yang digunakan, penulisan dengan gaya ini relatif lebih cepat ketimbang dengan static typing.
  • Penyusunan logika lebih mudah — Variabel yang dapat berubah tipe data memungkinkan kita menggunakan variabel yang sama untuk banyak kebutuhan. Walau begitu, cara ini tidak disarankan karena dapat mempengaruhi keterbacaan kode.

Kekurangan

  • Rawan runtime error — Karena tidak ada proses kompilasi untuk mengecek tipe data, kemungkinan type error ketika program berjalan relatif tinggi jika programmer tidak hati-hati.
  • Kode sulit dibaca — Tidak adanya tipe data yang menempel pada variabel membuat programmer harus ekstra hati-hati dalam penamaan. Hal ini untuk menghindari ambigu ketika bekerja dengan variabel. Penggunaan komentar dokumentasi juga sangat disarankan.
  • Relatif lebih lambat — Dibanding dengan statically typed language, bahasa dengan gaya dinamis relatif lebih lambat. Ini karena kode program harus dicek oleh interpreter terlebih dahulu sebelum dieksekusi.

Singkatnya…

Jadi, terdapat 2 gaya penulisan dalam bahasa pemrograman.

  1. Static typing atau penulisan statis — yaitu ketika programmer diwajibkan menuliskan tipe data ketika membuat variabel. Pengecekan tipe data dilakukan ketika compile time oleh kompiler*.*
  2. Dynamic typing atau penulisan dinamis — yaitu ketika programmer tidak diharuskan menulis tipe data ketika membuat variabel. Pengecekan tipe dilakukan ketika runtime oleh interpreter.

Sekian, semoga bermanfaat. Happy coding 👋