Domine a Lógica e as Linguagens de Programação
Do raciocínio computacional fundamental às linguagens que moldam a indústria — com exemplos reais e coloração de sintaxe profissional.
Lógica de Programação: Do zero às estruturas essenciais
Conceitos fundamentais que formam a base de qualquer linguagem. Exemplos com sintaxe destacada e colorida.
O que é um programa?
Um programa é uma sequência de instruções que manipulam dados e tomam decisões. A lógica de programação organiza essas instruções de forma correta e compreensível.
Variáveis e Tipos de Dados
Variáveis
Espaço na memória que guarda um valor. Use nomes significativos.
idade = 25
nome = "Maria"
altura = 1.68
Tipos primitivos
| Tipo | Exemplo | Descrição |
|---|---|---|
int | 42, -7 | Números sem parte decimal |
float | 3.14 | Números com casas decimais |
string | "Olá" | Sequência de caracteres |
bool | True, False | Verdadeiro ou falso |
Conversão de tipos
ano = 2025
texto_ano = str(ano) # "2025"
proximo = int("2026") # 2026
altura = float("1.75") # 1.75
Operadores e Expressões
Aritméticos
| Operador | Significado | Exemplo (a=10,b=3) |
|---|---|---|
+ | Adição | a + b → 13 |
- | Subtração | a - b → 7 |
* | Multiplicação | a * b → 30 |
/ | Divisão | a / b → 3.33 |
// | Divisão inteira | a // b → 3 |
% | Módulo | a % b → 1 |
** | Exponenciação | a ** b → 1000 |
Relacionais e lógicos
idade = 20
tem_carteira = True
pode_dirigir = idade >= 18 and tem_carteira # True
Estruturas de Controle
Condicionais
nota = 8.0
if nota >= 9.0:
print("Excelente")
elif nota >= 7.0:
print("Bom")
else:
print("Insuficiente")
Laço while
contador = 0
while contador < 5:
print(contador)
contador = contador + 1
Laço for e break/continue
for i in range(10):
if i == 3:
continue
if i == 7:
break
print(i)
# Saída: 0, 1, 2, 4, 5, 6
Funções
def saudacao(nome):
return "Olá, " + nome + "!"
print(saudacao("João"))
Parâmetros padrão e escopo
def aumentar_preco(valor, percentual=10):
return valor * (1 + percentual/100)
print(aumentar_preco(100)) # 110.0
print(aumentar_preco(100,20)) # 120.0
e_par(numero) que retorna True se par.Recursão
Fatorial
def fatorial(n):
if n == 0:
return 1
else:
return n * fatorial(n - 1)
print(fatorial(5)) # 120
Fibonacci
def fibonacci(n):
if n == 0: return 0
elif n == 1: return 1
else: return fibonacci(n-1) + fibonacci(n-2)
# 0 1 1 2 3 5 8 13 21 34
O(2ⁿ) — ineficiente para n grande.soma(n) que retorne 1+2+...+n.Estruturas de Dados
Lista
frutas = ["maçã", "banana"]
frutas.append("uva")
print(frutas[0]) # maçã
Pilha (LIFO)
pilha = []
pilha.append("A")
pilha.append("B")
print(pilha.pop()) # B
Fila (FIFO)
from collections import deque
fila = deque()
fila.append("João")
fila.append("Maria")
print(fila.popleft()) # João
| Estrutura | Ordem | Inserção | Remoção |
|---|---|---|---|
| Lista | Índice | Fim/posição | Fim/posição |
| Pilha | LIFO | Topo | Topo |
| Fila | FIFO | Final | Início |
Complexidade (Big O)
| Notação | Nome | Exemplo |
|---|---|---|
O(1) | Constante | Acesso por índice |
O(log n) | Logarítmico | Busca binária |
O(n) | Linear | Percorrer lista |
O(n log n) | Log-linear | Merge sort |
O(n²) | Quadrático | Dois laços aninhados |
O(2ⁿ) | Exponencial | Fibonacci recursivo |
O(n²) faz ~1 trilhão de operações, O(n log n) faz ~20 milhões.Exemplo integrado: consultório
from collections import deque
def adicionar_paciente(fila, nome, prioridade=False):
if prioridade:
fila.appendleft(nome)
else:
fila.append(nome)
def chamar_proximo(fila):
if len(fila) == 0:
print("Nenhum paciente.")
else:
print(f"Chamando {fila.popleft()}")
fila = deque()
adicionar_paciente(fila, "Ana")
adicionar_paciente(fila, "Bruno")
adicionar_paciente(fila, "Carla", prioridade=True)
chamar_proximo(fila)
chamar_proximo(fila)
chamar_proximo(fila)
Linguagens de Programação na Prática
Seis linguagens que representam paradigmas distintos e nichos importantes. Clique nos cards para explorar detalhes.
Compilada para bytecode, roda na JVM. Filosofia "write once, run anywhere".
Ver detalhes
Casos de uso
- Sistemas corporativos (Spring, Jakarta EE)
- Android (milhões de apps)
- Big Data (Hadoop, Spark, Kafka)
- Nuvem (Netflix, AWS)
Curiosidades
- Projeto Oak para TV a cabo interativa.
- Mascote Duke é ícone cultural.
- JIT e GCs modernos (ZGC) trazem performance nativa.
Puramente funcional, lazy evaluation, sistema de tipos forte.
Ver detalhes
Casos de uso
- Compiladores (GHC, Pandoc)
- Verificação formal (Cryptol)
- Finanças quantitativas
- Pipelines funcionais (Meta)
Curiosidades
- Nome em homenagem a Haskell Curry.
- Mônadas tornaram I/O prático.
- Listas infinitas graças à lazy evaluation.
Interpretada, dinâmica, sintaxe limpa. A "cola universal" da computação.
Ver detalhes
Casos de uso
- IA/ML (TensorFlow, PyTorch)
- Web (Django, Flask)
- DevOps (Ansible, scripts)
- Ciência de dados
Curiosidades
- Criado por Guido van Rossum em 1989.
- Nome veio do Monty Python.
import thismostra o Zen do Python.
Compilada, controle absoluto sobre memória. Base de kernels, drivers e engines.
Ver detalhes
Casos de uso
- Kernels (Linux, Windows, XNU)
- Drivers e firmware
- Engines de jogos
- OpenSSL, Redis, Nginx
Curiosidades
- Criada por Dennis Ritchie em 1972.
- O "Hello, World!" veio do livro K&R.
- Comportamento indefinido permite otimizações extremas.
Superset tipado do JavaScript. Tipagem estática opcional, transcompila para JS.
Ver detalhes
Casos de uso
- Front-end escalável (Angular, React)
- Back-end (NestJS, Deno)
- Mobile (React Native)
- CLIs e ferramentas
Curiosidades
- Criado por Anders Hejlsberg (Turbo Pascal, C#).
- Compilador auto-hospedado em TS.
- Tipos apagados em runtime, sem overhead.
Alternativa moderna ao C, com comptime, cross-compilation e sem hidden control flow.
Ver detalhes
Casos de uso
- Sistemas de baixo nível
- Build systems (compila C/C++)
- Desenvolvimento de jogos
- Segurança cibernética
Curiosidades
- Projeto solo de Andrew Kelley (2015).
- Comptime executa código em tempo de compilação.
- Cross-compilação nativa com
-target.
Conclusão
- Java — portabilidade e ecossistema corporativo.
- Haskell — pureza funcional com elegância.
- Python — a cola universal de dados e IA.
- C — alicerce insubstituível de sistemas.
- TypeScript — engenharia previsível para web.
- Zig — sistemas modernos, seguros e explícitos.
Conhecer essas linguagens é expandir seu repertório de pensamento computacional.
Desafios Finais
- Função que retorna o maior elemento de uma lista (sem funções prontas).
- Função recursiva para inverter uma string.
- Modele uma pilha de livros e simule operações.
- Algoritmo com laço até
ne laço interno até10→ qual complexidade?