Elixir Programlama Dili ile Başlarken

Yayınlanan: 2022-03-11

Blog gönderilerini, hacker haber dizilerini, en sevdiğiniz geliştiricilerin tweet'lerini veya podcast'lerini okuyorsanız, bu noktada muhtemelen Elixir programlama dilini duymuşsunuzdur. Dil, açık kaynak dünyasında iyi bilinen bir geliştirici olan Jose Valim tarafından oluşturuldu. Onu Ruby on Rails MVC çerçevesinden veya onun ve Plataformatec'teki iş arkadaşlarının son birkaç yıldır üzerinde çalıştığı deise and simple_form ruby ​​gems'inden tanıyor olabilirsiniz.

Jose Valim'e göre, Elixir 2011'de doğdu. Ruby dünyasındaki eşzamanlılık sorunlarını çözmek için iyi araçların olmaması nedeniyle yeni dili inşa etme fikri vardı. O sırada, eşzamanlılık ve dağıtılmış odaklı diller üzerinde çalışarak zaman geçirdikten sonra, JVM'de çalışan, sevdiği iki dil buldu: Erlang ve Clojure. Erlang dilinde (Erlang VM) gördüğü her şeyi severdi ve Clojure'un iyi olduğu polimorfizm, metaprogramlama ve dil genişletilebilirlik özellikleri gibi görmediği şeylerden nefret ederdi. Dolayısıyla Elixir, Clojure için bir alternatife ve Erlang Sanal Makinesinde iyi genişletilebilirlik desteğiyle çalışan dinamik bir dile sahip olmak için bu düşünceyle doğdu.

Elixir kendisini, basit, modern ve düzenli bir sözdizimi ile ölçeklenebilir ve sürdürülebilir uygulamalar oluşturmak için tasarlanmış, değişmez duruma ve aktör tabanlı eşzamanlılık yaklaşımına sahip dinamik, işlevsel bir dil olarak tanımlar. Dil, düşük gecikme süresi ve hata toleransı özellikleriyle bilinen, savaşa dayanıklı, yüksek performanslı ve dağıtılmış bir sanal makine olan Erlang Sanal Makinesi'nde çalışır.

Bazı kodları görmeden önce, Elixir'in büyüyen topluluk tarafından kabul edildiğini söylemeye değer. Elixir'i bugün öğrenmek istiyorsanız, Erlang yaratıcıları tarafından kabul edildiği gibi kitaplar, kütüphaneler, konferanslar, buluşmalar, podcast'ler, blog gönderileri, haber bültenleri ve her türlü öğrenme kaynağını kolayca bulacaksınız.

Biraz kod görelim!

Elixir'i yükleyin:

Elixir'i kurmak, tüm büyük platformlarda süper kolaydır ve çoğunda tek astardır.

Arch Linux

Elixir, Arch Linux'ta resmi depolar aracılığıyla mevcuttur:

 pacman -S elixir

Ubuntu

Elixir'i Ubuntu'ya kurmak biraz derli toplu. Ama yine de yeterince kolay.

 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

Homebrew kullanarak Elixir'i OS X'e yükleyin.

 brew install elixir

IEx ile tanışın

Kurulum tamamlandıktan sonra kabuğunuzu açmanın zamanı geldi. Elixir'de gelişmek istiyorsanız kabuğunuzda çok zaman geçireceksiniz.

Elixir'in etkileşimli kabuğu veya IEx, Elixir'i keşfedebileceğiniz bir REPL - (Baskı Döngüsünü Değerlendir'i Okuyun). Buraya ifadeler girebilirsiniz ve bunlar size anında geri bildirim verilerek değerlendirilecektir. Kodunuzun gerçekten değerlendirildiğini ve derlenmediğini unutmayın, bu nedenle kabukta profil oluşturma veya kıyaslama yapmadığınızdan emin olun.

Bir IEx REPL demosu.

Break Komutu

IEx REPL'yi başlatmadan önce bilmeniz gereken önemli bir şey var - ondan nasıl çıkılacağı.

Muhtemelen terminalde çalışan programları kapatmak için CTRL+C basmaya alışmışsınızdır. IEx REPL'de CTRL+C basarsanız, Break Menüsünü açacaksınız. Break menüsüne girdikten sonra, kabuktan çıkmak için CTRL+C tekrar basabilir ve a .

IEx REPL'den çıkılıyor.

Mola menüsü işlevlerine dalmayacağım. Ancak, birkaç IEx yardımcısını görelim!

yardımcılar

IEx, hepsini listelemek için bir grup yardımcı sağlar: h() .

Ve görmen gereken şu:

IEx yardımcıları.

Bunlar benim favorilerimden bazıları, sizin de olacağını düşünüyorum.

  • h az önce gördüğümüz gibi, bu fonksiyon yardımcı mesajı yazdıracaktır.
  • h/1 aynı işlevdir, ancak şimdi bir argüman bekliyor.

Örneğin, String strip/2 yönteminin belgelerini ne zaman görmek isterseniz kolayca şunları yapabilirsiniz:

IEx: Belgeleri kontrol etme.

Muhtemelen Elixir'de programlama yaparken kullanacağınız en kullanışlı ikinci IEx yardımcısı, verilen bir iksir dosyasını (veya bir listeyi) derleyen ve ikinci bir parametre olarak derlenmiş dosyaları yazmak için bir yol bekleyen c/2 'dir.

Diyelim ki http://exercism.io/ Elixir egzersizlerinden biri olan Anagram egzersizinde çalışıyorsunuz.

Böylece anagram.exs dosyasında match/2 yöntemine sahip Anagram modülünü uyguladınız. İyi bir geliştirici olarak, her şeyin beklendiği gibi çalıştığından emin olmak için birkaç özellik yazdınız.

Geçerli dizininiz şöyle görünür:

Bu İksir projesi için dizin listesi.

Şimdi, testlerinizi Anagram modülüne karşı çalıştırmak için testleri çalıştırmanız/derlemeniz gerekir.

Testleri Elixir'de çalıştırma.

Az önce gördüğünüz gibi, bir dosyayı derlemek için, derlemek istediğiniz dosyaya argüman yolu olarak geçen elixir yürütülebilir dosyasını çağırmanız yeterlidir.

Şimdi, oturum bağlamında erişilebilir Anagram modülü ile IEx REPL'yi çalıştırmak istediğinizi varsayalım. Yaygın olarak kullanılan iki seçenek vardır. Birincisi, iex -r anagram.exs gibi bir şey olan -r seçeneklerini kullanarak dosyayı gerektirebilirsiniz. İkincisi, doğrudan IEx oturumundan derleyebilirsiniz.

Doğrudan bir IEx oturumundan derleme.

Basit, aynen böyle!

Tamam, peki ya bir modülü yeniden derlemek istersen? IEx'ten çıkmalı, tekrar çalıştırmalı ve dosyayı tekrar derlemeli misiniz? Hayır! İyi bir hafızanız varsa, IEx REPL'de bulunan tüm yardımcıları listelediğimizde, yeniden derleme komutu hakkında bir şey gördüğümüzü hatırlayacaksınız. Nasıl çalıştığını görelim.

IEx'te yeniden derleme.

Bu sefer, argüman olarak dosya yolunu değil modülün kendisini ilettiğinize dikkat edin.

Gördüğümüz gibi, IEx, bir Elixir programının nasıl çalıştığını daha iyi öğrenmenize ve anlamanıza yardımcı olacak bir dizi başka faydalı yardımcıya sahiptir.

İksir Türlerinin Temelleri

sayılar

İki tür sayı vardır. Keyfi boyutlu tam sayılar ve kayan nokta sayıları.

tamsayılar

Tamsayılar ondalık, onaltılık, sekizlik ve ikili olarak yazılabilir.

Ruby'de olduğu gibi, büyük sayılar yazarken üç basamaklı grupları ayırmak için alt çizgi kullanabilirsiniz. Örneğin yüz milyonu şöyle düzeltebilirsin:

 100_000_000

Sekizli:

 0o444

onaltılık:

 0xabc

İkili:

 0b1011

yüzer

Floare, IEEE 754 çift duyarlıklıdır. 16 basamaklı doğrulukları ve yaklaşık 10308'lik bir maksimum üsleri vardır.

Şamandıralar ondalık nokta kullanılarak yazılır. Noktadan önce ve sonra en az bir rakam olmalıdır. Sondaki bir üs de ekleyebilirsiniz. Örneğin 1.0, 0.3141589e1 ve 314159.0-e.

atomlar

Atomlar isimleri temsil eden sabitlerdir. Değişmez değerlerdir. Başında iki nokta üst üste : olan bir atom ve bir dizi harf, rakam, alt çizgi ve @ işaretleriyle yazarsınız. Bunları, başında iki nokta üst üste : ve tırnak içine alınmış rastgele bir karakter dizisiyle de yazabilirsiniz.

Atomlar çok güçlü bir araçtır, erlang işlevlerine, anahtarlara ve İksir yöntemlerine başvurmak için kullanılırlar.

İşte birkaç geçerli atom.

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

Boole değerleri

Elbette, boole değerleri doğru ve yanlış değerlerdir. Ama onlarla ilgili güzel olan şey, günün sonunda, onlar sadece atomlar.

Booleanlar, IEx ile kanıtlandığı gibi sadece atomlardır.

Teller

Elixir'deki dizeler varsayılan olarak UTF-8 uyumludur. Bunları kullanmak için, " veya ' içine alınmış rastgele sayıda karaktere sahip olabilirsiniz. Ayrıca, çıkış karakterlerinin yanı sıra dize içinde enterpolasyonlu ifadelere de sahip olabilirsiniz.

İksir dizisi enterpolasyonu.

Tek tırnaklı dizelerin aslında bir ikili dosyalar listesi olduğunu unutmayın.

Elixir'de tek tırnaklı dize davranışı.

Anonim İşlevler

İşlevsel bir dil olarak Elixir, temel bir tür olarak anonim işlevlere sahiptir. Bir işlev yazmanın basit bir yolu fn (argument_list) -> body end . Ancak bir işlevin birden çok bağımsız değişken listesi, koruma yan tümcesi vb. içeren birden çok gövdesi olabilir.

Dave Thomas, Programlama İksiri kitabında, fn…end'i bir dize değişmezini çevreleyen tırnak işaretleri olarak düşünmemizi önerir, burada bir dize değeri döndürmek yerine bir işlev döndürürüz.

Bir İksir işlevi döndürme.

demetler

Tuple, değişmez bir dizine alınmış dizidir. Değişmez doğası nedeniyle boyutunu döndürmek için hızlı ve yeni değerler eklemek için yavaştırlar. Bir demeti güncellerken, aslında demetin kendisinin tamamen yeni bir kopyasını yaratıyorsunuz.

Tuple'lar genellikle bir dizinin dönüş değeri olarak kullanılır. Elixir'de kod yazarken bunu çok sık göreceksiniz, {:ok, something_else_here} .

Bir demeti şu şekilde yazıyoruz: {?a,?b,?c} .

Desen Eşleştirme

Kalıp Eşleştirme hakkında bilmeniz gereken her şeyi açıklayamayacağım, ancak birazdan okuyacaklarınız, başlamak için bilmeniz gerekenlerin çoğunu kapsıyor.

Elixir, eşleşme operatörü olarak = kullanır. Bunu anlamak için, diğer geleneksel dillerde = hakkında bildiklerimizi unutmamız gerekiyor. Geleneksel dillerde eşittir operatörü atama içindir. Elixir'de eşittir operatörleri kalıp eşleştirme içindir.

Yani sol taraftaki değerler bu şekilde çalışıyor. Değişkenlerse sağ tarafa bağlıdırlar, değişken değillerse iksir onları sağ tarafla eşleştirmeye çalışır.

İksir desen eşleştirme demosu.

Pin Operatörü

Elixir, sol taraftaki değişken olan pin operatörüne karşı desen eşleştirmeyi her zaman zorlamak için bir yol sağlar.

İksir pin operatörü demosu.

Listeler

Elixir'de Listeler, diğer dillerden bildiğimiz gibi dizilere benziyor ama değiller. Listeler, bir baş ve bir kuyruktan oluşan bağlantılı yapılardır.

İksir listesi davranışı.

Anahtar Kelime Listeleri

Anahtar Kelime Listeleri, Tuple çiftlerinin bir listesidir.

Bunları listeler halinde yazmanız yeterlidir. Örneğin: [{:bir, 1}, 2, {:üç, 3}]. Listeleri tanımlamanın bir kısayolu vardır, şöyle görünür: [bir: 1, üç: 3].

Bir anahtar kelime listesinden bir öğeyi almak için şunları kullanabilirsiniz:

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

Veya kısayolu kullanın:

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

Bir değeri alırken anahtar kelime listeleri yavaş olduğundan, bu pahalı bir işlemdir, bu nedenle hızlı erişim gerektiren verileri depoluyorsanız bir Harita kullanmalısınız.

Haritalar

Haritalar, anahtar/değer çiftlerinin verimli bir koleksiyonudur. Anahtar, anahtar olarak istediğiniz herhangi bir değere sahip olabilir, ancak genellikle aynı türde olmalıdır. Anahtar kelime listelerinden farklı olarak, Haritalar belirli bir anahtar için yalnızca bir girişe izin verir. Büyüdükçe verimlidirler ve bir ilişkisel diziye ihtiyacınız olduğunda genel kullanım haritalarında İksir desen eşleştirmesinde kullanılabilirler.

Haritayı şu şekilde yazabilirsiniz:

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

Çözüm

Elixir harika, anlaşılması kolay, basit ama güçlü türleri ve öğrenmeye başladığınızda size yardımcı olacak çok kullanışlı araçları var. Bu ilk bölümde, Elixir programlarının üzerine inşa edildiği çeşitli veri türlerini ve bunlara güç sağlayan operatörleri ele aldık. İlerleyen bölümlerde, işlevsel ve eşzamanlı programlama olan Elixir dünyasına daha derinden dalacağız.

İlgili: Ön Uç Geliştirme için ClojureScript'i Ortaya Çıkarma