Criando Getters e Setters com Expressões Regulares

Uma das coisas mais legais das Expressões Regulares é poder utilizá-las em diversos lugares para as mais diversas funções.

Mostrarei como utilizá-las para criar métodos de acesso (getters, setters ou simplesmente as propriedades do .NET), os exemplos servem para Java e C# mas é muito provável que seja possível adaptá-los para outras linguagens também.

É verdade que IDEs já fazem isso, mas tem um problema no Visual Studio: nativamente, só é possível fazer com um atributo por vez.

Primeiro começamos com a criação dos atributos:

   1: private String strNome;
   2: private int intIdade;
   3: private float fltSalario;

Notem que estou utilizando lowerCamelCase para o nome das variávies e isso é importante para o funcionamento da expressão utilizada. Também vale citar que a expressão regular tem que ser executado como case-sensitive.

E agora a expressão regular que irá casar com cada atributo (para utilizar no Visual Studio substitua “\S” por “:a” e os parênteses por chaves):

private +(\S+) +([a-z]+([A-Z]\S*));

Ela quer dizer:

  • a palavra “private”;
  • seguida de um ou mais espaços;
  • seguidos de um ou mais de caracteres visíveis;
  • seguidos de um mais espaços;
  • seguido de um conjunto de uma ou mais letras minúsculas;
  • seguidas de uma letra maíuscula;
  • seguida de outro conjunto vazio ou não de caracteres visíveis
  • seguido de um ponto-e-vírgula

Agora o texto utilizado como substituição:

public \1 \3 { get { return \2; } set { \2 = value; } }

ou

public void set\3(\1 valor) { \2 = valor; } public \1 get\3(){ return \2; }

Nesse caso os retrovisores terão os seguintes valores:

  • \1 = tipo do atributo
  • \2 = nome do atributo
  • \3 = nome da propriedade (atributo sem o prefixo do tipo)

Com isso é possível fazer essa criação de maneira rápida e com todos os atributos de uma vez.

Para tal basta utilizar a funcionalidade de Localizar\Substituir das próprias IDEs que aceitem RegExp ou mesmo outras ferramentas como o Notepad++ e o RegEx Tester.

Gostou? Compartilhe:
  • Digg
  • Google Bookmarks
  • del.icio.us
  • Facebook
  • Twitter
  • MySpace
  • LinkedIn
  • Reddit
  • FriendFeed
  • PDF
  • Technorati
blog comments powered by Disqus