Ir para o conteúdo

Introdução à Programação Funcional

Bem-vindo ao material didático da disciplina de Introdução à Programação Funcional! Este livro serve como guia completo da disciplina, organizada em três unidades de 20 horas cada (60 horas totais), que percorrem desde os fundamentos do paradigma funcional até o desenvolvimento de aplicações modernas e reativas.


📋 Plano da Disciplina

Carga horária total 60 horas
Estrutura 3 unidades de 20 horas (10 aulas de 2h por unidade)
Linguagens Haskell, Clojure/ClojureScript e Elixir
Pré-requisitos Lógica de programação e experiência com alguma linguagem imperativa

Ementa: Paradigmas de programação. Funções puras, imutabilidade e transparência referencial. Tipos algébricos e classes de tipos. Recursão, listas e funções de alta ordem. Programas interativos e efeitos. Testes baseados em propriedades. Linguagens funcionais na indústria: Clojure (JVM) e Elixir (BEAM). Concorrência com o modelo de atores. Desenvolvimento de aplicações web funcionais.

Cada unidade possui um plano detalhado com objetivos de aprendizagem, cronograma aula a aula, metodologia e critérios de avaliação — consulte a primeira página de cada unidade no menu.


🎯 Estrutura do Curso

📘 Unidade 1: Paradigmas e Haskell Básico (20h)

Exploramos os fundamentos teóricos do paradigma funcional em comparação aos paradigmas imperativo e orientado a objetos. Utilizando a linguagem Haskell, uma linguagem funcional pura com tipagem estática forte, estudamos os conceitos essenciais: * Fundamentos da sintaxe e ambiente de desenvolvimento (GHCUp, Stack, REPL/GHCi) * Funções puras, casamento de padrões (pattern matching) e guardas * Manipulação e compreensão de listas, e recursão * Funções de Alta Ordem (High-Order Functions: map, filter, fold)

Avaliação: prova escrita individual (70%) e listas de exercícios (30%). Veja o plano completo da unidade.

📙 Unidade 2: Haskell Avançado e Qualidade de Código (20h)

Avançamos para tópicos do ecossistema de produção em Haskell, adaptados às práticas do Haskell moderno: * Definição de novos tipos algébricos (ADTs) e Typeclasses * Programação interativa usando a Monad de Entrada/Saída (IO) * Estrutura de projetos industriais com Stack e gerenciamento de dependências com Cabal/package.yaml * Construção de uma biblioteca de manipulação e serialização de dados JSON (adaptado do clássico Real World Haskell, Capítulo 5) * Testes baseados em propriedades com QuickCheck e garantia de qualidade de software (adaptado do Real World Haskell, Capítulo 11)

Avaliação: desenvolvimento prático da biblioteca JSON integrada com uma suíte de testes QuickCheck (100%). Veja o plano completo da unidade.

📗 Unidade 3: Clojure e Elixir (20h)

Na última unidade, exploramos a diversidade do paradigma funcional através de duas linguagens modernas focadas na indústria: 1. Clojure: Um dialeto Lisp moderno e pragmático rodando sobre a Máquina Virtual Java (JVM), que traz forte ênfase em imutabilidade e metaprogramação. 2. Elixir: Uma linguagem funcional concorrente que roda sobre a BEAM (Erlang VM), famosa por sua escalabilidade, tolerância a falhas e reatividade em tempo real.

Avaliação: dois projetos práticos com peso igual (veja o plano completo da unidade): * Clojure/ClojureScript ToDo List (50%): Uma aplicação full-stack com backend Jetty/Reitit, banco SQLite (next.jdbc) e frontend reativo com ClojureScript e Reagent (React 19). * Elixir/Phoenix LiveView ToDo List (50%): Uma aplicação de tempo real concorrente onde o frontend e o backend se integram nativamente via WebSockets e LiveView, utilizando Ecto e SQLite.


📚 Bibliografia e Referências

  • Haskell: Lipovača, Miran. Learn You a Haskell for Great Good!
  • Real World Haskell: O'Sullivan, Bryan; Stewart, Don; Goerzen, John. Real World Haskell. O'Reilly, 2008. Disponível gratuitamente em book.realworldhaskell.org (com código modernizado para os padrões atuais do GHC nos capítulos deste livro).
  • Clojure: Miller, Alex. Programming Clojure.
  • Elixir: Thomas, Dave. Programming Elixir.
  • Materiais e Tutoriais Complementares: LambdaGEO Research Lab.