Elixir é uma linguagem funcional e dinâmica para construir sistemas
escaláveis distribuídos e resilientes, ela cresce rapidamente com o
esforço da contribuição da comunidade que vem crescendo em
conjunto. Como queria entender um pouco sobre algumas questões de
pattern-matching e a codificação de caracteres na linguagem, resolvi
contribuir com a adição de uma função codepoint
no módulo String
.
Trabalhar com codificação de caracteres é sempre um desafio para a maioria dos desenvolvedores, integradores de aplicações, etc. Não é um problema recente, tanto que há quase 10 (dez) anos Joel on Software falou sobre isto em seu artigo The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!), traduzido para o português como O Mínimo Absoluto Que Todos os Programadores de Software Precisam, Absolutamente, Positivamente de Saber Sobre Unicode e Conjuntos de Caracteres (Sem Desculpas!), leituras estas altamente recomendáveis para qualquer um da área de TI.
Dependendo da linguagem de programação que você utiliza no seu dia-a-dia, ela pode estar melhor adaptada ou não a trabalhar de modo mais transparente possível com diversas codificações diferentes.
No caso da função String.codepoint/1
que submeti para pull-request
tem o papel de retornar a lista de code points de uma cadeia de
caracteres codificada em UTF8.
Se olharmos para uma palavra simples como “elixir”, o resultado seria:
String.codepoints("elixír") == ["e","l","i","x","í","r"]
Se pegarmos a palavra “elixir” e traduzir para o armênio, por exemplo, e quisermos seus code points, teriamos:
String.codepoints("ոգելից ըմպելիք") == ["ո","գ","ե","լ","ի","ց"," ","ը","մ","պ","ե","լ","ի","ք"] # armenian
O interessante dos code points é que você pode obter os caracteres que funcionam como ligação entre o caractere anterior e o seguinte, em bengali você então pode conseguir estes code points:
String.codepoints("স্পর্শমণি") == ["স","্","প","র","্","শ","ম","ণ","ি"] # bengali
Por “cadeia de caracteres” entende-se que existe um “elo” entre eles, e os code points conseguem representar esses caracteres em fluxo, funcionando como um código auto sincronizado.