Há algum tempo atrás, quando eu estava aprendendo a usar a linguagem Ruby me deparei com um exercício que consistia em receber dois arquivos de texto (digamos a.txt e b.txt) e fazer uma “troca” do conteúdo dos dois.

Ao fim do programa todos os conteúdos de a.txt deveriam estar em b.txt e vice-versa. O programa que eu escrevi, orgulhosamente, foi este:

#Swap the contents of two files
def swap_files this, that

  #Get file A
  fileA = File.new this,'r+'
  contentsA = fileA.readlines

  #Get file B
  fileB = File.new that, 'r+'

  contentsB =fileB.readlines

  
  #Rewind and put B in A
  fileA.rewind
  fileA.print contentsB
  fileA.close#Close it

  #Rewind and put A in B
  fileB.rewind
  fileB.print contentsA
  fileB.close#Close it
end

swap_files('A.txt','B.txt')

Comparando o meu com o feito por outras pessoas eu me deparo com esta versão:

File.rename('A.txt','A.txt.bkp')
File.rename('B.txt','A.txt')
File.rename('A.txt.bkp', 'B.txt')

O espertalhão só trocou o nome dos arquivos e obtevo o mesmo resultado! De quebra, acredito que seja ainda mais eficiente (não que isso me importasse muito) pois nem precisamos manipular os conteúdos diretamente.

Este texto faz parte da série Pequenos Programadores & Grandes Gambiarras.

Deixem feedback, dúvidas, sugestões e correções. Se tiverem uma gambiarra legal, dividam conosco nos comentários ou entrem em contato comigo pra ver se podemos ter umas idéias para posts novos.