1) O documento discute programação funcional em Python, definindo o paradigma, focos e exemplos de como reduzir efeitos colaterais em programas. 2) Apresenta conceitos como funções puras e impuras, funções como cidadãos de primeira classe, partials e imutabilidade. 3) Discutem objetos versus variáveis em Python e tipos mutáveis e imutáveis na linguagem.
O documento discute a programação funcional em JavaScript. Ele define programação funcional, foca em aspectos como manutenibilidade e testabilidade, e apresenta exemplos de funções puras, imutabilidade, mapas, filtros, reduce, currying e encadeamento de chamadas usando pipe/compose. O documento também menciona bibliotecas funcionais como Ramda e sugere estudar linguagens puramente funcionais após entender os conceitos básicos em JavaScript.
Utilizando funções em C: modularizando os programas.SchoolByte
Este documento resume as principais características e conceitos sobre funções em C, incluindo: 1) definição de função; 2) sintaxe básica com nome, parênteses e corpo; 3) protótipo e seu uso; 4) funções que retornam e não retornam valores; 5) passagem de parâmetros; 6) escopo de variáveis locais, globais e formais; 7) recursividade.
Este documento discute vários paradigmas de programação, incluindo imperativo, estruturado, orientado a objetos, declarativo, lógico e funcional. Exemplos de códigos são fornecidos para ilustrar cada paradigma.
O documento discute funções e procedimentos em linguagens de programação. Apresenta como funções e procedimentos são abstrações que permitem parametrização de computações. Detalha as diferenças entre funções e procedimentos e como cada um é definido em linguagens como C, C++, Haskell e Ada. Inclui explicações sobre parâmetros formais versus reais, mecanismos de passagem de parâmetros e ordem de avaliação.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
O documento discute técnicas para otimizar o desempenho de aplicações Django, incluindo o uso de profilers para identificar gargalos e pontos de melhoria. Ele recomenda ferramentas como cProfile e hotshot para registrar solicitações e tempos de execução, além do middleware Kcachegrind para análise visual dos resultados.
1. O documento apresenta uma introdução à linguagem JavaScript, discutindo sua estrutura, tipos e como começar a programar na linguagem.
2. JavaScript é uma linguagem de programação dinamicamente tipada e baseada em protótipos usada principalmente para desenvolvimento web front-end.
3. A linguagem suporta tipos primitivos como números, strings e booleanos e tipos de referência como arrays e objetos.
O documento apresenta um adendo sobre o framework Spring Framework versão 2.5, com foco em anotações e integração com web. É apresentado o conceito de anotações no Java e no Spring Framework, com exemplos de uso de anotações para injeção de dependências e integração com JSF.
O documento discute a programação funcional em JavaScript. Ele define programação funcional, foca em aspectos como manutenibilidade e testabilidade, e apresenta exemplos de funções puras, imutabilidade, mapas, filtros, reduce, currying e encadeamento de chamadas usando pipe/compose. O documento também menciona bibliotecas funcionais como Ramda e sugere estudar linguagens puramente funcionais após entender os conceitos básicos em JavaScript.
Utilizando funções em C: modularizando os programas.SchoolByte
Este documento resume as principais características e conceitos sobre funções em C, incluindo: 1) definição de função; 2) sintaxe básica com nome, parênteses e corpo; 3) protótipo e seu uso; 4) funções que retornam e não retornam valores; 5) passagem de parâmetros; 6) escopo de variáveis locais, globais e formais; 7) recursividade.
Este documento discute vários paradigmas de programação, incluindo imperativo, estruturado, orientado a objetos, declarativo, lógico e funcional. Exemplos de códigos são fornecidos para ilustrar cada paradigma.
O documento discute funções e procedimentos em linguagens de programação. Apresenta como funções e procedimentos são abstrações que permitem parametrização de computações. Detalha as diferenças entre funções e procedimentos e como cada um é definido em linguagens como C, C++, Haskell e Ada. Inclui explicações sobre parâmetros formais versus reais, mecanismos de passagem de parâmetros e ordem de avaliação.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
O documento discute técnicas para otimizar o desempenho de aplicações Django, incluindo o uso de profilers para identificar gargalos e pontos de melhoria. Ele recomenda ferramentas como cProfile e hotshot para registrar solicitações e tempos de execução, além do middleware Kcachegrind para análise visual dos resultados.
1. O documento apresenta uma introdução à linguagem JavaScript, discutindo sua estrutura, tipos e como começar a programar na linguagem.
2. JavaScript é uma linguagem de programação dinamicamente tipada e baseada em protótipos usada principalmente para desenvolvimento web front-end.
3. A linguagem suporta tipos primitivos como números, strings e booleanos e tipos de referência como arrays e objetos.
O documento apresenta um adendo sobre o framework Spring Framework versão 2.5, com foco em anotações e integração com web. É apresentado o conceito de anotações no Java e no Spring Framework, com exemplos de uso de anotações para injeção de dependências e integração com JSF.
O documento fornece uma introdução às linguagens de programação Pascal e C++, descrevendo suas principais características como: tipos de dados, variáveis, constantes, operadores, estrutura de programas, comandos, procedimentos e funções. O Pascal é apresentado de forma mais detalhada com exemplos de seus recursos, enquanto o C++ é introduzido com foco nos conceitos de orientação a objetos.
O documento apresenta uma série de aulas sobre programação. Discute conceitos como algoritmos, variáveis, tipos de dados e estruturas de controlo. Apresenta também exemplos de pseudocódigo e fluxogramas para representar algoritmos de forma visual.
O documento introduz o paradigma funcional de programação, descrevendo suas características principais como tratamento da computação como avaliação de funções matemáticas e evitação de estado mutável. Explica a história do paradigma funcional e fornece exemplos de código funcional em Haskell, incluindo funções como soma de lista e quicksort.
Fundamentos da Programação 8:
• Classes e instâncias
• Cadeias de caracteres
Apresentação 8 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
1) O documento discute diferentes paradigmas de programação, incluindo imperativo, orientado a objetos, funcional, lógico e paralelo/distribuído.
2) Cada paradigma tem características e modelos computacionais únicos que afetam a forma como os programas são escritos.
3) Exemplos de linguagens para cada paradigma são fornecidos.
O documento discute conceitos fundamentais de modularização e programação estruturada, incluindo: 1) a divisão de problemas em módulos menores para facilitar o desenvolvimento e manutenção de programas; 2) a utilização de subprogramas para implementar cada módulo de forma independente; 3) a comunicação entre módulos através de parâmetros formais e reais.
O documento discute os benefícios da programação modular em comparação à programação em bloco monolítico. A programação modular permite dividir um sistema complexo em módulos menores, aumentando a reusabilidade do código, a legibilidade e a manutenibilidade dos programas.
O documento discute funções em programação, incluindo o que são funções, tipos de funções, parâmetros formais e atuais, passagem de parâmetros por valor e referência, e exemplos de código.
Curso Completo de Linguagem de Programação CJoberthSilva
O documento fornece uma introdução à linguagem de programação C, abordando tópicos como:
1) Breve histórico da linguagem C e suas características;
2) Estrutura básica de um programa C, incluindo variáveis, tipos de dados e instruções de entrada e saída;
3) Operadores aritméticos e lógicos, além de estruturas de decisão e repetição.
O documento apresenta sobre o framework Spring Data JPA. Resume:
1) O Spring Data JPA simplifica o acesso a dados, diminuindo código repetitivo através da interface JpaRepository, que permite consultas personalizadas com métodos de nomeação;
2) As consultas são mapeadas automaticamente através de convenções de nomes ou queries declaradas;
3) Tópicos avançados incluem auditoria, especificações e QueryDSL para consultas complexas.
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
O documento discute modularização e funções em programação. Explica que modularização divide um programa em partes menores para facilitar manutenção e entendimento. Funções são blocos de código reutilizáveis que executam tarefas específicas. O documento fornece exemplos de como criar, chamar e usar funções, incluindo parâmetros por valor e por referência.
O documento apresenta conceitos básicos de lógica de programação. Aborda temas como algoritmos, variáveis, processos, operadores lógicos e linguagem de descrição de algoritmos. Também discute testes de software e estruturas de dados como listas lineares.
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...tdc-globalcode
O documento apresenta dicas para melhorar o desempenho de aplicações Java, como usar tipos primitivos, declarar métodos de forma estática quando possível e evitar algoritmos complexos. Também fornece recomendações sobre ferramentas de monitoramento como Java VisualVM para analisar uso da CPU, memória e threads.
Boas práticas no desenvolvimento de softwareFelipe
Um pequeno conjunto de boas práticas para o desenvolvimento de software. O conteúdo é recomendado para desenvolvedores iniciantes ou intermediários. O foco é em desenvolvimento Web, baseado em Sistemas de Informação, com uma linguagem fracamente tipada. Os exemplos são dados na linguagem PHP.
O documento discute modularização e funções em linguagem de programação. Apresenta a introdução e histórico da programação estruturada e modularização, definindo módulos como grupos de comandos com função definida. Também explica ferramentas como sub-rotinas e funções, caracterizando os diferentes tipos de funções com base na passagem e retorno de parâmetros.
O código acima possui código duplicado nos métodos refresh() das classes Point e Line. Esse código duplicado viola o princípio DRY (Don't Repeat Yourself) da programação. Uma melhor abordagem seria extrair o código duplicado para um método comum em uma classe abstrata ou utilizar AOP para encapsular esse comportamento em um aspecto.
O documento resume as principais características da linguagem de programação Python. Em particular, ele descreve Python como uma linguagem de alto nível, de uso geral e que suporta múltiplos paradigmas de programação, com foco em legibilidade do código. Além disso, fornece exemplos de como calcular fatoriais recursivamente e iterativamente em Python.
1. O documento discute elementos da programação funcional em Lisp, incluindo funções como mapcar, lambda, ordenação de listas e igualdade.
2. É apresentado um roteiro com tópicos como ordenamento, igualdade e identidade, e funções para listas como append e reverse.
3. Exemplos demonstram o uso de funções como funcall, apply, mapcar, find e operações em listas como união e interseção.
Este documento discute paradigmas de programação funcional em Lisp. Resume os principais tópicos abordados: 1) Manipulação de variáveis e argumentos, incluindo escopo, variáveis opcionais e default; 2) Formatação de saída e forms especiais; 3) Tipos de dados como vetores, strings e estruturas.
O documento fornece uma introdução às linguagens de programação Pascal e C++, descrevendo suas principais características como: tipos de dados, variáveis, constantes, operadores, estrutura de programas, comandos, procedimentos e funções. O Pascal é apresentado de forma mais detalhada com exemplos de seus recursos, enquanto o C++ é introduzido com foco nos conceitos de orientação a objetos.
O documento apresenta uma série de aulas sobre programação. Discute conceitos como algoritmos, variáveis, tipos de dados e estruturas de controlo. Apresenta também exemplos de pseudocódigo e fluxogramas para representar algoritmos de forma visual.
O documento introduz o paradigma funcional de programação, descrevendo suas características principais como tratamento da computação como avaliação de funções matemáticas e evitação de estado mutável. Explica a história do paradigma funcional e fornece exemplos de código funcional em Haskell, incluindo funções como soma de lista e quicksort.
Fundamentos da Programação 8:
• Classes e instâncias
• Cadeias de caracteres
Apresentação 8 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
1) O documento discute diferentes paradigmas de programação, incluindo imperativo, orientado a objetos, funcional, lógico e paralelo/distribuído.
2) Cada paradigma tem características e modelos computacionais únicos que afetam a forma como os programas são escritos.
3) Exemplos de linguagens para cada paradigma são fornecidos.
O documento discute conceitos fundamentais de modularização e programação estruturada, incluindo: 1) a divisão de problemas em módulos menores para facilitar o desenvolvimento e manutenção de programas; 2) a utilização de subprogramas para implementar cada módulo de forma independente; 3) a comunicação entre módulos através de parâmetros formais e reais.
O documento discute os benefícios da programação modular em comparação à programação em bloco monolítico. A programação modular permite dividir um sistema complexo em módulos menores, aumentando a reusabilidade do código, a legibilidade e a manutenibilidade dos programas.
O documento discute funções em programação, incluindo o que são funções, tipos de funções, parâmetros formais e atuais, passagem de parâmetros por valor e referência, e exemplos de código.
Curso Completo de Linguagem de Programação CJoberthSilva
O documento fornece uma introdução à linguagem de programação C, abordando tópicos como:
1) Breve histórico da linguagem C e suas características;
2) Estrutura básica de um programa C, incluindo variáveis, tipos de dados e instruções de entrada e saída;
3) Operadores aritméticos e lógicos, além de estruturas de decisão e repetição.
O documento apresenta sobre o framework Spring Data JPA. Resume:
1) O Spring Data JPA simplifica o acesso a dados, diminuindo código repetitivo através da interface JpaRepository, que permite consultas personalizadas com métodos de nomeação;
2) As consultas são mapeadas automaticamente através de convenções de nomes ou queries declaradas;
3) Tópicos avançados incluem auditoria, especificações e QueryDSL para consultas complexas.
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
O documento discute modularização e funções em programação. Explica que modularização divide um programa em partes menores para facilitar manutenção e entendimento. Funções são blocos de código reutilizáveis que executam tarefas específicas. O documento fornece exemplos de como criar, chamar e usar funções, incluindo parâmetros por valor e por referência.
O documento apresenta conceitos básicos de lógica de programação. Aborda temas como algoritmos, variáveis, processos, operadores lógicos e linguagem de descrição de algoritmos. Também discute testes de software e estruturas de dados como listas lineares.
TDC2017 | Florianópolis - Trilha Java Melhorando a performance do seu Código ...tdc-globalcode
O documento apresenta dicas para melhorar o desempenho de aplicações Java, como usar tipos primitivos, declarar métodos de forma estática quando possível e evitar algoritmos complexos. Também fornece recomendações sobre ferramentas de monitoramento como Java VisualVM para analisar uso da CPU, memória e threads.
Boas práticas no desenvolvimento de softwareFelipe
Um pequeno conjunto de boas práticas para o desenvolvimento de software. O conteúdo é recomendado para desenvolvedores iniciantes ou intermediários. O foco é em desenvolvimento Web, baseado em Sistemas de Informação, com uma linguagem fracamente tipada. Os exemplos são dados na linguagem PHP.
O documento discute modularização e funções em linguagem de programação. Apresenta a introdução e histórico da programação estruturada e modularização, definindo módulos como grupos de comandos com função definida. Também explica ferramentas como sub-rotinas e funções, caracterizando os diferentes tipos de funções com base na passagem e retorno de parâmetros.
O código acima possui código duplicado nos métodos refresh() das classes Point e Line. Esse código duplicado viola o princípio DRY (Don't Repeat Yourself) da programação. Uma melhor abordagem seria extrair o código duplicado para um método comum em uma classe abstrata ou utilizar AOP para encapsular esse comportamento em um aspecto.
O documento resume as principais características da linguagem de programação Python. Em particular, ele descreve Python como uma linguagem de alto nível, de uso geral e que suporta múltiplos paradigmas de programação, com foco em legibilidade do código. Além disso, fornece exemplos de como calcular fatoriais recursivamente e iterativamente em Python.
1. O documento discute elementos da programação funcional em Lisp, incluindo funções como mapcar, lambda, ordenação de listas e igualdade.
2. É apresentado um roteiro com tópicos como ordenamento, igualdade e identidade, e funções para listas como append e reverse.
3. Exemplos demonstram o uso de funções como funcall, apply, mapcar, find e operações em listas como união e interseção.
Este documento discute paradigmas de programação funcional em Lisp. Resume os principais tópicos abordados: 1) Manipulação de variáveis e argumentos, incluindo escopo, variáveis opcionais e default; 2) Formatação de saída e forms especiais; 3) Tipos de dados como vetores, strings e estruturas.
O documento discute paradigmas de programação funcional em Lisp, apresentando:
1) Uma breve história da linguagem Lisp e seu dialeto mais popular CLisp;
2) Conceitos básicos como átomos, listas, funções predefinidas e definição de funções;
3) Mecanismos de controle de fluxo como condicionais if/cond.
1) O documento discute programação funcional em Python, definindo o paradigma, focos e exemplos de como reduzir efeitos colaterais em programas. 2) Apresenta conceitos como funções puras e impuras, funções como cidadãos de primeira classe, partials e imutabilidade. 3) Discutem objetos versus variáveis em Python e tipos mutáveis e imutáveis na linguagem.
Este documento resume os principais conceitos da programação lógica em Prolog, incluindo:
1) Fatos, regras, variáveis e predicados para representar dados e relações;
2) Queries para extrair informação através da dedução lógica;
3) Exemplos simples usando uma família bíblica para ilustrar os conceitos.
O documento discute os paradigmas de programação imperativo e estruturado, apresentando as linguagens BASIC e FORTRAN como exemplos históricos. Inclui detalhes sobre recursos, comandos, variáveis, entrada/saída e exemplos de código nas duas linguagens.
O documento apresenta um programa de curso sobre paradigmas de programação, abordando três principais paradigmas: imperativo, declarativo e misto. O programa inclui tópicos como noções sobre paradigmas, abstração em linguagem de máquina e assembly, programação funcional e lógica, além de discutir a importância da linguagem de programação.
O documento apresenta um programa de curso sobre paradigmas de programação, abordando três principais paradigmas (imperativo, declarativo e misto) e suas respectivas linguagens (Assembly, Prolog, Python). O documento também discute a importância da linguagem de programação e exemplifica alguns paradigmas e linguagens como Assembly, Prolog, Ruby e outras.
O documento discute os conceitos básicos da programação orientada a objetos, incluindo classes e objetos, encapsulamento, herança, polimorfismo e comunicação por mensagens. É apresentada a evolução histórica das linguagens estruturadas para a programação orientada a objetos.
O documento discute representação do conhecimento através de grafos conceituais, incluindo características como nós de conceitos e relações, hierarquias de tipos, operações de generalização e especialização. Também apresenta a arquitetura de subsunção de Brooks, na qual a inteligência emerge de comportamentos organizados em camadas de tratadores de tarefas assíncronas.
Este documento apresenta conceitos fundamentais de probabilidade e crenças para sistemas de inteligência artificial. Discute como crenças podem ser representadas numericamente através de probabilidades para apoiar o raciocínio de agentes. Também introduz noções como espaço amostral, eventos, variáveis aleatórias e distribuições de probabilidade para modelar incerteza.
O documento discute conceitos de processos estocásticos como cadeias de Markov e redes bayesianas temporais para modelar sistemas dinâmicos com incerteza. Exemplos mostram como inferir probabilidades de estados futuros usando cadeias de Markov dadas evidências passadas, e tipos de inferência como filtragem, previsão e suavização são explicados.
Este documento apresenta exemplos de lógica difusa em Python, incluindo variáveis linguísticas, partições difusas, inferência difusa, sistemas de controle difuso, fuzificação, defuzificação e um exemplo completo de determinação de gorjeta em um restaurante usando lógica difusa.
O documento apresenta os principais conceitos da lógica difusa e teoria dos conjuntos difusos, comparando-os com a lógica clássica. Aborda funções de pertinência, operações com conjuntos difusos como união e intersecção, e definições como suporte, núcleo e corte de nível. O objetivo é fornecer os fundamentos teóricos para aplicações de sistemas difusos em controle e inferência.
1) O documento apresenta uma introdução aos conceitos básicos de planejamento em inteligência artificial, incluindo definições de plano, planejamento clássico, representação fatorial de estados e busca em espaços de estados.
2) É descrito o formalismo PDDL para representar domínios, estados, ações e problemas de planejamento. Exemplos ilustram como escrever domínios e problemas em PDDL.
3) São explicados conceitos como planejamento em ordem parcial vs ordem total, grafos de planejamento
O documento discute representação do conhecimento através de roteiros e quadros. Roteiros representam eventos dinâmicos ao longo do tempo em um contexto específico, enquanto quadros armazenam informações sobre objetos e suas propriedades. O documento fornece exemplos de um roteiro de restaurante e um quadro de quarto de hotel para ilustrar esses conceitos.
Este documento apresenta os principais conceitos de representação do conhecimento em inteligência artificial, incluindo engenharia do conhecimento, ontologias, redes semânticas, quadros de casos e dependências conceituais. Discute como representar conceitos, relacionamentos, ações e eventos para formalizar o conhecimento e permitir raciocínio e inferência.
O documento apresenta exemplos de recursividade em Prolog, incluindo recursividade normal, iterativa e acumulador. Também mostra o uso de corte (!) para podar a árvore de busca e melhorar a eficiência, destacando a diferença entre corte verde e corte vermelho. Por fim, explica brevemente tipos, predicados meta-lógicos e extra-lógicos em Prolog.
O documento lista 20 desafios de programação em Prolog, incluindo comprimir listas, remover elementos, dividir listas, criar listas de Fibonacci, inserir elementos, extrair elementos aleatórios, gerar listas aleatórias, permutar elementos e combinar listas.
O documento apresenta 20 desafios de programação em Prolog, incluindo remover elementos de listas, verificar membros e subconjuntos de listas, inverter, encontrar elementos, gerar números aleatórios e ordenar listas.
4. Definição
Em ciência da computação, programação funcional é um paradigma de programação
que trata a computação como uma avaliação de funções matemáticas e que evita
estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da
programação imperativa, que enfatiza mudanças no estado do programa 1 2
1
Fonte: Wikipedia
2
Paul Hudak (setembro de 1989). "Conception, evolution, and application of functional
programming languages"(pdf) . ACM Computing Surveys.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
5. Foco da Programação Funcional
• Manutenibilidade
• Testabilidade
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
6. Um Programa Simples Não Funcional em Python
1 from datetime import datetime
2 class SaudacaoEntrada :
3 def __init__(self):
4 hora_atual = datetime.now()
5 if hora_atual.hour < 12:
6 self. SaudacaoEntrada = "Bom Dia"
7 elif 12 <= hora_atual.hour < 18:
8 self. SaudacaoEntrada = "Boa Tarde"
9 else:
10 self. SaudacaoEntrada = "Boa Noite"
11 def sauda(self, nome):
12 print(f"{self. SaudacaoEntrada }, {nome}.")
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
7. Continuação do Programa
1 def main ():
2 name = input("Digite o seu nome ")
3 Saudacao = SaudacaoEntrada ()
4 Saudacao.sauda(name)
5
6 if __name__ == "__main__":
7 main ()
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
8. Efeitos Colaterais - Side Effects
Problemas do ponto de vista da programação funcional(efeitos colaterais)
• A função construtora modifica variáveis fora do seu escopo
• As funções internas (não main) executam operações de entrada e saída
A existência de efeitos colaterais nos programas dificulta a compreensibilidade do
programa e sua manutenibilidade. Além disso o fato das variáveis serem mutáveis
também contribui para dificultar a rastreabilidade do mesmo.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
9. Testabilidade
Procedimentos com efeitos colaterais, por não serem isolados, dificultam o processo de
testes.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
10. Exemplos de Efeitos Colaterais
• Imprimir alguma coisa
• Ler um arquivo
• Escrever em um arquivo
• Interagir com uma base de dados
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
11. Reduzindo os efeitos colaterais
1 from datetime import datetime
2 class Saudacoes:
3 # a classe será autocontida e não realiza operações de E/S
4 def __init__(self, saudacao):
5 self. saudacaoIntrodutoria = saudacao
6
7 # a função retorna a string ao invés de imprimí-la
8 def sauda(self, nome):
9 return f"{self. saudacaoIntrodutoria }, {nome}."
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
12. As opereções de E/S são transferidas para a main()
1 def main ():
2 # criacao do objeto fora do escopo da classe Saudacoes
3 hora_atual = datetime.now()
4 if hora_atual.hour < 12:
5 saudacao_inicial = "Bom dia"
6 elif 12 <= hora_atual.hour < 18:
7 saudacao_inicial = "Boa Tarde"
8 else:
9 saudacao_inicial = "Boa Noite"
10
11 nome = input("Entre com o seu nome:")
12 saudacao = Saudacoes( saudacao_inicial )
13 print(saudacao.sauda(nome))
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
13. Sem Classes e Objetos
Programas não necessariamente precisam de classes e objetos. Classes e Objetos
podem tornar programas mais complexos e até mais lentos.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
14. Somente com funções
Ao separar as responsabilidades em funções teremos:
1 from datetime import datetime
2
3 def sauda(nome, saudacao_inicial ):
4 return f"{ saudacao_inicial }"
5
6 def definir_saudacao ():
7 hora_atual = datetime.now()
8 if hora_atual.hour < 12:
9 return "Bom dia"
10 elif 12 <= hora_atual.hour < 18:
11 return "Boa tarde"
12 else:
13 return "Boa noite"
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
15. Função main
Temos um programa completamente funcional sem uso de maiores recursos.
1 def ler_nome ():
2 return input("Digite o seu nome: ")
3
4 def main ():
5 print(sauda(ler_nome (), definir_saudacao ()))
6
7 if __name__ == "__main__":
8 main ()
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
16. Funções Puras ou Impuras
Definição
Uma função é considerada pura se é livre de efeitos colaterais, caso contrário é
chamada de impura.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
17. Cidadãos de Primeira Classe
Em ambientes funcionais as funções podem (devem) ser passadas como argumentos
em outras funções
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
18. Funções como Argumentos
1 from datetime import datetime
2 # a variavel leitor_saudacoes receberá uma função
3 def sauda(nome, leitor_saudacoes ): # :LeitorSaudacao
4 if nome == "ronaldo":
5 return "Grande Ron"
6 # a função recebida é chamada aqui
7 return f"{ leitor_saudacoes ()}, {nome}."
8 def ler_saudacao ():
9 hora_atual = datetime.now()
10 if hora_atual.hour < 12:
11 return "Bom dia"
12 elif 12 <= hora_atual.hour < 18:
13 return "Boa Tarde"
14 else:
15 return "Boa Noite"
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
19. Funções como Argumentos - Continua
Observe que para que uma função seja passada como argumento em Python basta
remover os ()
1 def ler_nome ():
2 return input("Entre com o seu nome: ")
3
4 def main () -> None:
5 # chamada de função passando função como argumento
6 print(sauda(ler_nome (), ler_saudacao))
7
8 if __name__ == "__main__":
9 main ()
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
20. Partials
Com partials podemos fixar um certo número de argumentos com valores prefixados
1 from datetime import datetime
2 from functools import partial
3 def sauda(nome, leitor_saudacao ):
4 if nome == "ronaldo":
5 return "Grande Ron"
6 return f"{ leitor_saudacao ()}, {nome}."
7 def ler_saudacoes ():
8 hora_atual = datetime.now()
9 if hora_atual.hour < 12:
10 return "Bom dia"
11 elif 12 <= hora_atual.hour < 18:
12 return "Boa Tarde"
13 else:
14 return "Boa Noite"
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
21. Partials - main
1 def ler_nome ():
2 return input("Entre com seu nome: ")
3
4 def main ():
5 # seta o valor de leitor_saudacao da função original
6 funcao_sauda = partial(sauda, leitor_saudacao =ler_saudacoes)
7 print(funcao_sauda(ler_nome ()))
8
9 if __name__ == "__main__":
10 main ()
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
22. Imutabilidade
Em ambientes funcionais as variáveis são associadas a expressões e seus valores se
tornam imutáveis. Linguagens como python usam as duas possibilidades. Vejamos
alguns exemplos.
1 import random
2 def main () -> None:
3 lista_para_testar = [120, 68, -20, 0, 5, 67, 14, 99]
4 # Usando ordenamento com imutabilidade mantém a listas original
intacta
5 lista_ordenada = sorted( lista_para_testar )
6 print(f"Lista original: { lista_para_testar }")
7 print(f"Lista ordenada: { lista_ordenada}")
8 # ordenamento com modificação da lista original
9 lista_para_testar .sort ()
10 print(f"Lista original: { lista_para_testar }")
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
23. Imutabilidade - Continuação
1 # outros exemplos de operações mutáveis e imutáveis
2 cartas = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
"K", "A"]
3
4 cartas_embaralhadas = random.sample(cartas, k=len(cartas))
5 print(f"Cartas embaralhadas: { cartas_embaralhadas }")
6 print(f"Cartas originais: {cartas}")
7
8 random.shuffle(cartas) # embaralha cartas (mutável)
9 print(f"cartas: {cartas}")
10
11 if __name__ == "__main__":
12 main ()
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
24. Mutabilidade x Imutabilidade
Um objeto pode ser também mutável ou imutável se o seu estado pode ser modificado
após a criação. As linguagens híbridas como python podem ter elementos pertencentes
a uma ou outra categorias.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
25. Objetcos x Variáveis em Python
Definições:
• Variáveis são referências para objetos.
• Objetos são elementos delimitados em um espaço de memória concreto.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
26. Objetos em Python
Em Python tudo são objetos: números, strings, funções, classes, etc.
Os objetos possuem as seguintes caractarísticas:
• Valor
• Identidade
• Tipo
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
27. Verificando o valor do objeto
Os valores dos objetos são instâncias de tipos primitivos como int, float, etc ou ainda
definidos pelo programador. Podemos verificar estes valores e seus tipos através do
isinstance.
1 >>> isinstance (28,int)
2 True
3
4 >>> isinstance (3.14,float)
5 True
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
28. Verificando o ID do objeto
1 >>> id (12)
2 2182424887888
3 >>> x = 10
4 >>> id(x)
5 2182424887824
6 >>> id (10)
7 2182424887824
8 >>> y = 10
9 >>> id(y)
10 2182424887824
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
29. Testando a Imutabilidade dos Tipos Primitivos
1 >>> x = y = 13
2 >>> id(x)
3 2182424887920
4 >>> id(y)
5 2182424887920
6 >>> y += 1
7 >>> y
8 14
9 >>> id(y)
10 2182424887952
11 >>> id(x)
12 2182424887920
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
30. Tipos dos Objetos type e .__class__
1 >>> type (42)
2 <class ’int’>
3 >>> type(’Escambau do judas ’)
4 <class ’str’>
5 >>> type ([1,2,3,4])
6 <class ’list ’>
7 >>>
8 >>> (42).__class__
9 <class ’int’>
10 >>> ’Queima leao do pici ’.__class__
11 <class ’str’>
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
31. Tipos Primitivos Imutáveis
O tipos primitivos boolean, int float e complex são imutáveis.
Os tipos str, bytes e tuple também o são.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
32. Tipos Mutáveis em Python - List
A lista em si é mutável, mas os elementos internos podem ou não ser dependendo do
tipo.
Ex.
1 >>> numeros = [1,5,8] # criando uma lista de números
2 >>> id(numeros)
3 2490398152384
4 >>> id(numeros [1]) # verificando o id do segundo elemento
5 2490392248688
6 >>> numeros [1] = 10 # mudando o segundo elemento
7 >>> id(numeros [1]) # verificando se o elemento mudou
8 2490392248848
9 >>>
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
33. Tipos Mutáveis em Python - Dicionários
Com dicionários você pode mudar o valor associado a uma chave e adicionar ou
remover novos pares de ’valor-chave’.
Ex.
1 >>> lista_compras = {’feijao ’:10, ’arroz ’:20, ’ovos ’:12,
’farinha ’:30, ’rapadura ’:15}
2 >>> lista_compras[’banana ’]=20 # adicionando dados
3 >>> del lista_compras[’arroz ’] # apagando dados
4 >>> lista_compras
5 {’feijao ’: 10, ’ovos ’: 12, ’farinha ’: 30, ’rapadura ’: 15,
’banana ’: 20}
6 >>> lista_compras[’rapadura ’]=30
7 >>> lista_compras
8 {’feijao ’: 10, ’ovos ’: 12, ’farinha ’: 30, ’rapadura ’: 30,
’banana ’: 20}
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
34. Tipos Mutáveis em Python - Sets (Conjuntos)
Com os conjuntos podemos inserir ou remover itens.
Ex.
1 >>> compras = {’feijao ’,’farinha ’,’rapadura ’}
2 >>> compras.add(’arroz ’)
3 >>> compras
4 {’arroz ’, ’rapadura ’, ’feijao ’, ’farinha ’}
5 >>> compras.discard(’arroz ’)
6 >>> compras
7 {’rapadura ’, ’feijao ’, ’farinha ’}
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
35. Resumo dos Dados de Mutabilidade no Python
Tipo Classe Mutável
Números int, float, complex Não
Strings str Não
Tuplas tuple Não
Bytes bytes Não
Booleano bool Não
conjuntos Fixos(Frozen Sets) frozenset Não
Listas list Sim
Dicionários dict Sim
Conjuntos (Sets) set Sim
Listas de Bytes(Byte Arrays) bytearray Sim
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
36. Atenção: Aliases com Mutabilidade
Uma mudança em um alias de um tipo imutável não afeta o original.
Ex.
1 >>> x = 2
2 >>> y = x
3 >>> x
4 2
5 >>> y
6 2
7 >>> y += 1
8 >>> x
9 2
10 >>> y
11 3
12 >>>
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
37. Atenção: Aliases com Mutabilidade
Uma mudança em um alias de um tipo mutável afeta o original.
Ex.
1 >>> compras = [’pera ’,’maca ’,’banana ’]
2 >>> lista = compras
3 >>> lista.append(’laranjas ’)
4 >>> compras
5 [’pera ’, ’maca ’, ’banana ’, ’laranjas ’]
6 >>> lista
7 [’pera ’, ’maca ’, ’banana ’, ’laranjas ’]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
38. Argumentos Mutáveis
Ao serem passados argumentos mutáveis para uma função a variável externa pode
sofrer as consequencias de mudanças realizadas dentro das funções.
Ex.
1 >>> def dobro(lista):
2 ... for i in range(len(lista)):
3 ... lista[i] = lista[i]**2
4 ... return lista
5 >>> x = [1,2,3,4]
6 >>> dobro(x)
7 [1, 4, 9, 16]
8 >>> x
9 [1, 4, 9, 16]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
39. Argumentos Imutáveis
Isto não acontece se o argumento representar um dado imutável.
Ex.
1 >>> def dobro(y):
2 ... y *= 2
3 ... print(id(y))
4 ... return y
5 ...
6 >>> x = 10
7 >>> id(x)
8 2490392248848
9 >>> dobro(x)
10 2490392249168
11 20
12 >>> id(x)
13 2490392248848
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
40. Argumentos Default Não Sobrescrevem a Lista(Mutável)
Lista é preservada entre chamadas não ocorrendo o esperado.
Ex.
1 >>> def adicionar_item (item, lista = []):
2 ... lista.append(item)
3 ... return lista
4 ...
5 >>> adicionar_item (1)
6 [1]
7 >>> adicionar_item (2)
8 [1, 2]
9 >>> adicionar_item (3)
10 [1, 2, 3]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
41. Solução
1 >>> def adiciona(item, lista=None):
2 ... if lista == None:
3 ... lista =[]
4 ... lista.append(item)
5 ... return lista
6 ...
7 >>> adiciona (1)
8 [1]
9 >>> adiciona (2)
10 [2]
11 >>> adiciona (3)
12 [3]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
42. Atenção
Muitos aconselham a não usar argumentos default. De
qualquer forma, melhor sempre tomar cuidado.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
43. Uma aplicação para esse caso
Essa propriedade das listas pode ser usada para calcular alguma coisa como a média
móvel.
Ex.
1 >>> def media_movel(x, amostra =[]):
2 ... amostra.append(x)
3 ... return sum(amostra)/len(amostra)
4 >>> media_movel (1)
5 1.0
6 >>> media_movel (3)
7 2.0
8 >>> media_movel (7)
9 3. 6666666666666665
10 >>> media_movel (5)
11 4.0
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
44. Cópias Rasas - Shallow Copy
Cópia de uma lista obtida com slice [:], o método .copy ou o copy.copy(). Neste casos
cria-se uma nova lista porém os elementos da nova lista são aliases para os elementos
internos da lista anterior.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
45. Cópia Profunda
Quando usada a função copy.deepcopy() a lista é copiada integralmente para uma
nova lista.
Experimente.....
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
46. Métodos Não Mutáveis
Strings são imutáveis o que significa que os métodos que as modificam criam cópias
das strings sem modificar as originais.
1 >>> original = "esta e uma string"
2 >>> original.upper () # isto apenas cria uma cópia
3 "ESTA E UMA STRING"
4 >>> original
5 "esta é uma string"
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
47. Aplicação desta característica
Esta propriedade pode permitir o encadeamento de métodos.
Ex.
1 >>> texto = "<html lan=’eng ’>"
2 >>> texto.removeprefix("<").removesuffix(">").upper ().center (20)
3 " HTML LAN=’ENG’ "
4 >>> texto
5 "<html lan=’eng ’>"
6 >>>
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
48. Tuplas contendo dados mutáveis
Tuplas são imutáveis, mas podem conter objetos mutáveis.
Ex.
1 >>> vermelho = ("RED",[255,0,0])
2 >>> vermelho [0] = "red"
3 Traceback (most recent call last):
4 File "<stdin >", line 1, in <module >
5 TypeError: ’tuple ’ object does not support item assignment
6 >>> vermelho [1] = [0,0,255]
7 Traceback (most recent call last):
8 File "<stdin >", line 1, in <module >
9 TypeError: ’tuple ’ object does not support item assignment
10 >>> vermelho [1][0] = 0
11 >>> vermelho
12 (’RED’, [0, 0, 0])
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
49. Componentes Automáticos de Classes
Python já cria automaticamente alguns métodos em classes.
Ex.
1 >>> class Pessoa:
2 ... pass
3 ...
4 >>> dir(Pessoa)
5 [’__class__ ’, ’__delattr__ ’, ’__dict__ ’, ’__dir__ ’, ’__doc__ ’,
’__eq__ ’, ’__format__ ’, ’__ge__ ’, ’__getattribute__ ’,
’__gt__ ’, ’__hash__ ’, ’__init__ ’, ’__init_subclass__ ’,
’__le__ ’, ’__lt__ ’, ’__module__ ’, ’__ne__ ’, ’__new__ ’,
’__reduce__ ’, ’__reduce_ex__ ’, ’__repr__ ’, ’__setattr__ ’,
’__sizeof__ ’, ’__str__ ’, ’__subclasshook__ ’, ’__weakref__ ’]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
50. Injeção de Atributos e Métodos
1 >>> Pessoa.emprego=’Programador ’
2 >>> def __init__(self, nome, emprego):
3 ... self.nome = nome
4 ... self.emprego = emprego
5 >>> Pessoa.__init__=__init__
6 >>> dir(Pessoa)
7 [’__class__ ’, ’__delattr__ ’, ’__dict__ ’, ’__dir__ ’,
’__doc__ ’, ’__eq__ ’, ’__format__ ’, ’__ge__ ’,
’__getattribute__ ’, ’__gt__ ’, ’__hash__ ’,
’__init__ ’, ’__init_subclass__ ’, ’__le__ ’,
’__lt__ ’, ... , ’__subclasshook__ ’, ’__weakref__ ’,
’emprego ’]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
51. Dica sobre Injeção de Atributos e Métodos
A injeção de elementos em uma classe pode ser útil para a programação funcional em
Python
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
52. Impedindo a Adição de Atributos a Objetos
Podemos limitar a adição de atributos a objetos usando __slots__,...
Ex.
1 class Pessoa:
2 ... __slots__ = (’nome ’,’emprego ’)
3 ... def __init__(self,nome):
4 ... self.nome = nome
5 ...
6 >>> joao = Pessoa(’Joao ’)
7 >>> joao.emprego = ’Engenheiro ’
8 >>> joao.endereco = ’Rua X Numero Z’
9 Traceback (most recent call last):
10 File "<stdin >", line 1, in <module >
11 AttributeError : ’Pessoa ’ object has no attribute ’endereco ’
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
53. Impedindo a Adição de Atributos a Objetos
... mas não a classes .
Ex.
1 >>>
2 >>> Pessoa.endereco = "Rua X número Z"
3 >>>
4 >>> dir(joao)
5 [’__class__ ’, ’__delattr__ ’, ’__dir__ ’, ’__doc__ ’, ’__eq__ ’,
’__format__ ’, ’__ge__ ’, ’__getattribute__ ’, ... ,
’__subclasshook__ ’, ’emprego ’, ’endereco ’, ’nome ’]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
54. Funções __setattr__() and .__delattr__()
Estas funções controlam o acesso a atributos de forma a torná-los imutáveis se for o
caso.
EX.
1 >>> class Imutavel:
2 ... def __init__(self, valor):
3 ... super ().__setattr__("valor", valor)
4 ... def __setattr__(self, nome, attr_valor):
5 ... raise AttributeError(f"Não posso mudar o valor do
atributo ’{nome}’")
6 ... def __delattr__(self, nome):
7 ... raise AttributeError(f"Não posso apagar o atributo
’{nome}’")
8 ...
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
55. Funções __setattr__() and .__delattr__()
Cont..
1 >>> gravidade = Imutavel (9.78)
2 >>> gravidade.valor
3 9.78
4 >>> gravidade.valor = 9.8
5 Traceback (most recent call last):
6 File "<stdin >", line 1, in <module >
7 File "<stdin >", line 5, in __setattr__
8 AttributeError : Não posso mudar o valor do atributo ’valor ’
9 >>> del gravidade.valor
10 Traceback (most recent call last):
11 File "<stdin >", line 1, in <module >
12 File "<stdin >", line 7, in __delattr__
13 AttributeError : Não posso apagar o atributo ’valor ’
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
56. Properties
O uso de getters sem setters pode ocultar (fazer de conta que oculta) atributos que
queremos que sejam ’imutáveis’. EX.
1 >>> class Pontos:
2 ... def __init__(self, x):
3 ... self._x = x
4 ... @property
5 ... def x(self):
6 ... return self._x
7 >>> p = Pontos (2,3)
8 >>> p.x
9 2
10 >>> p.x = 3
11 Traceback (most recent call last):
12 File "<stdin >", line 1, in <module >
13 AttributeError : can’t set attribute ’x’
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
57. Tuplas Nomeadas
Tuplas nomeadas podem ser uma boa opção para se trabalhar com dados imutáveis.
Ex.
1 >>> from collections import namedtuple
2 >>> Pontos = namedtuple(’Ponto ’,"x y")
3 >>> ponto = Pontos (21,43)
4 >>> ponto
5 Ponto(x=21, y=43)
6 >>> ponto.x
7 21
8 >>> ponto.x = 12
9 Traceback (most recent call last):
10 File "<stdin >", line 1, in <module >
11 AttributeError : can’t set attribute
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
58. Classes de Dados
dataclass pode ser uma boa opção para trabalhar com classes que apenas representam
dados.
Ex.
1 >>> from dataclasses import dataclass
2 >>> @dataclass
3 ... class Color:
4 ... red: int
5 ... green: int
6 ... blue: int
7 >>> color = Color (255, 0, 0)
8 >>> color.green = 128
9 >>> color
10 Color(red =255, green =128, blue =0)
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
59. Criando Classes de Dados Imutáveis
1 >>> @dataclass(frozen=True)
2 ... class Cor:
3 ... vermelho :int
4 ... verde : int
5 ... azul: int
6 ...
7 >>> cor = Cor (255,0,0)
8 >>> cor.verde = 255
9 Traceback (most recent call last):
10 File "<stdin >", line 1, in <module >
11 File "<string >", line 4, in __setattr__
12 dataclasses. FrozenInstanceError : cannot assign to field ’verde ’
13 >>> cor
14 Cor(vermelho =255, verde =0, azul =0)
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
60. Elementos de Programação Funcional em Python
• Compreensão de Listas, Iteradores e Geradores(list comprehensions, iterators e
generators)
• Funções Anônimas (Lambda)
• Mapas e Reduções (Map Reduce)
• Filtros (Filter)
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
61. List Comprehensions
List compreension é uma abordagem declarativa para criação de listas3. Ex.
1 >>> lista = [x for x in range (10) if x < 5]
2 >>> lista
3 [0, 1, 2, 3, 4]
4 >>>
3
Ver também iterators e generators
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
62. Funções Lambda
1 >>> x = lambda a, b, c : a + b + c # lambda simples
2 >>> x(5,6,7)
3 18
4 >>> def myfunc(n):
5 ... return lambda a : a * n # retorna uma lamba com n fixo
6 ...
7 >>> m = myfunc (3)
8 >>> m(4)
9 12
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
63. Maps
O Map é uma forma de aplicar funções a iteráveis (listas, tuplas, dicionários, etc) Ex.
1 >>> def square(number):
2 ... return number ** 2
3 ...
4 >>> numbers = [1, 2, 3, 4, 5]
5 >>> squared = map(square, numbers)
6 >>> list(squared)
7 [1, 4, 9, 16, 25]
8 >>>
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
64. Reduce
A função reduce encadeia uma chamada sequencialmente a um conjunto de dados.
Vejamos como calcular uma soma acumulada.
1 >>> def my_add(a, b):
2 ... return a + b
3 ...
4 >>> ns = [1,2,3,4,5,6,7,8,9,10]
5 >>> from functools import reduce
6 >>> reduce(my_add,ns)
7 55
Resultado: ((((((((((0 + 1) + 2) + 3) + 4) + 5) + 6) + 7) + 8) + 9) + 10)
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
65. Filter
Filtra elementos em iteráveis. Ex.
1 >>> import math
2 >>> def eh_par(x):
3 ... return x%2==0
4 >>> numeros = [1,2,4,5,3,6,7,8,9]
5 >>> pares = list(filter(eh_par,numeros))
6 >>> pares
7 [2, 4, 6, 8]
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
66. Seguindo
Agora que vimos os conceitos básicos associados a programação funcional podemos
estudar linguagens puramente funcional.
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação
67. E N J O Y
Ronaldo F. Ramos Instituto Federal do Ceará
Paradigmas de Programação