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