Memulai dengan Bahasa Pemrograman Elixir

Diterbitkan: 2022-03-11

Jika Anda telah membaca posting blog, utas berita peretas, tweet pengembang favorit Anda, atau mendengarkan podcast, pada titik ini Anda mungkin pernah mendengar tentang bahasa pemrograman Elixir. Bahasa ini dibuat oleh Jose Valim, seorang pengembang terkenal di dunia open-source. Anda mungkin mengenalnya dari kerangka kerja MVC Ruby on Rails atau dari permata ruby ​​rancang dan simple_form yang telah dikerjakannya dan rekan kerjanya dari Plataformatec dalam beberapa tahun terakhir.

Menurut Jose Valim, Elixir lahir pada tahun 2011. Dia memiliki ide untuk membangun bahasa baru karena kurangnya alat yang baik untuk menyelesaikan masalah konkurensi di dunia ruby. Saat itu, setelah menghabiskan waktu mempelajari konkurensi dan mendistribusikan bahasa terfokus, dia menemukan dua bahasa yang dia sukai, Erlang dan Clojure yang berjalan di JVM. Dia menyukai semua yang dia lihat dalam bahasa Erlang (Erlang VM) dan dia membenci hal-hal yang tidak dia lihat, seperti atribut polimorfisme, metaprogramming, dan perluasan bahasa yang dikuasai Clojure. Jadi, Elixir lahir dengan pemikiran itu, untuk memiliki alternatif untuk Clojure dan bahasa dinamis yang berjalan di Mesin Virtual Erlang dengan dukungan perpanjangan yang baik.

Elixir menggambarkan dirinya sebagai bahasa yang dinamis dan fungsional dengan status yang tidak dapat diubah dan pendekatan berbasis aktor untuk konkurensi yang dirancang untuk membangun aplikasi yang dapat diskalakan dan dapat dipelihara dengan sintaks yang sederhana, modern, dan rapi. Bahasa ini berjalan di Erlang Virtual Machine, mesin virtual yang tahan pertempuran, berkinerja tinggi, dan terdistribusi yang dikenal dengan latensi rendah dan karakteristik toleransi kesalahan.

Sebelum kita melihat beberapa kode, ada baiknya mengatakan bahwa Elixir telah diterima oleh komunitas yang sedang berkembang. Jika Anda ingin mempelajari Elixir hari ini, Anda akan dengan mudah menemukan buku, perpustakaan, konferensi, pertemuan, podcast, posting blog, buletin, dan segala macam sumber belajar di luar sana serta diterima oleh pencipta Erlang.

Mari kita lihat beberapa kode!

Instal Elixir:

Menginstal Elixir sangat mudah di semua platform utama dan merupakan one-liner di sebagian besar platform.

Arch Linux

Elixir tersedia di Arch Linux melalui repositori resmi:

 pacman -S elixir

Ubuntu

Menginstal Elixir di Ubuntu agak merepotkan. Tapi itu cukup mudah.

 wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb apt-get update apt-get install esl-erlang apt-get install elixir

OS X

Instal Elixir di OS X menggunakan Homebrew.

 brew install elixir

Temui IEx

Setelah instalasi selesai, saatnya untuk membuka shell Anda. Anda akan menghabiskan banyak waktu di shell Anda jika Anda ingin mengembangkan di Elixir.

Shell interaktif Elixir atau IEx adalah REPL - (Baca Evaluasi Cetak Loop) di mana Anda dapat menjelajahi Elixir. Anda dapat memasukkan ekspresi di sana dan mereka akan dievaluasi memberikan Anda umpan balik segera. Ingatlah bahwa kode Anda benar-benar dievaluasi dan tidak dikompilasi, jadi pastikan untuk tidak menjalankan profil atau benchmark di shell.

Demo REPL IEx.

Perintah Istirahat

Ada hal penting yang perlu Anda ketahui sebelum memulai IEx REPL - cara keluar darinya.

Anda mungkin terbiasa menekan CTRL+C untuk menutup program yang berjalan di terminal. Jika Anda menekan CTRL+C di IEx REPL, Anda akan membuka Menu Istirahat. Setelah berada di menu istirahat, Anda dapat menekan CTRL+C lagi untuk keluar dari shell serta menekan a .

Keluar dari REPL IEx.

Saya tidak akan menyelami fungsi menu istirahat. Tapi, mari kita lihat beberapa pembantu IEx!

pembantu

IEx menyediakan banyak pembantu, untuk mendaftar semuanya ketik: h() .

Dan inilah yang harus Anda lihat:

pembantu IEx.

Itu adalah beberapa favorit saya, saya pikir itu akan menjadi milik Anda juga.

  • h seperti yang baru saja kita lihat, fungsi ini akan mencetak pesan pembantu.
  • h/1 yang merupakan fungsi yang sama, tetapi sekarang ia mengharapkan satu argumen.

Misalnya, kapan pun Anda ingin melihat dokumentasi metode String strip/2 Anda dapat dengan mudah melakukannya:

IEx: Memeriksa dokumen.

Mungkin helper IEx paling berguna kedua yang akan Anda gunakan saat memprogram di Elixir adalah c/2 , yang mengkompilasi file elixir yang diberikan (atau daftar) dan mengharapkan sebagai parameter kedua jalur untuk menulis file yang dikompilasi.

Katakanlah Anda bekerja di salah satu latihan http://exercism.io/ Elixir, latihan Anagram.

Jadi Anda telah mengimplementasikan modul Anagram , yang memiliki metode match/2 di file anagram.exs. Sebagai pengembang yang baik, Anda telah menulis beberapa spesifikasi untuk memastikan semuanya berfungsi seperti yang diharapkan juga.

Beginilah tampilan direktori Anda saat ini:

Daftar direktori untuk proyek Elixir ini.

Sekarang, untuk menjalankan pengujian terhadap modul Anagram, Anda perlu menjalankan/mengkompilasi pengujian.

Menjalankan tes di Elixir.

Seperti yang baru saja Anda lihat, untuk mengompilasi file, cukup panggil elixir yang dapat dieksekusi lewat sebagai jalur argumen ke file yang ingin Anda kompilasi.

Sekarang katakanlah Anda ingin menjalankan IEx REPL dengan modul Anagram yang dapat diakses dalam konteks sesi. Ada dua opsi yang umum digunakan. Yang pertama adalah Anda dapat meminta file dengan menggunakan opsi -r , seperti iex -r anagram.exs . Yang kedua, Anda dapat mengkompilasi langsung dari sesi IEx.

Kompilasi langsung dari sesi IEx.

Sederhana, begitu saja!

Ok, bagaimana jika Anda ingin mengkompilasi ulang modul? Haruskah Anda keluar dari IEx, menjalankannya lagi dan mengkompilasi file lagi? Tidak! Jika Anda memiliki memori yang baik, Anda akan ingat bahwa ketika kami mendaftar semua pembantu yang tersedia di REPL IEx, kami melihat sesuatu tentang perintah recompile. Mari kita lihat cara kerjanya.

Kompilasi ulang di IEx.

Perhatikan bahwa kali ini, Anda meneruskan modul itu sendiri sebagai argumen dan bukan jalur file.

Seperti yang kita lihat, IEx memiliki banyak pembantu berguna lainnya yang akan membantu Anda mempelajari dan memahami lebih baik cara kerja program Elixir.

Dasar-dasar Jenis Elixir

angka

Ada dua jenis angka. Bilangan bulat berukuran arbitrer dan angka floating point.

bilangan bulat

Bilangan bulat dapat ditulis dalam basis desimal, heksadesimal, oktal dan biner.

Seperti di Ruby, Anda dapat menggunakan garis bawah untuk memisahkan kelompok tiga digit saat menulis angka besar. Misalnya Anda bisa memperbaiki seratus juta seperti ini:

 100_000_000

Oktal:

 0o444

Heksadesimal:

 0xabc

Biner:

 0b1011

mengapung

Floare adalah presisi ganda IEEE 754. Mereka memiliki 16 digit akurasi dan eksponen maksimum sekitar 10308.

Float ditulis menggunakan titik desimal. Harus ada setidaknya satu digit sebelum dan sesudah titik. Anda juga dapat menambahkan eksponen tambahan. Misalnya 1.0, 0.3141589e1, dan 314159,0-e.

atom

Atom adalah konstanta yang mewakili nama. Mereka adalah nilai-nilai yang tidak dapat diubah. Anda menulis sebuah atom dengan titik dua di depan : dan urutan huruf, angka, garis bawah, dan tanda @ . Anda juga dapat menulisnya dengan tanda titik dua di depan : dan urutan karakter arbitrer yang diapit oleh tanda kutip.

Atom adalah alat yang sangat kuat, mereka digunakan untuk mereferensikan fungsi erlang serta kunci dan metode Elixir.

Berikut adalah beberapa atom yang valid.

 :name, :first_name, :"last name", :===, :is_it_@_question?

Boolean

Tentu saja, boolean adalah nilai benar dan salah. Tetapi hal yang menyenangkan tentang mereka adalah pada akhirnya, mereka hanyalah atom.

Boolean hanyalah atom, sebagaimana dibuktikan melalui IEx.

string

Secara default, string dalam Elixir sesuai dengan UTF-8. Untuk menggunakannya, Anda dapat memiliki sejumlah karakter yang diapit oleh " atau ' . Anda juga dapat memiliki ekspresi yang diinterpolasi di dalam string serta karakter yang diloloskan.

Interpolasi string eliksir.

Ketahuilah bahwa string yang dikutip tunggal sebenarnya adalah daftar binari.

Perilaku string yang dikutip tunggal di Elixir.

Fungsi Anonim

Sebagai bahasa fungsional, Elixir memiliki fungsi anonim sebagai tipe dasar. Cara sederhana untuk menulis fungsi adalah fn (argument_list) -> body end . Tetapi suatu fungsi dapat memiliki banyak badan dengan beberapa daftar argumen, klausa penjaga, dan sebagainya.

Dave Thomas, dalam buku Programming Elixir, menyarankan agar kita menganggap fn…end sebagai tanda kutip yang mengelilingi string literal, di mana alih-alih mengembalikan nilai string, kita mengembalikan fungsi.

Mengembalikan fungsi Elixir.

Tuple

Tuple adalah array terindeks yang tidak dapat diubah. Mereka cepat mengembalikan ukurannya dan lambat menambahkan nilai baru karena sifatnya yang tidak dapat diubah. Saat memperbarui tuple, Anda sebenarnya membuat salinan baru dari tuple sendiri.

Tuple sangat sering digunakan sebagai nilai kembalian dari sebuah array. Saat coding di Elixir Anda akan sangat sering melihat ini, {:ok, something_else_here} .

Inilah cara kita menulis tupel: {?a,?b,?c} .

Pencocokan Pola

Saya tidak akan dapat menjelaskan semua yang perlu Anda ketahui tentang Pencocokan Pola, namun apa yang akan Anda baca mencakup banyak hal yang perlu Anda ketahui untuk memulai.

Elixir menggunakan = sebagai operator pertandingan. Untuk memahami ini, kita perlu melupakan apa yang kita ketahui tentang = dalam bahasa tradisional lainnya. Dalam bahasa tradisional operator equals adalah untuk penugasan. Di Elixir, operator equals adalah untuk pencocokan pola.

Jadi, begitulah cara kerjanya nilai di sisi kiri. Jika mereka adalah variabel, mereka terikat ke sisi kanan, jika mereka bukan variabel, elixir mencoba mencocokkannya dengan sisi kanan.

Demo pencocokan pola elixir.

Pin Operator

Elixir menyediakan cara untuk selalu memaksa pencocokan pola terhadap variabel di sisi kiri, operator pin.

Demo operator pin eliksir.

Daftar

Di Elixir, Daftar terlihat seperti array seperti yang kita ketahui dari bahasa lain tetapi sebenarnya tidak. Daftar adalah struktur terkait yang terdiri dari kepala dan ekor.

Perilaku daftar eliksir.

Daftar Kata Kunci

Daftar Kata Kunci adalah daftar pasangan Tuple.

Anda cukup menuliskannya sebagai daftar. Misalnya: [{:satu, 1}, 2, {:tiga, 3}]. Ada jalan pintas untuk mendefinisikan daftar, begini tampilannya: [satu: 1, tiga: 3].

Untuk mengambil item dari daftar kata kunci, Anda dapat menggunakan:

 Keyword.get([{:one, 1}, 2, {:three, 3}], :one)

Atau gunakan pintasan:

 [{:one, 1}, 2, {:three, 3}][:one]

Karena daftar kata kunci lambat saat mengambil nilai, di dalamnya adalah operasi yang mahal, jadi jika Anda menyimpan data yang membutuhkan akses cepat, Anda harus menggunakan Peta.

peta

Peta adalah kumpulan pasangan kunci/nilai yang efisien. Kunci dapat memiliki nilai apa pun yang Anda inginkan sebagai kunci, tetapi biasanya jenisnya harus sama. Berbeda dari daftar kata kunci, Maps hanya mengizinkan satu entri untuk kunci tertentu. Mereka efisien saat mereka tumbuh dan mereka dapat digunakan dalam pencocokan pola Elixir di peta penggunaan umum saat Anda membutuhkan array asosiatif.

Inilah cara Anda dapat menulis Peta:

 %{ :one => 1, :two => 2, 3 => 3, "four" => 4, [] => %{}, {} => [k: :v]}

Kesimpulan

Elixir luar biasa, mudah dimengerti, memiliki tipe sederhana namun kuat dan perkakas yang sangat berguna di sekitarnya yang akan membantu Anda saat mulai belajar. Pada bagian pertama ini, kita telah membahas berbagai tipe data yang digunakan oleh program Elixir dan operator yang menjalankannya. Di bagian selanjutnya kita akan menyelam lebih dalam ke dunia Elixir - pemrograman fungsional dan bersamaan.

Terkait: Menggali ClojureScript untuk Pengembangan Front-end