Dalam
dunia pemrograman komputer, ada banyak sekali jargon atau istilah yang
dapat membuat pemula yang baru belajar mengalami kebingungan. Berikut
ini beberapa istilah yang dapat membantu Anda memahami bahasa
pemrograman yang sedang Anda pelajari.
- Dynamic typing
Suatu
saat Anda sedang mengobrol dengan teman sesama pemrogram dan dia
berkata, “Ah, saya malas pakai JavaScript soalnya dia bahasanya dynamic typing. Lebih yakin kalau saya ngoding pakai TypeScript yang static typing.” Apa artinya?
Dynamic
typing adalah karakteristik dari bahasa pemrograman yang tidak perlu
mendefinisikan tipe data yang akan digunakan pada saat Anda membuat
variabel dan fungsi. Interpreter dari bahasa tersebut yang akan menebak tipe data apa yang akan digunakan pada saat program dijalankan.
Kelemahan dari bahasa dynamic typing adalah pengecekan tipe data baru dilakukan saat program berjalan (di runtime process), sehingga kalo ada tipe data yang tidak sesuai maka program akan crash. Misal
sebuah fungsi yang Anda buat seharusnya menerima parameter berbentuk
String, ternyata yang Anda masukkan malah Array maka program akan crash saat program sudah berjalan.
Sedangkan keuntungannya, proses pengembangan program akan lebih cepat karena Anda tidak perlu menentukan tipe data secara strict di fase coding. Bahasa-bahasa yang menggunakan dynamic typing cocok digunakan untuk melakukan prototyping atau untuk membangun program yang memiliki kebutuhan mengubah-ngubah fitur dalam waktu cepat.
Beberapa contoh bahasa yang sifatnya dynamic typing, yaitu JavaScript, PHP, Ruby, Clojure, R, dan Python.
- Static typing
Kebalikan dari dynamic typing, static typing
merupakan sifat dari bahasa pemrograman yang membutuhkan definisi tipe
data secara eksplisit saat Anda membuat variabel dan fungsi. Biasanya
bahasa-bahasa yang sifatnya static typing membutuhkan satu proses tambahan yang bernama kompilasi atau build process. Pada saat ini lah pengecekan seluruh kesalahan dilakukan oleh compiler, sehingga program yang sudah sukses dikompilasi sudah hampir bisa dipastikan berjalan mulus pada saat runtime process.
Kelemahannya menggunakan bahasa yang static typing adalah
proses pengembangan program akan lebih lambat dari sisi waktu. Karena
setiap Anda selesai melakukan pemrograman dan ingin mencoba menjalankan,
maka Anda akan menunggu beberapa saat untuk menyelesaikan proses
kompilasi kode Anda.
Sedangkan
keuntungannya, program yang Anda hasilkan akan menjadi lebih stabil
saat dijalankan. Karena sebagian besar kesalahan sudah ditangkap pada
saat proses kompilasi atau build. Bahasa-bahasa static typing cocok digunakan jika Anda membangun program yang sifatnya critical atau tidak boleh ada kesalahan pada saat program berjalan, misal sistem perbankan, firmware untuk microcontroller, payment gateway, dll.
Beberapa contoh bahasanya yaitu Java, C, C++, C# (sebelum versi 3.0), dan TypeScript.
- Type inference
Type inference
banyak digunakan oleh bahasa-bahasa pemrograman yang relatif baru. Ini
merupakan teknik gabungan antara kemudahan pemrograman pada dynamic typing dan keamanan pada static typing.
Tetap membutuhkan proses kompilasi, tetapi Anda tidak perlu
mendeklarasikan tipe data secara eksplisit pada saat membuat variabel
dan fungsi karena compiler-nya sudah pintar untuk menebak tipe data yang Anda gunakan.
Beberapa contoh bahasanya yaitu C# (versi 3.0 ke atas), F#, Kotlin, Scala, Haskell, OCaml, dan Swift.
- Interpreter
Interpreter adalah program yang menerjemahkan high-level language menjadi Byte Code untuk kemudian dijadikan bahasa yang dapat dimengerti oleh komputer (machine code). High-level language adalah bahasa pemrograman yang mendekati bahasa Inggris sehari-hari, seperti Java, JavaScript, PHP, Ruby, dan sebagainya.
Cara kerja interpreter:
- Anda menulis kode program menggunakan aplikasi penyunting teks, seperti Sublime, Atom, Visual Studio Code, atau Notepad++.
- Saat Anda menjalankan kode program yang sudah ditulis, maka interpreter akan menjalankan kode program Anda baris per baris. Analisa satu baris, tidak ada kesalahan, jadikan machine code, dan eksekusi; lalu analisa baris berikutnya dan seterusnya.
Itu lah mengapa interpreted language
seperti PHP, JavaScript, Python, dan Ruby sering dikeluhkan orang
sebagai bahasa dengan performa yang lambat jika dibandingkan dengan compiled language. Karena pengecekan dilakukan di runtime process.
Beberapa interpreted language memiliki
mesin virtual untuk menjalankan program yang dihasilkan untuk
mendongkrak performa agar lebih cepat saat eksekusi program. Contohnya
Java dan aneka bahasa turunannya — seperti Scala, Clojure, dan
Kotlin — yang berjalan di atas Java Virtual Machine, atau Erlang dan
aneka bahasa turunannya — seperti Elixir dan LFE — yang berjalan di atas
BEAM Virtual Machine.
- Compiler
Compiler memiliki fungsi yang sama dengan interpreter, yaitu menterjemahkan high-level language menjadi machine code (biner 1 dan 0). Perbedaannya compiler tidak menterjemahkan kode yang Anda tulis menjadi Byte Code terlebih dahulu, akan tetapi langsung menjadi machine code.
Cara kerja compiler:
- Anda menulis kode program menggunakan aplikasi penyunting teks, seperti Sublime, Atom, Visual Studio Code, atau Notepad++.
- Jalankan proses build. Di sini compiler akan bekerja dengan cara menganalisa keseluruhan baris program dari semua berkas yang sudah Anda tulis apakah ada kesalahan atau tidak. Jika tidak ada kesalahan sama sekali compiler akan menghasilkan program biner yang dapat dijalankan oleh komputer.
Hal ini lah yang membuat compiled language
seperti C, C++, Swift, Go, dan OCaml sering digunakan untuk membuat
aplikasi yang membutuhkan performa yang sangat tinggi. Karena program
yang dihasilkan sudah siap dijalankan, tidak ada analisa baris per baris
di runtime process seperti pada interpreted language.
Gambar di bawah ini adalah perbedaan cara kerja compiler dan interpreter. Menggunakan contoh bahasa pemrograman C dan Java. Pada bahasa pemrograman C, kode yang Anda tulis akan diubah menjadi machine code yang
spesifik dengan arsitektur prosesor dan sistem operasi yang Anda
gunakan. Itu sebabnya program yang dikompilasi untuk Windows tidak dapat
Anda jalankan di Linux atau Mac, sekalipun kode program yang Anda tulis
sama.
Berbeda dengan Java, Anda bisa menjalankan program yang dihasilkan oleh interpreter
Java yang masih berupa Byte Code di sistem operasi apa pun, selama di
sistem operasi tersebut sudah Anda pasang Java Virtual Machine.
Secara
performa, program yang ditulis dengan menggunakan C biasanya akan lebih
cepat dibanding program yang ditulis dengan menggunakan Java.

Perbedaan cara kerja compiler dan interpreter.
Kesimpulannya interpreted language dan compiled language memiliki kelebihan dan kekurangan masing-masing. Compiled language
memiliki performa yang lebih tinggi bukan berarti akan selalu baik jika
digunakan di setiap kasus atau problem yang mau Anda pecahkan. Ada
faktor lain yang harus Anda pertimbangkan selain hanya masalah performa.
Misal
membangun sebuah Web sederhana, jelas akan memakan waktu yang lama jika
Anda bangun dengan menggunakan C, tetapi akan sangat hemat waktu
pengembangan jika Anda menggunakan PHP atau Node.js. Itu lah mengapa Web
besar semacam Instagram dibangun menggunakan berbagai macam bahasa,
seperti Python (interpreted language) untuk Web-nya yang berhadapan dengan pengguna dan C (compiled language) untuk layanan di belakang layar yang membutuhkan performa dengan kecepatan tinggi semacam image processing.









Tidak ada komentar:
Posting Komentar