Magik

**Magik** adalah bahasa pemrograman berorientasi objek yang memiliki karakteristik yaitu mendukung pewarisan berganda, *polimorfism*, dan tanpa adanya deklarasi tipe data seperti pada bahasa Smalltalk dan banyak bahasa script lainnya. Dikembangkan dan dipasarkan oleh GE Energy yang berbasis pada teknologi Smallworld dan didisain khusus untuk memenuhi kebutuhan aplikasi GIS yang sangat kompleks yang dibutuhkan oleh perusahaan besar seperti penyedia tenaga listrik dan telekomunikasi.

Magik pertama kali diperkenalkan pada tahun 1990 dan terus mengalami penyempurnaan hingga saat ini sudah mencapai versi Magik VM 6.12.8 SF (Small Footprint).

## Kemiripan dengan SmallTalk

Ada beberapa kemiripan Magik dengan bahasa Smalltalk yaitu dalam fitur-fitur yang disediakan maupun arsitekturnya sendiri. Magik dikompilasi menjadi serangkaian kode binari yang diterjemahkan oleh *Magik [[Virtual Machine]]*. Magik Virtual Machine ini tersedia dalam berbagai platform sistem operasi termasuk Microsoft Windows, dan beberapa versi Linux dan Unix.

Bahasa Magik sendiri adalah berbasis Console (editor yang sering dipakai adalah GNU Emacs) dan kode program dapat langsung dimodifikasi meskipun aplikasi sedang berjalan. Console juga dapat digunakan untuk mengeksekusi baris perintah Magik dan melihat hasilnya.

Baris kode yang terkompilasi disimpan dalam satu file yang disebut *Image File*. Selain itu image file juga menyimpan segala perubahan yang terjadi pada saat sesi tersebut terakhir disimpan.

## Fitur-fitur yang disediakan

;Komentar
Magik menggunakan token `#` untuk menandai suatu baris yang ingin dijadikan komentar.

  # Ini adalah contoh cara membuat komentar dalam bahasa magik

;Assignments / Penugasan
Magik menggunakan operator `<<` yang menandakan pemberian suatu penugasan:

  adef_slotted_exemplar(), sebagai contoh:

  def_slotted_exemplar(:objek_ku,
  {
    {:slot_a,34},
    {:slot_b,"hallo"}
  },{:objek_a,:objek_b})

Baris perintah di atas dapat diartikan bahwa kita membuat suatu kelas baru dengan nama:objek_ku yang memiliki dua buah field yaitu:slot_a yang berisi nilai 34 dan:slot_b yang berisi kata "hallo" dan kelas ini mewarisi dari dua buah exemplars yang sudah ada yaitu:objek_a dan:objek_b.

;Comparison / Perbandingan
Magik seperti bahasa yang lain juga menggunakan binari operator (`=`, `<`, `<=`, `>`, `>=`, `~=/<>`) untuk perbandingan.
Operator `_is` and `_isnt` juga dipakai sebagai perbandingan dan biasanya digunakan untuk membandingkan antara dua buah instan objek.

Contoh:

  a _method dan `_endmethod`:

  _method objek_ku.method_ku (a, b)
    _return a+b
  _endmethod

Methods bisa dijadikan private (tidak untuk digunakan oleh public) dengan menggunakan baris perintah `_private`. Private methods ini hanya dapat dipanggil dengan baris perintah `_self`, `_super` and `_clone`.

;Iteration / Iterasi
Iterasi dalam Magik menggunakan baris perintah `_for`, `_over`, `_loop` and `_endloop`.

  _method objek_ku.method_ku (_gather values)
    total_proc and `_endproc`.

  procedure_ku<<_proc @procedure_ku (a, b, c)
    _return a+b+c
  _endproc

  x<<procedure_ku(1,2,3) # x=6

;Ejaan khusus
Karena Magik awalnya dikembangkan di Inggris, method-method yang ada di dalam Smallworld Core menggunakan ejaan *British* bukan *American*. Contohnya:

   Gunakan kata "initialise", bukan "initialize".