Stack

Estrutura de dados genérica do tipo LIFO (Last-In, First-Out), que armazena itens em uma pilha, permitindo adicionar e remover elementos apenas do topo. É ideal para controle de fluxo, avaliação de expressões, parsing, e outras situações onde o último valor inserido deve ser o primeiro a ser recuperado.

fornece uma maneira simples e eficiente de gerenciar coleções mutáveis, com ajuste sobre liberação de memória por meio do parâmetro shrinkFactor

Importação

_ <- fat.extra.Stack

Construtor

Nome Assinatura Breve descrição
Stack (stack: List = []) Cria uma pilha opcionalmente inicializada a partir de uma lista

quando inicializada com uma lista, o topo da pilha será o último item da lista

Parâmetro de controle

Nome Tipo Padrão Descrição
shrinkFactor Number 1.5 Define o fator de contração automática da lista interna

Valores típicos para shrinkFactor

Valor Efeito
1.0 Contrai a pilha a cada remoção (liberação mais rápida de memória)
1.5 Equilíbrio entre velocidade e consumo de memória (padrão)
2.0 Reduz operações de limpeza, mas retém memória por mais tempo
infinity Desativa a contração automática

Membros do protótipo

Nome Assinatura Breve descrição
isEmpty <> Boolean Retorna verdadeiro se pilha estiver vazia
nonEmpty <> Boolean Retorna verdadeiro para pilha não vazia
size <> Number Retorna o número de itens na pilha
toText <> Text Retorna o literal de texto 'Stack'
some <> Option Envolve o valor em Option
push (value: Any): Void Adiciona um valor ao topo da pilha
pop <> Any Remove e retorna o item do topo; lança erro se vazia
peek <> Any Retorna o item do topo sem removê-lo
toList <> List Retorna uma cópia rasa da pilha como lista

Exemplo

_ <- fat.extra.Stack

stack = Stack()
stack.push("{")
stack.push("[")

stack.pop      # retorna "["
stack.peek     # retorna "{"
stack.isEmpty  # retorna false
stack.size     # retorna 1

Observações

  • Stack não é reentrante - se for usada em contextos assíncronos, as operações devem ser protegidas manualmente com async.atomic, por exemplo:

    async.atomic(-> stack.push(value))
    

Veja também

results matching ""

    No results matching ""