Carlos Brando

Nome do Jogo

Rails Way #4: Métodos destrutivos ou somente perigosos?

O último artigo desta série levantou uma certa polêmica em alguns pontos. Quero deixar claro que entendo muito bem que existem situações em que não é possível ou mesmo prático utilizar as sugestões descritas aqui. Você não deve encarar esta série de artigos como um livro de leis, mas somente como boas práticas adotadas pela maior parte da comunidade de desenvolvedores Rails.

O que quero é exatamente isto, levantar discussões sobre o que é bom ou ruim e o que é realmente prático ou simplesmente moda.

Ao comentar sobre algumas boas práticas ao nomear métodos, mencionei sobre o uso dos sinais de exclamação (!) e interrogação (?) como uma forma de deixar os métodos mais descritivos. Meu erro talvez tenha ocorrido ao usar o nome ‘métodos destrutivos’ quando me referi aos métodos terminados com o sinal de exclamação.

Concordo em dizer que na verdade ‘!’ no fim de um método não necessariamente significa “destrutivo”, mas sim que o método em questão é uma versão mais perigosa de um outro método com o mesmo nome, mas sem o sinal.

Deixe-me explicar isto melhor

O uso da expressão ‘método perigoso’ é relativo. Dizer que um método terminado com ! é perigoso, não diz nada se você não possuir um outro método similar menos perigoso e sem o sinal de exclamação.

Assim, a regra número um é que todo método terminado com ! deve vir acompanhado de um outro método com o mesmo nome, mas sem o sinal.

No Ruby e também no Rails encontramos muitos casos assim. Por exemplo, temos o método gsub! que é mais perigoso que o seu companheiro gsub. Assim como também temos o método exit! que é a versão mais perigosa do método exit, e assim por diante.

Alguns acreditam que devem usar o sinal ! apenas quando o método alterar a sua própria instância. Embora muitos método perigosos façam isto, esta não a finalidade do sinal de exclamação. No próprio Ruby encontramos métodos que tem esta característica mas que não são considerados perigosos, como os métodos Array#pop e Array#push, apenas para citar alguns exemplos.

Devemos apenas fazer uso do sinal ! quando criarmos um método que represente mais perigo que outro já criado. Tome como exemplo os métodos save e save! do ActiveRecord. O primeiro método simplesmente grava o registro no banco de dados e retorna verdadeiro ou falso de acordo com o resultado do procedimento. Utilizando o segundo método, caso algo dê errado não teremos de volta apenas um booleano falso, teremos o disparo de uma exceção, o que pode representar um certo risco se o seu aplicativo não estiver preparado para isto. Desta forma podemos considerar este método mais perigoso que o primeiro, merecendo assim a adição do sinal ! no final de seu nome.

A conclusão é que o uso de “!” no nome de um método não dirá a você exatamente o que ele fará ou de que forma ele representa perigo. Mas o sinal de exclamação (!) é importante como um alerta de que o método em questão pode representar algum risco se usado de forma impensada.

Comments