Codepoints no Elixir

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.

comments powered by Disqus