Proseso Uri
Graphical na pagpapahayag
Nag-iisip Uri
Nakabalangkas na pagpapahayag
Mga Tala Uri
Mahusay na pagpapahayag

Dayagram ng estadoSintaks

Dayagram ng estado

Ang Mermaid state diagram syntax ay compatible sa syntax na ginagamit sa plantUml, gagawin nitong mas madali para sa user na magbahagi ng diagram sa pagitan ng mermaid at plantUml.

Code
                            
Kopyahin
Embed
--- title: Simple sample --- stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

Lumang editor:

Code
                            
Kopyahin
Embed
stateDiagram [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

Bagong editor:

Sa state diagram, ang system ay inilalarawan batay sa estado at kung paano nagbabago ang isang estado patungo sa ibang estado sa pamamagitan ng transition. Ang halimbawang diagram sa itaas ay nagpapakita ng tatlong estado: Still, Moving, at Crash. Nagsisimula ka sa Still state, at mula sa Still ay maaari kang lumipat sa Moving. Mula sa Moving, maaari kang bumalik sa Still, o lumipat sa Crash. Walang transition mula Still patungong Crash. (Kung mananatiling Still, hindi ka mababangga.)

状态

Maaaring ideklara ang estado sa iba't ibang paraan, ang pinakasimpleng paraan ay tukuyin ang estado gamit lamang ang isang id:

Code
                            
Kopyahin
Embed
stateDiagram-v2 stateId

Ang isa pang paraan ay gamitin ang state syntax, at idagdag ang sumusunod na paglalarawan:

Code
                            
Kopyahin
Embed
stateDiagram-v2 state "This is a state description" as s2

Ang isa pang paraan upang tukuyin ang estado na may paglalarawan ay tukuyin muna ang state ID, pagkatapos ay magdagdag ng colon at paglalarawan:

Code
                            
Kopyahin
Embed
stateDiagram-v2 s2 : This is a state description

Transition

Ang transition ay ang linya ng koneksyon kapag ang isang estado ay pumapasok sa ibang estado, kinakatawan gamit ang text arrow "-->".

Kapag tinukoy mo ang transition sa pagitan ng dalawang estado, at ang estado ay hindi pa tinukoy, ang hindi natukoy na estado ay tutukuyin gamit ang id sa transition. Pagkatapos, maaari kang magdagdag ng paglalarawan para sa estado na tinukoy sa paraang ito.

Code
                            
Kopyahin
Embed
stateDiagram-v2 s1 --> s2

Maaari kang magdagdag ng teksto sa transition upang ilarawan ang kinakatawan nito:

Code
                            
Kopyahin
Embed
stateDiagram-v2 s1 --> s2: A transition

Simula at pagtatapos

May dalawang espesyal na estado na kumakatawan sa simula at paghinto ng chart. Ang dalawang estado na ito ay kinakatawan gamit ang [*] syntax, at ang direksyon ng transition patungo sa estado ay tumutukoy kung ito ay start state o end state.

Code
                            
Kopyahin
Embed
stateDiagram-v2 [*] --> s1 s1 --> [*]

Composite state

Kapag gumagamit ng state diagram sa totoong mundo, madalas kang makatagpo ng multi-dimensional na diagram, dahil ang isang estado ay maaaring may maraming panloob na estado, tinatawag itong composite state.

Upang tukuyin ang composite state, kailangan mong gamitin ang state syntax, na sinusundan ng isang id, at isulat ang body ng composite state sa loob ng curly braces {}. Maaari mong pangalanan ang composite state sa isang hiwalay na linya, tulad ng pagtukoy ng simpleng estado. Tingnan ang halimbawa sa ibaba:

Code
                            
Kopyahin
Embed
stateDiagram-v2 [*] --> First state First { [*] --> second second --> [*] } [*] --> NamedComposite NamedComposite: Another Composite state NamedComposite { [*] --> namedSimple namedSimple --> [*] namedSimple: Another simple }

Maaari kang gumana sa ilang antas:

Code
                            
Kopyahin
Embed
stateDiagram-v2 [*] --> First state First { [*] --> Second state Second { [*] --> second second --> Third state Third { [*] --> third third --> [*] } } }

Maaari mo ring tukuyin ang mga transition sa pagitan ng mga composite state:

Code
                            
Kopyahin
Embed
stateDiagram-v2 [*] --> First First --> Second First --> Third state First { [*] --> fir fir --> [*] } state Second { [*] --> sec sec --> [*] } state Third { [*] --> thi thi --> [*] }

Tandaan: hindi maaaring tukuyin ang transition sa pagitan ng mga panloob na estado na kabilang sa magkaibang composite state.

Choice

Minsan kailangan mong gayahin ang pagpili sa pagitan ng dalawa o higit pang path, maaari mong gamitin ang <<choice>> upang ipatupad ito.

Code
                            
Kopyahin
Embed
stateDiagram-v2 state if_state <<choice>> [*] --> IsPositive IsPositive --> if_state if_state --> False: if n < 0 if_state --> True : if n >= 0

Fork/merge

Maaari mong gamitin ang <<fork>> <<join>> upang tumukoy ng fork/join sa chart.

Code
                            
Kopyahin
Embed
stateDiagram-v2 state fork_state <<fork>> [*] --> fork_state fork_state --> State2 fork_state --> State3 state join_state <<join>> State2 --> join_state State3 --> join_state join_state --> State4 State4 --> [*]

Tandaan

Ang paggamit ng komento sa state diagram ay nagbibigay ng mas malinaw na pagpapahayag, maaari mong piliing ilagay ang komento sa kanan o kaliwa ng node.

Code
                            
Kopyahin
Embed
stateDiagram-v2 State1: The state with a note note right of State1 Important information! You can write notes. end note State1 --> State2 note left of State2 : This is the note to the left.

Concurrency

Tulad ng sa plantUml, maaari mong gamitin ang gitling simbolo -- upang tukuyin ang concurrency.

Code
                            
Kopyahin
Embed
stateDiagram-v2 [*] --> Active state Active { [*] --> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] --> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] --> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvScrollLockPressed ScrollLockOn --> ScrollLockOff : EvScrollLockPressed }

Itakda ang direksyon ng chart

Para sa state diagram, maaari mong gamitin ang direction statement upang itakda ang rendering direction ng chart, tulad ng ipinapakita sa halimbawang ito.

Code
                            
Kopyahin
Embed
stateDiagram direction LR [*] --> A A --> B B --> C state B { direction LR a --> b } B --> D

Komento

Maaari kang maglagay ng komento sa state diagram, at hindi papansinin ng editor ang mga komentong ito. Ang komento ay dapat magsimula sa double percent sign (%%), ang lahat ng teksto mula sa marker na ito hanggang sa susunod na line break ay ituturing na komento, kabilang ang anumang chart syntax. Ang komento ay maaaring sumakop sa isang hiwalay na linya, o ilagay sa dulo ng statement.

Code
                            
Kopyahin
Embed
stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

Gumamit ng classDefs upang magtakda ng estilo

Kasalukuyang limitasyon ng classDef sa state diagram:

1. Hindi maaaring ilapat sa start o end state

2. Hindi maaaring ilapat sa composite state o sa loob ng composite state

Maaari mong gamitin ang classDef syntax (ibig sabihin, abbreviation ng class definition, kung saan ang "class" ay katulad ng class sa CSS) upang tukuyin ang estilo. Ang classDef ay sinusundan ng style name, pagkatapos ay isa o higit pang 'property-value', ang bawat 'property-value' ay binubuo ng isang valid na CSS property name, isang colon (:), at ng katumbas na value.

Ang sumusunod ay halimbawa ng classDef na may isang 'property-value' lamang:

                            
Kopyahin
Embed
classDef movement font-style:italic;
  • Ang style name ay movement
  • Ang tanging property ay font-style, ang value ay italic

Kung gusto mong magkaroon ng maraming 'property-value', maaari kang maglagay ng kuwit (,) sa pagitan ng bawat 'property-value'.

Ang sumusunod ay halimbawa na naglalaman ng tatlong 'property-value':

                            
Kopyahin
Embed
classDef badBadEvent fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:yellow
  • Ang style name ay badBadEvent
  • Ang unang property ay fill, ang value nito ay #f00
  • Ang ikalawang property ay color, ang value nito ay white
  • Ang ikatlong property ay font-weight, ang value nito ay bold
  • Ang ikaapat na property ay stroke-width, ang value nito ay 2px
  • Ang ikalimang property ay stroke, ang value nito ay yellow

Ilapat ang classDef style sa estado

May dalawang paraan upang ilapat ang classDef style sa estado:

  • Gamitin ang class syntax upang ilapat ang classDef style sa isa o higit pang estado sa isang statement
  • Gamitin ang ::: operator upang ilapat ang classDef style kapag ang estado ay ginagamit sa transition statement (halimbawa, may arrow na tumuturo/ nagmumula sa ibang estado)

1. class statement

Sinasabi ng class statement sa Mermaid na ilapat ang tinukoy na classDef sa isa o higit pang class. Ang form ay:

                            
Kopyahin
Embed
class [one or more state names, separated by commas] [name of a style defined with classDef]

Ang sumusunod ay halimbawa ng paglalapat ng badBadEvent style sa estadong pinangalanang Crash:

                            
Kopyahin
Embed
class Crash badBadEvent

Ang sumusunod ay halimbawa ng paglalapat ng movement style sa dalawang estadong Moving at Crash:

                            
Kopyahin
Embed
class Moving,Crash movement

Narito ang isang halimbawa. Tandaan, ang Crash state ay nilagyan ng dalawang classDef style: movement at badBadEvent

Code
                            
Kopyahin
Embed
stateDiagram direction TB accTitle: This is the accessible title accDescr: This is an accessible description classDef notMoving fill:white classDef movement font-style:italic classDef badBadEvent fill:pink,color:white,font-weight:bold,stroke-width:2px,stroke:yellow [*]--> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*] class Still notMoving class Moving, Crash movement class Crash badBadEvent class end badBadEvent

2. Paggamit ng ::: operator upang ilapat ang estilo sa estado

Maaari mong gamitin ang operator ::: upang ilapat ang classDef style sa estado. Ang syntax ay:

                            
Kopyahin
Embed
[state]:::[style name]

Maaari mong ilapat ito sa statement na gumagamit ng class, kabilang dito ang start state at end state. Halimbawa:

Code
                            
Kopyahin
Embed
stateDiagram direction TB accTitle: This is the accessible title accDescr: This is an accessible description classDef notMoving fill:white classDef movement font-style:italic; classDef badBadEvent fill:pink,color:white,font-weight:bold,stroke-width:2px,stroke:yellow [*] --> Still:::notMoving Still --> [*] Still --> Moving:::movement Moving --> Still Moving --> Crash:::movement Crash:::badBadEvent --> [*]

Espasyo sa pangalan ng estado

Maaari mo munang tukuyin ang estado gamit ang id, pagkatapos ay i-reference ang id na iyon upang magdagdag ng espasyo sa estado.

Sa sumusunod na halimbawa, may isang estado, na ang ID ay yswsii, na inilarawan bilang ''Your state with spaces in it'. Pagkatapos tukuyin, ang yswsii ay ginamit sa unang transition ng chart ([*] --> yswsii), at ginamit din ito sa transition patungong YetAnotherState (yswsii --> YetAnotherState). Ang yswsii ay nilagyan ng estilo, upang maiiba ito sa ibang estado.

Code
                            
Kopyahin
Embed
stateDiagram classDef yourState font-style:italic,font-weight:bold,fill:white yswsii: Your state with spaces in it [*] --> yswsii:::yourState [*] --> SomeOtherState SomeOtherState --> YetAnotherState yswsii --> YetAnotherState YetAnotherState --> [*]