İksir - Teller

Elixir'deki dizeler çift tırnak arasına eklenir ve UTF-8 ile kodlanır. Varsayılan dizelerin ASCII olarak kodlandığı ve yalnızca 256 farklı karakterin mümkün olduğu C ve C ++ 'dan farklı olarak, UTF-8 1.112.064 kod noktasından oluşur. Bu, UTF-8 kodlamasının bu birçok farklı olası karakterden oluştuğu anlamına gelir. Dizeler utf-8 kullandığından ö, ł vb. Semboller de kullanabiliriz.

Bir Dize Oluşturun

Bir dizge değişkeni oluşturmak için, bir değişkene bir dizge atamanız yeterlidir -

str = "Hello world"

Bunu konsolunuza yazdırmak için, IO.puts fonksiyon ve ona str değişkenini iletin -

str = str = "Hello world" 
IO.puts(str)

Yukarıdaki program aşağıdaki sonucu üretir -

Hello World

Boş Dizeler

Dize değişmezini kullanarak boş bir dize oluşturabilirsiniz, "". Örneğin,

a = ""
if String.length(a) === 0 do
   IO.puts("a is an empty string")
end

Yukarıdaki program aşağıdaki sonucu verir.

a is an empty string

Dize Enterpolasyonu

Dize enterpolasyonu, değerlerini bir dize değişmezinin içine dahil ederek sabitlerin, değişkenlerin, değişmezlerin ve ifadelerin bir karışımından yeni bir String değeri oluşturmanın bir yoludur. Elixir, bir dizgede bir değişkeni yazarken kullanmak için dize enterpolasyonunu destekler, onu küme parantezleriyle sarın ve küme parantezlerinin başına bir'#' işaret.

Örneğin,

x = "Apocalypse" 
y = "X-men #{x}"
IO.puts(y)

Bu, x'in değerini alacak ve onu y yerine koyacaktır. Yukarıdaki kod aşağıdaki sonucu oluşturacaktır -

X-men Apocalypse

Dize Birleştirme

Önceki bölümlerde String birleştirme kullanımını daha önce görmüştük. Elixir'deki dizeleri birleştirmek için '<>' operatörü kullanılır. 2 dizeyi birleştirmek için,

x = "Dark"
y = "Knight"
z = x <> " " <> y
IO.puts(z)

Yukarıdaki kod aşağıdaki sonucu üretir -

Dark Knight

IP uzunluğu

İpin uzunluğunu elde etmek için, String.lengthişlevi. Dizeyi bir parametre olarak iletin ve size boyutunu gösterecektir. Örneğin,

IO.puts(String.length("Hello"))

Yukarıdaki programı çalıştırırken, aşağıdaki sonucu verir -

5

Bir Dizeyi Ters Çevirme

Bir dizeyi ters çevirmek için onu String.reverse işlevine iletin. Örneğin,

IO.puts(String.reverse("Elixir"))

Yukarıdaki program aşağıdaki sonucu üretir -

rixilE

Dize Karşılaştırması

2 dizgiyi karşılaştırmak için == veya === operatörlerini kullanabiliriz. Örneğin,

var_1 = "Hello world"
var_2 = "Hello Elixir"
if var_1 === var_2 do
   IO.puts("#{var_1} and #{var_2} are the same")
else
   IO.puts("#{var_1} and #{var_2} are not the same")
end

Yukarıdaki program aşağıdaki sonucu üretir -

Hello world and Hello elixir are not the same.

Dize Eşleştirme

= ~ Dizge eşleştirme operatörünün kullanımını daha önce görmüştük. Bir dizenin bir normal ifadeyle eşleşip eşleşmediğini kontrol etmek için, dize eşleştirme operatörünü veya String.match? işlevi. Örneğin,

IO.puts(String.match?("foo", ~r/foo/))
IO.puts(String.match?("bar", ~r/foo/))

Yukarıdaki program aşağıdaki sonucu üretir -

true 
false

Aynı şey = ~ operatörü kullanılarak da elde edilebilir. Örneğin,

IO.puts("foo" =~ ~r/foo/)

Yukarıdaki program aşağıdaki sonucu üretir -

true

String Fonksiyonları

Elixir, dizelerle ilgili çok sayıda işlevi destekler, en çok kullanılanlardan bazıları aşağıdaki tabloda listelenmiştir.

Sr.No. İşlev ve Amacı
1

at(string, position)

Grapheme'yi verilen utf8 dizesinin konumunda döndürür. Konum dize uzunluğundan büyükse, sıfır döndürür

2

capitalize(string)

Verilen dizedeki ilk karakteri büyük harfe ve kalanı küçük harfe dönüştürür

3

contains?(string, contents)

Dizenin verilen içeriklerden herhangi birini içerip içermediğini kontrol eder

4

downcase(string)

Verilen dizedeki tüm karakterleri küçük harfe dönüştürür

5

ends_with?(string, suffixes)

Dize, verilen son eklerden herhangi biriyle biterse doğru döndürür

6

first(string)

Bir utf8 dizesinden ilk grafemeyi döndürür, dize boşsa nil

7

last(string)

Bir utf8 dizesinden son grafemeyi döndürür, dize boşsa nil

8

replace(subject, pattern, replacement, options \\ [])

Konudaki desen oluşumlarını değiştirme ile değiştirerek oluşturulan yeni bir dize döndürür

9

slice(string, start, len)

Göreli konum başlangıcında başlayan ve uzunluk uzunluğu olan bir alt dize döndürür

10

split(string)

Bir dizeyi her Unicode boşluk oluşumunda alt dizelere böler ve baştaki ve sondaki boşluklar yoksayılır. Beyaz boşluk grupları, tek bir oluşum olarak kabul edilir. Bölünemez boşlukta bölünmeler oluşmaz

11

upcase(string)

Verilen dizedeki tüm karakterleri büyük harfe dönüştürür

İkili dosyalar

Bir ikili, sadece bir bayt dizisidir. İkili dosyalar kullanılarak tanımlanır<< >>. Örneğin:

<< 0, 1, 2, 3 >>

Elbette, bu baytlar, onları geçerli bir dizge yapmayan bir sırada bile herhangi bir şekilde organize edilebilir. Örneğin,

<< 239, 191, 191 >>

Dizeler aynı zamanda ikilidir. Ve dize birleştirme operatörü<> aslında bir İkili birleştirme operatörüdür:

IO.puts(<< 0, 1 >> <> << 2, 3 >>)

Yukarıdaki kod aşağıdaki sonucu üretir -

<< 0, 1, 2, 3 >>

Ł karakterine dikkat edin. Bu, utf-8 kodlu olduğundan, bu karakter temsili 2 bayt yer kaplar.

İkili dosyada gösterilen her sayının bir bayt olması amaçlandığından, bu değer 255'ten yükseldiğinde kesilir. Bunu önlemek için, bu sayının kaç bit almasını istediğimizi belirtmek için boyut değiştirici kullanıyoruz. Örneğin -

IO.puts(<< 256 >>) # truncated, it'll print << 0 >>
IO.puts(<< 256 :: size(16) >>) #Takes 16 bits/2 bytes, will print << 1, 0 >>

Yukarıdaki program aşağıdaki sonucu üretecektir -

<< 0 >>
<< 1, 0 >>

Ayrıca utf8 değiştiricisini de kullanabiliriz, eğer bir karakter kod noktası ise, çıktıda üretilecektir; başka baytlar -

IO.puts(<< 256 :: utf8 >>)

Yukarıdaki program aşağıdaki sonucu üretir -

Ā

Ayrıca adında bir fonksiyonumuz var is_binarybu, belirli bir değişkenin ikili olup olmadığını kontrol eder. Yalnızca 8 bitin katları olarak depolanan değişkenlerin ikili olduğunu unutmayın.

Bit dizeleri

Boyut değiştiriciyi kullanarak bir ikili tanımlar ve 8'in katı olmayan bir değer iletirsek, ikili yerine bir bit dizesi elde ederiz. Örneğin,

bs = << 1 :: size(1) >>
IO.puts(bs)
IO.puts(is_binary(bs))
IO.puts(is_bitstring(bs))

Yukarıdaki program aşağıdaki sonucu üretir -

<< 1::size(1) >>
false
true

Bu, değişkenin bsbir ikili değil, daha çok bir bit dizisidir. İkilinin, bit sayısının 8'e bölünebildiği bir bit dizisi olduğunu da söyleyebiliriz. Örüntü eşleştirme, ikili dosyalar üzerinde ve aynı şekilde bit dizgilerinde çalışır.