Objetos – Métodos – Pure Function, Modifiers, Fill-in – Python – Linux

Publicado: 2 de março de 2014 em Python

Pure Function

Usa os objetos como argumentos, mas não os modifica. o valor de retorno é ou um primitivo ou um novo objeto criado dentro do método.

Um método é considerado uma função pura se o resultado depender apenas dos argumentos, e não ter efeitos colaterais, como modificar um argumento ou imprimir algo. O único resultado de chamar uma função pura é o seu valor de retorno.

Na transformação funcional pura, um conjunto de funções, chamadas funções puras, definem a forma de como transformar um conjunto de dados estruturados a partir de sua forma original para outra forma. A palavra “pura” indica que as funções são combináveis​​, que exige que elas sejam:

Auto-suficiente, de modo que elas podem ser livremente ordenada e rearranjada sem emaranhamento ou interdependências com o resto do programa. Transformações puras não têm conhecimento ou efeito sobre o meio ambiente. Ou seja, as funções utilizadas para a transformação não tem efeitos colaterais.

Sem mudança de estado, de modo que a execução da mesma função ou conjunto específico de funções na mesma entrada sempre resultará na mesma saída. Transformações puras não têm memória do seu uso anterior. Funções puras ajudar a gerenciar a complexidade dos grandes projetos.

Modifiers

Usa objetos como argumentos e modifica alguns elementos ou todos eles. Muitas vezes, retorna uma def. Um método modificador muda a forma como os objetos funcionam.

Fill-in

Um dos argumentos é um objeto vazio que é preenchido em pelo método. Tecnicamente, este método também é um tipo de Modifier.

Melhores Praticas

É recomendado que você escreva funções puras sempre que for razoável, e recorra aos Modifiers e Fill-ins apenas se houver uma grande vantagem.

Métodos Modifiers e Fill-in  são eficientes porque eles não têm que criar novos objetos. Mas se torna mais difícil de isolar partes de um programa, e em grandes projetos podem causar erros que são difíceis de encontrar.

Exemplo:

Neste exemplo escrevemos três métodos diferentes: Pure function, Modifier e um fill-in, e manipulamos objetos utilizando estes métodos.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# objetos.py

class Retangulo:
    x = 0
    y = 0
    altura = 0
    largura = 0

    # Workaround para efeito de Overload
    # Constructor ()
    def __init__ (self, x= None, y= None, altura= None, largura= None):
        if (x is not None) and (y is not None) and (altura is not None) and (largura is not None):
            self.x = x
            self.y = y
            self.altura = altura
            self.largura = largura

    def imprimeRet(self):
         print "X=", self.x, "Y =", self.y, "Altura=", self.altura, "Largura=", self.largura

# Método Pure Function
def maxRet(ret = Retangulo(), altura = 0, largura = 0):
    if ( ret.altura <= altura) and (ret.largura <= largura):
        return True
    else:
        return False

# Método Modifier
def posicao(ret = Retangulo(), x = 0, y = 0):
    ret.x = ret.x + x
    ret.y = ret.y + y

# Método Fill-in
def modRet(r1 = Retangulo(), r2 = Retangulo(), r3 = Retangulo()):
    r1.x       =  r2.x      + r3.x
    r1.y       =  r2.y      + r3.y
    r1.altura  = r2.altura  + r3.altura
    r1.largura = r2.largura + r3.largura

ret1 = Retangulo(50,50,200,300)
ret2 = Retangulo(15,15,120,150)
ret3 = Retangulo() 
ret1.imprimeRet()

resultado =  maxRet(ret1, 500, 600)
print "Retangulo está dentro do limite maximo:", resultado
print ""

print "Modifica posição do retangulo:"
posicao(ret1, 20, 20)
ret1.imprimeRet()

print ""
print "Modifica tamanho do retangulo:"
modRet(ret3, ret1, ret2);
ret3.imprimeRet()

raw_input()
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s