Diagram Alur
Ekspresi grafis
Peta Pikiran
Ekspresi terstruktur
Catatan
Ekspresi yang efisien

Diagram StatusSintaks

Diagram Status

Sintaks diagram status Mermaid kompatibel dengan sintaks yang digunakan di plantUml, hal ini akan memudahkan pengguna untuk berbagi diagram antara mermaid dan plantUml.

Kode
                            
Salin
Sematkan
--- title: Simple sample --- stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

Editor lama:

Kode
                            
Salin
Sematkan
stateDiagram [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

Editor baru:

Dalam diagram status, sistem dideskripsikan berdasarkan status dan bagaimana suatu status berubah menjadi status lain melalui transisi. Contoh diagram di atas menunjukkan tiga status: diam, bergerak, dan bertabrakan. Anda mulai dari status diam, dan dari status diam dapat berubah menjadi status bergerak. Dari status bergerak, Anda dapat kembali ke status diam, atau berubah menjadi status bertabrakan. Tidak ada transisi dari status diam ke status bertabrakan. (Jika tetap diam, Anda tidak akan bertabrakan.)

状态

Status dapat dideklarasikan dengan berbagai cara; cara paling sederhana adalah mendefinisikan status hanya dengan sebuah id:

Kode
                            
Salin
Sematkan
stateDiagram-v2 stateId

Cara lain adalah menggunakan sintaks state, dan menambahkan deskripsi berikut:

Kode
                            
Salin
Sematkan
stateDiagram-v2 state "This is a state description" as s2

Cara lain untuk mendefinisikan status dengan deskripsi adalah mendefinisikan ID status terlebih dahulu, lalu menambahkan titik dua dan deskripsi:

Kode
                            
Salin
Sematkan
stateDiagram-v2 s2 : This is a state description

Transisi

Transisi adalah garis penghubung saat suatu status berpindah ke status lain, direpresentasikan dengan panah teks "-->".

Ketika Anda mendefinisikan transisi antara dua status, dan status tersebut belum didefinisikan, status yang belum didefinisikan akan didefinisikan menggunakan id dari transisi tersebut. Setelah itu, Anda dapat menambahkan deskripsi untuk status yang didefinisikan dengan cara ini.

Kode
                            
Salin
Sematkan
stateDiagram-v2 s1 --> s2

Anda dapat menambahkan teks pada transisi untuk mendeskripsikan apa yang direpresentasikannya:

Kode
                            
Salin
Sematkan
stateDiagram-v2 s1 --> s2: A transition

Mulai dan selesai

Ada dua status khusus yang merepresentasikan awal dan akhir diagram. Kedua status ini direpresentasikan menggunakan sintaks [*], dan arah transisi ke status tersebut menentukan apakah itu status awal atau status akhir.

Kode
                            
Salin
Sematkan
stateDiagram-v2 [*] --> s1 s1 --> [*]

Status komposit

Saat menggunakan diagram status di dunia nyata, Anda akan sering menjumpai diagram multi-dimensi, karena suatu status dapat memiliki beberapa status internal, yang disebut status komposit.

Untuk mendefinisikan status komposit, Anda perlu menggunakan sintaks state, diikuti sebuah id, dan menuliskan isi status komposit di dalam kurung kurawal {}. Anda dapat menamai status komposit pada baris tersendiri, seperti mendefinisikan status sederhana. Silakan lihat contoh di bawah ini:

Kode
                            
Salin
Sematkan
stateDiagram-v2 [*] --> First state First { [*] --> second second --> [*] } [*] --> NamedComposite NamedComposite: Another Composite state NamedComposite { [*] --> namedSimple namedSimple --> [*] namedSimple: Another simple }

Anda dapat mengoperasikannya pada beberapa tingkat:

Kode
                            
Salin
Sematkan
stateDiagram-v2 [*] --> First state First { [*] --> Second state Second { [*] --> second second --> Third state Third { [*] --> third third --> [*] } } }

Anda juga dapat mendefinisikan transisi antar status komposit:

Kode
                            
Salin
Sematkan
stateDiagram-v2 [*] --> First First --> Second First --> Third state First { [*] --> fir fir --> [*] } state Second { [*] --> sec sec --> [*] } state Third { [*] --> thi thi --> [*] }

Catatan: transisi antar status internal yang termasuk dalam status komposit yang berbeda tidak dapat didefinisikan.

Pilihan

Terkadang Anda perlu memodelkan pilihan di antara dua jalur atau lebih, hal ini dapat dilakukan menggunakan <<choice>>.

Kode
                            
Salin
Sematkan
stateDiagram-v2 state if_state <<choice>> [*] --> IsPositive IsPositive --> if_state if_state --> False: if n < 0 if_state --> True : if n >= 0

Percabangan/penggabungan

Anda dapat menggunakan <<fork>> <<join>> untuk menentukan percabangan/penggabungan dalam diagram.

Kode
                            
Salin
Sematkan
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 --> [*]

Catatan

Penggunaan komentar dalam diagram status dapat menyatakan dengan lebih jelas; Anda dapat memilih untuk menempatkan komentar di sisi kanan atau kiri simpul.

Kode
                            
Salin
Sematkan
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.

Konkurensi

Seperti pada plantUml, Anda dapat menggunakan simbol tanda hubung -- untuk menentukan konkurensi.

Kode
                            
Salin
Sematkan
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 }

Mengatur arah diagram

Untuk diagram status, Anda dapat menggunakan pernyataan arah untuk mengatur arah rendering diagram, seperti yang ditunjukkan pada contoh ini.

Kode
                            
Salin
Sematkan
stateDiagram direction LR [*] --> A A --> B B --> C state B { direction LR a --> b } B --> D

Komentar

Komentar dapat dimasukkan dalam diagram status, dan editor akan mengabaikannya. Komentar harus diawali dengan dua tanda persen (%%), semua teks dari penanda tersebut hingga karakter baris baru berikutnya akan dianggap sebagai komentar, termasuk sintaks diagram apa pun. Komentar dapat menempati satu baris tersendiri, atau diletakkan di akhir pernyataan.

Kode
                            
Salin
Sematkan
stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

Mengatur gaya menggunakan classDefs

Batasan classDef diagram status saat ini:

1. Tidak dapat diterapkan pada status awal atau akhir

2. Tidak dapat diterapkan pada status komposit atau di dalam status komposit

Anda dapat menggunakan sintaks classDef (singkatan dari class definition, di mana "class" mirip dengan kelas dalam CSS) untuk mendefinisikan gaya. Setelah classDef adalah nama gaya, diikuti satu atau lebih 'properti-nilai', setiap 'properti-nilai' terdiri dari nama properti CSS yang valid, sebuah titik dua (:), dan nilai yang sesuai.

Berikut adalah contoh classDef yang hanya memiliki satu 'properti-nilai':

                            
Salin
Sematkan
classDef movement font-style:italic;
  • Nama gayanya adalah movement
  • Satu-satunya properti adalah font-style, nilainya italic

Jika Anda ingin memiliki beberapa 'properti-nilai', Anda dapat meletakkan satu koma (,) di antara setiap 'properti-nilai'.

Berikut adalah contoh yang berisi tiga 'properti-nilai':

                            
Salin
Sematkan
classDef badBadEvent fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:yellow
  • Nama gayanya adalah badBadEvent
  • Properti pertama adalah fill, nilainya #f00
  • Properti kedua adalah color, nilainya white
  • Properti ketiga adalah font-weight, nilainya bold
  • Properti keempat adalah stroke-width, nilainya 2px
  • Properti kelima adalah stroke, nilainya yellow

Menerapkan gaya classDef pada status

Ada dua cara untuk menerapkan gaya classDef pada status:

  • Menggunakan sintaks class untuk menerapkan gaya classDef pada satu atau lebih status dalam satu pernyataan
  • Menggunakan operator ::: untuk menerapkan gaya classDef saat status digunakan dalam pernyataan transisi (misalnya, dengan panah menuju/dari status lain)

1. Pernyataan class

Pernyataan class memberi tahu Mermaid agar menerapkan classDef yang ditentukan pada satu atau lebih kelas. Bentuknya adalah:

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

Berikut adalah contoh penerapan gaya badBadEvent pada status bernama Crash:

                            
Salin
Sematkan
class Crash badBadEvent

Berikut adalah contoh penerapan gaya movement pada dua status, Moving dan Crash:

                            
Salin
Sematkan
class Moving,Crash movement

Berikut adalah sebuah contoh. Perhatikan bahwa status Crash menerapkan dua gaya classDef: movement dan badBadEvent

Kode
                            
Salin
Sematkan
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. Menerapkan gaya pada status menggunakan operator :::

Anda dapat menggunakan operator ::: untuk menerapkan gaya classDef pada status. Sintaksnya adalah:

                            
Salin
Sematkan
[state]:::[style name]

Anda dapat menerapkannya pada pernyataan yang menggunakan kelas, ini mencakup status awal dan status akhir. Misalnya:

Kode
                            
Salin
Sematkan
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 --> [*]

Spasi pada nama status

Anda dapat mendefinisikan status terlebih dahulu menggunakan id, lalu mereferensikan id tersebut di kemudian hari untuk menambahkan spasi pada status.

Pada contoh berikut, ada sebuah status dengan ID yswsii, yang dideskripsikan sebagai ''Your state with spaces in it''. Setelah didefinisikan, yswsii digunakan pada transisi pertama diagram ([*] --> yswsii), dan juga digunakan saat bertransisi ke YetAnotherState (yswsii --> YetAnotherState). yswsii telah diberi gaya sehingga berbeda dari status lainnya.

Kode
                            
Salin
Sematkan
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 --> [*]