İksir - Mühürler
Bu bölümde, metinsel temsillerle çalışmak için dilin sağladığı mekanizmalar olan işaretleri inceleyeceğiz. İşaretler tilde (~) karakteriyle başlar, ardından bir harf (bu işareti tanımlar) ve ardından bir sınırlayıcı gelir; isteğe bağlı olarak değiştiriciler son sınırlayıcıdan sonra eklenebilir.
Normal ifade
Elixir'deki normal ifadeler sigillerdir. Kullanımlarını String bölümünde gördük. Elixir'de regex'i nasıl kullanabileceğimizi görmek için tekrar bir örnek alalım.
# A regular expression that matches strings which contain "foo" or
# "bar":
regex = ~r/foo|bar/
IO.puts("foo" =~ regex)
IO.puts("baz" =~ regex)
Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
true
false
Mühürler 8 farklı sınırlayıcıyı destekler -
~r/hello/
~r|hello|
~r"hello"
~r'hello'
~r(hello)
~r[hello]
~r{hello}
~r<hello>
Farklı sınırlayıcıları desteklemenin arkasındaki neden, farklı sınırlayıcıların farklı işaretler için daha uygun olabilmesidir. Örneğin, normal ifadeler için parantez kullanmak, normal ifadenin içindeki parantezlerle karışabileceklerinden kafa karıştırıcı bir seçim olabilir. Ancak, bir sonraki bölümde göreceğimiz gibi, parantezler diğer işaretler için kullanışlı olabilir.
Elixir, Perl uyumlu regex'leri destekler ve ayrıca değiştiricileri destekler. Burada normal ifadelerin kullanımı hakkında daha fazla bilgi edinebilirsiniz .
Dizeler, Karakter listeleri ve Kelime listeleri
Düzenli ifadeler dışında Elixir'in 3 dahili işareti daha vardır. İşaretlere bir göz atalım.
Teller
~ S işareti, çift tırnak işaretleri gibi dizeler oluşturmak için kullanılır. ~ S işareti yararlıdır, örneğin, bir dizge hem çift hem de tek tırnak içerdiğinde -
new_string = ~s(this is a string with "double" quotes, not 'single' ones)
IO.puts(new_string)
Bu işaret, dizeleri oluşturur. Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
"this is a string with \"double\" quotes, not 'single' ones"
Karakter Listeleri
~ C işareti, karakter listeleri oluşturmak için kullanılır -
new_char_list = ~c(this is a char list containing 'single quotes')
IO.puts(new_char_list)
Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
this is a char list containing 'single quotes'
Kelime Listeleri
~ W işareti kelime listelerini oluşturmak için kullanılır (kelimeler sadece normal dizelerdir). ~ W işaretinin içinde, kelimeler boşluklarla ayrılır.
new_word_list = ~w(foo bar bat)
IO.puts(new_word_list)
Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
foobarbat
~ W işareti ayrıca c, s ve a sonuç listesinin öğelerinin veri türünü belirten değiştiriciler (sırasıyla karakter listeleri, dizeler ve atomlar için) -
new_atom_list = ~w(foo bar bat)a
IO.puts(new_atom_list)
Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
[:foo, :bar, :bat]
Mühürlerde İnterpolasyon ve Kaçış
Küçük harfli işaretlerin yanı sıra Elixir, kaçan karakterler ve enterpolasyonla başa çıkmak için büyük harfli işaretleri destekler. Hem ~ s hem de ~ S dizge döndürürken, ilki kaçış kodlarına ve enterpolasyona izin verirken ikincisi izin vermez. Bunu anlamak için bir örnek ele alalım -
~s(String with escape codes \x26 #{"inter" <> "polation"})
# "String with escape codes & interpolation"
~S(String without escape codes \x26 without #{interpolation})
# "String without escape codes \\x26 without \#{interpolation}"
Özel Mühürler
Kendi özel imzalarımızı kolayca oluşturabiliriz. Bu örnekte, bir dizeyi büyük harfe dönüştürmek için bir sigil oluşturacağız.
defmodule CustomSigil do
def sigil_u(string, []), do: String.upcase(string)
end
import CustomSigil
IO.puts(~u/tutorials point/)
Yukarıdaki kodu çalıştırdığımızda şu sonucu verir -
TUTORIALS POINT
Önce CustomSigil adında bir modül tanımlıyoruz ve bu modül içinde sigil_u adında bir fonksiyon oluşturduk. Mevcut sigil uzayında mevcut ~ u sigil olmadığı için onu kullanacağız. _U, tilde'dan sonra u karakterini kullanmak istediğimizi belirtir. İşlev tanımı iki argüman, bir girdi ve bir liste almalıdır.