Diagrama de estados
Capture cada estado e transição de um sistema
O que é um Diagrama de estados?
Um diagrama de estados mostra os estados em que um objeto pode estar e os eventos que o fazem transitar entre eles: ciclos de vida de encomendas, fluxos documentais, estados de interface, gestão de ligações. Essencial sempre que «em que estado estamos?» importa.
Os diagramas de estados pertencem às especificações, onde «uma encomenda pode voltar de reembolsada a expedida?» tem de ter resposta. São o único diagrama que torna visíveis as transições ilegais: o que não está desenhado não é permitido, o que transforma a imagem num plano de testes. O seu limite é a combinatória — duas máquinas independentes no mesmo diagrama produzem um produto cruzado que ninguém consegue ler. Separe-as, ou aninhe-as em estados compostos.
Exemplo em tempo real
stateDiagram-v2
[*] --> Draft
Draft --> Review : submit
Review --> Draft : request changes
Review --> Approved : approve
Approved --> Published : publish
Published --> Archived : archive
Archived --> [*]Quando usar
Erros frequentes
Nomes de estado com várias palavras partem-se
Waiting for payment --> Paid cria três estados chamados Waiting, for e payment. Nomeie o estado uma vez com state "Waiting for payment" as waiting e use depois o id curto waiting em todas as transições.
Um [*] aninhado não é o início
Um [*] escrito dentro de um estado composto marca o ponto de entrada desse composto, não o do diagrama. Se todos os [*] que escreveu estiverem aninhados, o diagrama fica sem ponto de entrada e o leitor não sabe por onde começar.
Os rótulos de transição são eventos, não código
O texto a seguir aos dois pontos é texto livre: score > 80 é apresentado mas nunca avaliado, e duas transições podem trazer condições contraditórias sem qualquer queixa. Reveja os rótulos como revê prosa, não como revê lógica.
Sintaxe básica
stateDiagram-v2
[*] --> Idle
Idle --> Active : start
Active --> [*] : stopstateDiagram-v2 direction LRUse o renderizador -v2, aquele para o qual a sintaxe atual foi escrita. Acrescentar direction LR serve os ciclos de vida longos e lineares, que de outro modo saem pelo fundo da página.
[*] --> Draft Draft --> Review : submit[*] é o marcador de início à esquerda de uma seta e o estado final à direita. O texto a seguir aos dois pontos nomeia o evento que desencadeia a transição.
state Payment { [*] --> Pending Pending --> Captured }Um estado composto esconde uma submáquina atrás de uma única caixa. Uma transição pode ter como destino o próprio composto, entrando nele pelo seu marcador de início.
state gate <<choice>> gate --> Approved : score > 80Um pseudoestado de escolha ramifica sobre uma condição sem inventar um estado falso para isso. Os marcadores <<fork>> e <<join>> fazem o mesmo para caminhos paralelos.
Perguntas sobre este diagrama
Qual é a diferença em relação a um fluxograma?
Um fluxograma segue um processo do início ao fim. Um diagrama de estados descreve todos os estados possíveis de uma coisa e que eventos provocam as transições — incluindo ciclos e estados de erro.
O Mermaid suporta estados aninhados?
Sim — o stateDiagram-v2 suporta estados compostos (aninhados), forks, joins, escolhas e notas para máquinas de estados realistas.
Um diagrama de estados Mermaid exprime guardas e ações de entrada e de saída?
Formalmente, não. Uma transição tem um único rótulo de texto livre, por isso uma guarda como score > 80 fica ali escrita em prosa e nada a impõe. Também não há sintaxe de ação de entrada ou de saída — ponha isso numa nota ao lado do estado.
Como mostro um estado que volta a si próprio?
Ponha o mesmo estado dos dois lados da seta: Draft --> Draft : edit. O Mermaid desenha-o como um laço sobre a caixa e mantém o rótulo; e várias transições entre os mesmos dois estados conservam cada uma o seu rótulo, em vez de se fundirem.
Posso dar outra cor a um estado?
Sim. classDef bad fill:#fdd define um estilo e class Failed bad aplica-o, para que os estados de erro ou terminais se destaquem. O estilo vive no código, por isso sobrevive à exportação em PNG e SVG.
Como exporto um diagrama de estados para uma apresentação?
Exporte PNG em 2× ou 4× para slides que vão ser projetados, ou SVG quando a ferramenta o aceita, já que o SVG se mantém nítido e conserva o texto selecionável. O código Mermaid continua a ser a versão que edita e volta a exportar.
Diagrama de estados ou outro tipo de diagrama?
Diagrama de estados ou diagrama de sequência?
O diagrama de sequência mostra um caminho através de vários participantes; o diagrama de estados mostra todos os caminhos de um só participante. Se a pergunta interessante é «o que respondeu a API», use um diagrama de sequência. Se é «podemos alguma vez voltar aqui», use estados.
Diagrama de estados ou diagrama de classes?
O diagrama de classes dá campos e relações a uma encomenda; o diagrama de estados dá-lhe uma vida. Escreva o de classes quando perguntam que dados existem, e o de estados quando perguntam que transições o código tem de recusar.
Crie já o seu Diagrama de estados
Descreva-o em linguagem natural — a IA escreve o código Mermaid por si.
Abrir o Mermaid Studio