Qual a diferença? Cada valor em uma lista de caracteres corresponde ao número Unicode do caracter, enquanto em um binário os valores são codificados em UTF-8. Vamos ver isso mais a fundo:
Ao programar em Elixir, geralmente usamos strings ao invés de listas de caracteres. O suporte a listas de caracteres é incluso principalmente por ser obrigatório para alguns módulos Erlang.
Codepoints são apenas simples caracteres Unicode representados por um ou mais bytes, dependendo da codificação UTF-8. Caracteres diferentes do padrão US ASCII são sempre codificados por mais de um byte. Por exemplo, caracteres latinos com til ou acentos (á, ñ, è) geralmente são codificados com dois bytes. Já caracteres de línguas asiáticas são normalmente codificados com três ou quatro bytes. Graphemes consistem de múltiplos codepoints que são apresentados como um único caractere.
O módulo String já fornece duas funções para gerá-los, graphemes/1 e codepoints/1. Vamos ver um exemplo:
Vamos rever algumas das funções mais importantes e úteis do módulo String. Essa lição cobrirá apenas uma parte das funções disponíveis. Para ver a lista completa de funções visite a documentação oficial de String.
A e B são considerados anagramas se há alguma forma de rearranjar A ou B para torná-las iguais. Por exemplo:
Então, como podemos verificar se duas strings são Anagramas em Elixir? A solução mais fácil é apenas ordenar os graphemes de cada string em ordem alfabética e então verificar se as duas listas são iguais. Vamos tentar:
Primeiro vamos olhar para anagrams?/2. Estamos verificando se os parâmetros que recebemos são binários ou não. Essa é a forma de verificar se um parâmetro é uma String em Elixir.