Vi no blog do Pedro Doria que está aberto para quem quiser a lista de palavras bloqueadas no site da Caixa Econômica Federal. Além de chamar a atenção para o fato de que palavras como estupidez, fenda, furo, japa, e peru serem moderadas (ou seja, nunca envie uma mensagem perguntando sobre financiamento para criações de peru), junto com homossexual, lésbica e suas variações (o que mostra um pouco de preconceito por parte tanto da Caixa como de seus clientes), achei interessante o modo como é feita a implementação da rotina.
No caso é alimentado um array com um número servindo de índice e a palavra censurada e após é passado item por item do array verificando se a string recebida pela função confere, retornando true em caso positivo:
function Moderador(string){ var Palavrao = new Array(); Palavrao[1] = 'PALAVRAO1'; Palavrao[2] = 'PALAVRAO2'; Palavrao[3] = 'PALAVRAO3'; var QtdPalavroes = Palavrao.length ; var ss = string; ss = ss.toUpperCase() ; var x; for (i = 1; i < QtdPalavroes ; i++) { procurar = Palavrao[i] ; Existe = ss.indexOf(procurar); if (Existe != -1){ return true; } } }
Olha, eu confesso que em termos de otimização eu não sou lá essas coisas, mas é impressão minha ou essa rotina aí não seria muito mais rápida se fosse usada a palavra como índice do array? Assim sendo, só para pegar no pé, resolvi reescrever a função acima:
function Moderador(string){ var Palavrao = new Array(); Palavrao['PALAVRAO1'] = 1; Palavrao['PALAVRAO2'] = 1; Palavrao['PALAVRAO3'] = 1; var ss = string; ss = ss.toUpperCase() ; Existe = Palavrao[ss]; if (Existe == 1){ return true; } }
Mesmo (creio eu) comendo um pouco mais de memória a gente tem uma solução que fica bem mais elegante, não?
(E caso você não tenha entendido qual é a moral desse post é que na real ele é um teste do Google Code Prettify. Quero ver se daqui pra frente eu escrevo mais códigos por aqui, aproveitando o fato que estou num momento mais nerd da minha vida, lendo bastante livros técnicos…)