Skip to content

[DEV] Conselhos, dicas e truques de programação

Girelli edited this page Dec 2, 2025 · 1 revision

Esta página é uma coleção de itens de informação (FYI) e aprendizado de hoje (TIL) que destacam utilitários ou padrões de programação úteis que não são óbvios ou são pouco conhecidos. Considere-os como uma sugestão e não como algo obrigatório.

Utilitários descartáveis

  • A classe base Disposable facilita para as subclasses o registro de valores que devem ser descartados quando a instância for descartada.

  • DisposableStore gerencia com segurança uma coleção de valores descartáveis. É preferível a IDisposable[].

  • DisposableMap gerencia um mapa onde os valores são descartáveis. Isso ajuda a evitar alguns bugs complicados de ciclo de vida em comparação com a implementação de um Map<K, IDisposable> por conta própria.

  • MutableDisposable gerencia com segurança um valor descartável que pode ser alterado. Isso evita bugs em que você se esquece de descartar o valor antigo ao sobrescrevê-lo com um novo valor.

Estruturas de dados

  • Os tipos nativos Map e Set são ordenados pela ordem de inserção 💡 Isso é pouco conhecido, mas pode ser útil
  • ResourceMap e ResourceSet que são mapas/conjuntos normais, mas indexados por URI
  • LRUCache é um mapa com recursos de recência e remoção de elementos aleatórios
  • TernarySearchTree é semelhante a um mapa com a capacidade de pesquisar substrings e superstrings (útil para contenção de caminhos)
  • SkipList é um mapa que é classificado com base em uma função de comparação personalizada
  • LinkedList é semelhante a arrays, mas com remoção/inserção mais rápida.

Utilitários para strings/arrays

Os módulos src/vs/base/common/arrays.ts e src/vs/base/common/strings.ts possuem diversos utilitários muito úteis para lidar com arrays ou strings.

Iteráveis

O módulo src/vs/base/common/iterator.ts contém utilitários para trabalhar com iteráveis. Iteráveis ​​podem ser uma alternativa melhor do que arrays, pois impõem o modo somente leitura por padrão, economizando chamadas a Array.slice.

Lazy, Async, Idle

Temos utilitários para atrasar certas operações ou valores.

  • Lazy<T> um valor preguiçoso é calculado apenas quando acessado pela primeira vez
  • IdleValue<T> é semelhante a Lazy, mas usa os tempos ociosos do navegador para calcular seu valor imediatamente. Implementa o padrão "ocioso até que seja urgente", veja: https://philipwalton.com/articles/idle-until-urgent/
  • runWhenIdle é o nosso wrapper para a função window.requestIdleCallback dos navegadores
  • Os métodos scheduleAtNextAnimationFrame e runAtThisOrScheduleAtNextAnimationFrame permitem entrar neste ou no próximo quadro de animação do navegador.

Clone this wiki locally