013_cuidado_com_alias_de_objetos.rb 1.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 013 - Cuidado com Alias de Objetos
#
#
# Em linguagens orientadas a objetos, tais como Ruby, Python
# e Java, deve-se tomar cuidado com alias ou aliasing de
# objetos.
#
# Quando você faz uma cópia por atribuição ou argumento de
# método, deve-se estar ciente se o valor é realmente copiado
# para um novo objeto ou se a nova variável é apenas um alias
# de um objeto já existente.
#
#
# Lembre-se, uma variável é apenas uma referência que aponta
# para o endereço do objeto.
#
#


def um_metodo(y)
  y = 20
end


x = 10
um_metodo(x)


# Imprime 10, porque y recebeu o valor que x referenciava,
# não o endereço real de x
puts x



def outro_metodo(s)
  s.upcase!
end


abacaxi = "abacaxi"

outro_metodo(abacaxi)


# Imprime ABACAXI, pois o método upcase! modifica o receiver
# No caso, o receiver s, aponta para o mesmo valor que
# abacaxi aponta
#
#
puts abacaxi


laranja = "laranja"

outro_metodo(laranja.clone)

# Imprime laranja, pois invocamos o método clone, que criou
# um outro objeto para ser passado como argumento
puts laranja # => nil