String
Em Elixir, uma string é uma sequência de caracteres delimitada por aspas duplas (" ") ou aspas simples (' ').
Vamos a um exemplo.
Criamos uma string
no exemplo anterior, utilizando aspas duplas e esperamos que ela seja igual ao texto "Iago"
também com aspas duplas. Vamos rodar esse teste:
Tudo funcionando. Comentei mais acima que também podemos criar strings utilizando aspas simples (' '). Vamos dar uma olhada nisso:
Se rodarmos o teste, ele passará.
Tudo perfeito até então. Vamos agora comparar um texto com aspas simples com um texto de aspas duplas e ver o que acontece.
A há! Te pegamos. Mesmo os dois sendo considerados textos, o tipo retornado é diferente.
Quando utilizamos aspas duplas (" ") o tipo retornado é um
binário
.Enquanto que quando utilizado aspas simples (' ') temos um
charlist
Vamos alterar o teste para garantir que string com aspas simples é diferente de aspas duplas:
Apenas alteramos a linha 9. Se rodarmos os testes, teremos mensagem de sucesso.
Agora vamor provar que os tipos retornados são diferentes. Começando com aspas duplas. Vamos alterar o primeiro teste:
Adicionamos as validações is_binary/1
onde esperamos que seja verdadeira e is_list/1
onde esperamos que seja falso. Vamos rodar esse teste:
Agora validaremos a string
com aspas simples onde esperamos retornar um charlist. Em geral o charlist é uma lista. Então utilizaremos a função is_list/1
.
Isso se comprova verdadeiro.
Aspas duplas -> Retorna o tipo de dado binário
Aspas simples -> Retorna o tipo de dado lista
Isso acontece porque as aspas simples (' ') são usadas para representar uma lista de caracteres individuais. Cada elemento da lista é um caractere Unicode de 1 byte, portanto, uma lista de caracteres pode ser vista como uma sequência de inteiros, onde cada inteiro representa um caractere.
Por outro lado, as aspas duplas (" ") são usadas para criar uma string
. Em Elixir, uma string
é uma sequência de bytes
, e cada caractere Unicode pode ser representado por vários bytes.
Escolhendo um tipo de retorno
A escolha entre o uso de charlists
ou strings
em Elixir dependerá do contexto em que estamos trabalhando e das necessidades específicas do problema em questão. Aqui estão algumas diretrizes gerais que podem ajudar na escolha:
Use strings
quando:
A eficiência na manipulação de strings é importante e a concatenação não é um problema (por exemplo, quando as strings são pequenas e/ou há poucas concatenações);
Você está trabalhando com operações que requerem o uso de funções de string específicas em Elixir, como
String.length/1
,String.split/2
,String.downcase/1
, entre outras;A interoperabilidade com outras linguagens não é um problema e o código está sendo escrito exclusivamente em Elixir.
Use charlists
quando:
A eficiência na concatenação de strings é importante e há muitas concatenações envolvidas;
Você está trabalhando com código que usa
charlists
(por exemplo, se estiver interagindo com código escrito em Erlang);Você está trabalhando com caracteres Unicode complexos que requerem mais de um byte para serem codificados;
Você precisa manipular listas de caracteres usando funções de lista em Elixir.
Conclusão
Em resumo, charlists
são mais adequadas para situações em que a eficiência na concatenação é importante e para lidar com caracteres Unicode complexos, enquanto strings
são mais adequadas para operações gerais de manipulação de strings e interoperabilidade com outras linguagens.
Last updated