Nomeando um método "faça X, se necessário"

23

Qual é uma boa maneira de nomear um método que verifica se o X precisa ser executado e o X, se necessário?

Por exemplo, como nomear um método que atualiza uma lista de usuários se novos usuários efetuaram login? UpdateListIfNeededparece muito longo, enquanto simples UpdateListimplica uma operação possivelmente cara e desnecessária sempre. EnsureListUpdatedtambém é uma variante.

C # tem um bool TryXXX(args, out result)padrão (por exemplo int.TryParse(str, out num)) para verificar se X é possível e o faz, mas isso é sutilmente diferente.

dbkk
fonte
1
Apenas um ponto de recomendação, métodos como esse, embora bem intencionados, devem ser criados com cautela. Ao longo do caminho, eles tendem a se transformar em código não relacionado, sob o pretexto de "just in case" ou "adicionar uma chamada a ele no X () corrigiu um bug, mas não sei por que". Se você tiver a disciplina de ligar apenas RefreshUserList()durante LoginUser()e LogoutUser(), e não durante, digamos GetUser()(onde a lista já deve estar atualizada), então, de todas as formas, os conselhos abaixo se aplicam.
21412 Kevin McCormick

Respostas:

25

Eu costumo usar Ensure. Ele carrega o significado de garantir que algo seja resolvido, no entanto, isso precisa ser feito. Se já estiver bom, basta verificar e pronto. Caso contrário, faça. De qualquer forma, basta garantir que isso seja feito .

Mason Wheeler
fonte
13

Minha preferência é UpdateList. Se nada precisa ser feito, que assim seja. A despesa sempre deve ser minimizada de qualquer maneira, portanto, se UpdateListestiver fazendo mais do que o necessário, algo está incorreto na sua implementação.

Basicamente, é o verbo que diz o que o método deve fazer. CalculateXdeve sempre recalcular X. GetYdeve sempre retornar Y, mas somente faça o trabalho de recuperá-lo, se necessário. Da mesma forma, UpdateZsolicita uma atualização do Z, supondo que ele seja feito da maneira mais eficiente possível.

Matt S
fonte
2

Se quiser me ligue"

Cooptei dos trechos de Haskell que eu já vi, tente

UpdateListMaybe();
Mark Canlas
fonte
2
Suponho que se eu entendesse melhor Haskell, isso faria mais sentido. Corolário: se for usado em um idioma que não seja Haskell, será entendido apenas por quem conhece Haskell.
Robert Harvey
2
Seis anos depois, sou um programador diferente, com um pouco mais de conhecimento das coisas de Haskell. Eu não apóio mais esta resposta, haha. Acho que minha ideia na época era usar a palavra "talvez" para significar que a função lida com algum tipo de opcionalidade. Eu ainda faço isso às vezes (por exemplo Option [A] => B é chamado maybeToB)
Mark Canlas