Arquivos do Blog

Do Caos vem o Poder: Expressões Regulares parte 1.


Sinto que os desenvolvedores de hoje dia, quase todos focados em desenvolvimento web, ou em dispositivos portáteis apresentam dificuldades com um conceito muito difundido em ambos os paradigmas: as famigeradas expressões regulares (ou RegExp). Não posso dizer que discordo totalmente deles.

Em algum ponto do ano 2000, vi a minha primeira expressão regular dentro de uma funçãozinha de validação em Javascript. Já era um programador experiente em desenvolvimento windows forms, mas ainda dava meus primeiros passos como desenvolvedor web, e por mais que possa passar vergonha aqui por isso, o primeiro pensamento que veio em minha cabeça poderia facilmente ser atribuído a um estagiário: “Nossa, porque criptografaram só essa linha?”. Lembro-me disso como se fosse hoje.

Após estudar um pouco, descobri o motivo desse meu pensamento bisonho: expressões regulares realmente possuem código compacto e sintaxe críptica, o que me fez obter o comportamento da maioria dos desenvolvedores novatos: ignorei a ferramenta, ao invés de aprendê-la.

Entretanto, à medida que me aprofundava no desenvolvimento para a web, e conhecendo gente muito mais experiente do que eu, um fenômeno foi claro: todo desenvolvedor que eu achava foda era fã das expressões regulares. Chegou ao ponto em que eu usava isso como referência mesmo, perguntava pro cara “meu irmão, o que você acha das expressões regulares?” e se a resposta fosse “Eu acho maneiro.” Batata: o cara era fodão.

Isso me motivou a estudar a coisa, e quanto mais me aprofundava, mais achava barreiras para gostar dessa ferramenta, como por exemplo:

Espaços em branco podem foder tudo.

Um espaço em branco mal colocado pode mandar a sua expressão regular pro K ralho. O que é pior, você pode ganhar sensibilidade inesperada, ignorando referencias que deveriam bater.

Expressões regulares não são padronizadas.

Cada linguagem programa de forma diferente as expressões regulares, sendo que uma expressão que roda aqui, pode não rodar lá.

Metacaracteres mudam de significado dependendo de seu local na expressão.

Um bom exemplo é o sinal hífen “-“. Quando colocado em uma expressão como essa:

[a-zA-Z]

O hífen significa um range de valores.

Mas quando é colocado em uma expressão como essa:

2010-08-01

O Hífen significa apenas seu valor ASCII. Neste exemplo simples isso não parece um grande problema, mas à medida que suas expressões vão complicando, isso é sim um grande motivo de dores de cabeça.

Expressões regulares são sensíveis a caixa alta – caixa baixa.

Isso não chega a ser um problema se você desenvolve em plataforma Linux, mas quando você desenvolve em plataforma Microsoft, isso é um verdadeiro inferno.

Metacaracteres mudam de significado de acordo com a sua caixa.

Vamos supor que você queira montar uma expressão que receba um número de 0 a 9. Uma forma de fazer isso com RegExp é:

(0|1|2|3|4|5|6|7|8|9)

Mas isso é muito simples de ler, então por que não criar um metacarater idiota pra fazer a mesma coisa? Basta substituir o código acima por:

\d

Aí você manda o seu estagiário – que digita tudo em caixa alta – dar manutenção nessa merda e o imbecil muda o código anterior para:

\D

Pronto! Seu estagiário fodeu tudo, porque o \D tem exatamente o comportamento oposto do \d. La foram todas as validações que usam essa expressão pra puta que pariu.

Tai. Esses são os principais pontos de preocupação quando você desenvolve – ou dá manutenção – em RegExps.

No próximo artigo apresentarei o outro lado: porque usar RegExps e como minimizar os problemas citados acima.

Anúncios
%d blogueiros gostam disto: