Fórmulas
Referência do mecanismo de fórmulas: sintaxe, objetos disponíveis, conversões e recálculo.
Fórmulas🔗
Definição. Expressão Groovy avaliada pelo Freeplane, escrita no texto de um nó ou no valor de um atributo, prefixada por =.
Onde funcionam🔗
| Local | Sintaxe |
|---|---|
| Texto do nó | =expressão |
| Valor de atributo | =expressão |
| Detalhe | =expressão |
| Nota | Em geral não |
Pôr a fórmula no atributo costuma ser melhor: o texto do nó continua legível e o valor calculado fica na tabela.
Objetos disponíveis🔗
| Objeto | É |
|---|---|
node | O nó em que a fórmula está |
c | O controlador da interface |
config | Preferências do Freeplane |
Propriedades de node🔗
| Expressão | Devolve |
|---|---|
node.text | Texto |
node.plainText | Texto sem marcação |
node.id | Identificador |
node.parent | Nó pai |
node.children | Filhos diretos |
node.branch | O nó e todos os descendentes |
node.leaves | Só as folhas do ramo |
node.root | A raiz do mapa |
node.map | O mapa |
node['chave'] | Valor de atributo |
node.attributes.names | Chaves presentes |
node.note.text | Texto da nota |
node.detail.text | Texto do detalhe |
node.icons.icons | Lista de nomes de ícone |
node.style.name | Estilo aplicado |
node.link.text | Hiperlink |
node.createdAt, node.modifiedAt | Datas |
node.folded | Estado de dobramento |
Conversões🔗
Atributos são texto. As conversões seguras:
| Conversão | Comportamento |
|---|---|
.num0 | Número; vazio e texto viram 0 |
.num | Número; falha se não for numérico |
.to.num0 | Idem num0 |
.text | Texto |
.date | Data, se o formato for reconhecido |
Use num0. É a diferença entre uma soma que funciona e um NullPointerException no dia em que alguém deixar um campo em branco.
Padrões úteis🔗
// Soma dos filhos
=node.children.sum { it['custo'].num0 }
// Soma do ramo inteiro
=node.branch.sum { it['custo'].num0 }
// Contagem de descendentes
=node.branch.size() - 1
// Contagem por ícone
=node.branch.count { it.icons.icons.contains('button_ok') }
// Média
=node.children ? node.children.sum { it['nota'].num0 } / node.children.size() : 0
// Máximo
=node.children.collect { it['custo'].num0 }.max()
// Concatenação dos filhos
=node.children.collect { it.text }.join(', ')
// Percentual concluído
=def t = node.leaves.size()
def d = node.leaves.count { it.icons.icons.contains('button_ok') }
t ? "${(d*100/t).round()}%" : "—"
// Dias até um prazo
=((Date.parse('yyyy-MM-dd', node['prazo']) - new Date()) as int) + "d"
// Referência a outro nó pelo ID
=node.map.node('ID_1673829104')['valor'].num0Recálculo🔗
Fórmulas são reavaliadas quando algo de que dependem muda. Ferramentas → Atualizar fórmulas força o recálculo de tudo.
Duas classes de problema:
- Ciclos — A depende de B que depende de A. Detectado e reportado.
- Dependências implícitas —
new Date()não dispara recálculo ao virar o dia. Atualize à mão.
Erros comuns🔗
| Mensagem | Causa |
|---|---|
NullPointerException | Atributo ausente; use num0 ou teste antes |
| A fórmula aparece como texto | Avaliação de fórmulas desligada nas preferências |
MissingPropertyException | Nome de propriedade incorreto |
groovy.lang.MissingMethodException | Método que não existe nessa versão da API |
Formula cycle detected | Dependência circular |
Resultado 0 inesperado | Atributo com texto onde se espera número |
Segurança🔗
Fórmulas são código, e rodam ao abrir o mapa. Um .mm recebido de terceiros pode conter fórmulas com acesso a arquivos e rede, conforme as permissões que você concedeu.
Trate como trataria uma planilha com macros: as permissões de script devem ser as mínimas necessárias.
Erros comuns
- Encher o mapa de fórmulas até a abertura ficar lenta — toda fórmula é reavaliada
- Referenciar nós por texto em vez de
ID, e ver a fórmula quebrar quando alguém renomeia - Esquecer que valores de atributo são texto e somar strings sem
num0 - Criar dependência circular entre fórmulas e receber um erro difícil de rastrear
Perguntas para reflexão
- Por que o atributo costuma ser o lugar certo para a fórmula?
- O que
num0faz, e por que ele é necessário? - Qual a diferença entre
node.children,node.branchenode.leaves? - Escreva a fórmula que soma o atributo
custode todos os filhos.