Elixir - Cordes

Les chaînes d'Elixir sont insérées entre des guillemets doubles et sont encodées en UTF-8. Contrairement à C et C ++ où les chaînes par défaut sont encodées en ASCII et seuls 256 caractères différents sont possibles, UTF-8 se compose de 1 112 064 points de code. Cela signifie que le codage UTF-8 se compose de ces nombreux caractères possibles. Puisque les chaînes utilisent utf-8, nous pouvons également utiliser des symboles tels que: ö, ł, etc.

Créer une chaîne

Pour créer une variable chaîne, affectez simplement une chaîne à une variable -

str = "Hello world"

Pour l'imprimer sur votre console, appelez simplement le IO.puts function et passez-lui la variable str -

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

Le programme ci-dessus génère le résultat suivant -

Hello World

Chaînes vides

Vous pouvez créer une chaîne vide en utilisant le littéral de chaîne, "". Par exemple,

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

Le programme ci-dessus génère le résultat suivant.

a is an empty string

Interpolation de chaîne

L'interpolation de chaîne est un moyen de construire une nouvelle valeur String à partir d'un mélange de constantes, de variables, de littéraux et d'expressions en incluant leurs valeurs dans un littéral de chaîne. Elixir prend en charge l'interpolation de chaîne, pour utiliser une variable dans une chaîne, lors de son écriture, enveloppez-la avec des accolades et ajoutez les accolades avec un'#' signe.

Par exemple,

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

Cela prendra la valeur de x et la remplacera par y. Le code ci-dessus générera le résultat suivant -

X-men Apocalypse

Concaténation de chaînes

Nous avons déjà vu l'utilisation de la concaténation de chaînes dans les chapitres précédents. L'opérateur '<>' est utilisé pour concaténer des chaînes dans Elixir. Pour concaténer 2 chaînes,

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

Le code ci-dessus génère le résultat suivant -

Dark Knight

Longueur de chaine

Pour obtenir la longueur de la chaîne, nous utilisons le String.lengthfonction. Passez la chaîne comme paramètre et il vous montrera sa taille. Par exemple,

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

Lors de l'exécution du programme ci-dessus, il produit le résultat suivant -

5

Inverser une chaîne

Pour inverser une chaîne, transmettez-la à la fonction String.reverse. Par exemple,

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

Le programme ci-dessus génère le résultat suivant -

rixilE

Comparaison des chaînes

Pour comparer 2 chaînes, nous pouvons utiliser les opérateurs == ou ===. Par exemple,

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

Le programme ci-dessus génère le résultat suivant -

Hello world and Hello elixir are not the same.

Correspondance de chaîne

Nous avons déjà vu l'utilisation de l'opérateur de correspondance = ~ string. Pour vérifier si une chaîne correspond à une expression régulière, nous pouvons également utiliser l'opérateur de correspondance de chaîne ou String.match? fonction. Par exemple,

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

Le programme ci-dessus génère le résultat suivant -

true 
false

Cela peut également être réalisé en utilisant l'opérateur = ~. Par exemple,

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

Le programme ci-dessus génère le résultat suivant -

true

Fonctions de chaîne

Elixir prend en charge un grand nombre de fonctions liées aux chaînes, certaines des plus utilisées sont répertoriées dans le tableau suivant.

Sr.No. Fonction et son objectif
1

at(string, position)

Renvoie le graphème à la position de la chaîne utf8 donnée. Si la position est supérieure à la longueur de la chaîne, elle renvoie nil

2

capitalize(string)

Convertit le premier caractère de la chaîne donnée en majuscules et le reste en minuscules

3

contains?(string, contents)

Vérifie si la chaîne contient l'un des contenus donnés

4

downcase(string)

Convertit tous les caractères de la chaîne donnée en minuscules

5

ends_with?(string, suffixes)

Renvoie true si la chaîne se termine par l'un des suffixes donnés

6

first(string)

Renvoie le premier graphème d'une chaîne utf8, nil si la chaîne est vide

sept

last(string)

Renvoie le dernier graphème d'une chaîne utf8, nil si la chaîne est vide

8

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

Renvoie une nouvelle chaîne créée en remplaçant les occurrences de motif dans le sujet par remplacement

9

slice(string, start, len)

Renvoie une sous-chaîne commençant au début du décalage et de longueur len

dix

split(string)

Divise une chaîne en sous-chaînes à chaque occurrence d'espaces Unicode avec les espaces de début et de fin ignorés. Les groupes d'espaces sont traités comme une seule occurrence. Les divisions ne se produisent pas sur les espaces blancs insécables

11

upcase(string)

Convertit tous les caractères de la chaîne donnée en majuscules

Binaires

Un binaire n'est qu'une séquence d'octets. Les binaires sont définis en utilisant<< >>. Par exemple:

<< 0, 1, 2, 3 >>

Bien entendu, ces octets peuvent être organisés de n'importe quelle manière, même dans une séquence qui n'en fait pas une chaîne valide. Par exemple,

<< 239, 191, 191 >>

Les chaînes sont également des binaires. Et l'opérateur de concaténation de chaîne<> est en fait un opérateur de concaténation binaire:

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

Le code ci-dessus génère le résultat suivant -

<< 0, 1, 2, 3 >>

Notez le caractère ł. Comme il est encodé en utf-8, cette représentation de caractère occupe 2 octets.

Étant donné que chaque nombre représenté dans un binaire est censé être un octet, lorsque cette valeur passe de 255, elle est tronquée. Pour éviter cela, nous utilisons le modificateur de taille pour spécifier le nombre de bits que nous voulons que ce nombre prenne. Par exemple -

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

Le programme ci-dessus générera le résultat suivant -

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

Nous pouvons également utiliser le modificateur utf8, si un caractère est un point de code alors, il sera produit dans la sortie; sinon les octets -

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

Le programme ci-dessus génère le résultat suivant -

Ā

Nous avons également une fonction appelée is_binaryqui vérifie si une variable donnée est un binaire. Notez que seules les variables stockées sous forme de multiples de 8 bits sont des binaires.

Bitstrings

Si nous définissons un binaire à l'aide du modificateur de taille et lui passons une valeur qui n'est pas un multiple de 8, nous nous retrouvons avec une chaîne de bits au lieu d'un binaire. Par exemple,

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

Le programme ci-dessus génère le résultat suivant -

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

Cela signifie que la variable bsn'est pas un binaire mais plutôt une chaîne de bits. Nous pouvons également dire qu'un binaire est une chaîne de bits où le nombre de bits est divisible par 8. La correspondance de motifs fonctionne de la même manière sur les binaires ainsi que sur les chaînes de bits.