Alisson Steffens

👩‍🚀

August 8, 2024

Espaço negativo

A importância de definir o que uma aplicação não deve fazer

Espaço negativo é um conceito de design que destaca o valor do espaço vazio ao redor de um objeto, em vez de focar exclusivamente no objeto em si. Esse princípio pode ser aplicado em diversas áreas, incluindo a programação, onde o que está ausente pode ser tão essencial quanto o que está presente.

Aplicação na Programação

Na programação, o conceito de espaço negativo refere-se à importância de definir tanto o que uma aplicação deve fazer quanto o que ela não deve fazer. Estabelecer esses limites claros oferece vários benefícios:

  1. Melhoria na Identificação de Bugs: Ao especificar explicitamente o que a aplicação não deve fazer, torna-se mais fácil detectar e corrigir comportamentos indesejados.
  2. Simplificação do Desenvolvimento: Com limites bem definidos, o desenvolvimento de novas funcionalidades torna-se mais direto e organizado.
  3. Rejeição de Funcionalidades Inadequadas: Critérios bem estabelecidos permitem rejeitar funcionalidades que excedem o escopo planejado da aplicação.

Por exemplo, no contexto de micro-serviços, a abordagem ideal muitas vezes não é adicionar uma nova capacidade a um serviço existente (Serviço A), mas transferi-la para um serviço mais adequado (Serviço B) ou criar um novo serviço dedicado.

Aplicações Práticas

  1. Design de APIs: Ao projetar uma API, é crucial definir não apenas os endpoints e suas funcionalidades, mas também os casos de uso que não serão suportados.
  2. Segurança: Especificar o que não é permitido ajuda a prevenir vulnerabilidades e ataques.
  3. Manutenção e Escalabilidade: Limitar o escopo das funcionalidades facilita a manutenção e melhora a escalabilidade da aplicação.

Exemplo de Código

O conceito de espaço negativo pode ser aplicado ao código de diversas maneiras. Por exemplo, ao definir uma função que deve aceitar apenas números inteiros, é possível rejeitar valores decimais utilizando uma abordagem de espaço negativo:

function apenasInteiros(numero) {
  if (numero % 1 !== 0) {
    throw new Error('Apenas números inteiros são permitidos');
  }
  return numero;
}

Outra abordagem é utilizar assertivas para garantir que determinadas condições não sejam violadas (como evitar valores nulos), por exemplo:

function dividir(dividendo, divisor) {
  console.assert(divisor !== 0, 'Divisão por zero não é permitida');
  return dividendo / divisor;
}

Esses exemplos demonstram a eficácia de lidar com erros antes que eles ocorram, em vez de tratá-los posteriormente. Isso resulta em ganhos tanto em performance quanto em legibilidade do código.