Elixir Programlama Dili ile Başlarken
Yayınlanan: 2022-03-11Blog 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.
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
.
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:
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:
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:
Şimdi, testlerinizi Anagram modülüne karşı çalıştırmak için testleri çalıştırmanız/derlemeniz gerekir.
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.
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.
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.
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.
Tek tırnaklı dizelerin aslında bir ikili dosyalar listesi olduğunu unutmayın.
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.
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.
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.
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.
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.