﻿
{"id":22566,"date":"2021-08-21T23:52:10","date_gmt":"2021-08-21T23:52:10","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=22566"},"modified":"2021-08-21T23:52:33","modified_gmt":"2021-08-21T23:52:33","slug":"finite-state-machine-nedir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/finite-state-machine-nedir\/","title":{"rendered":"Finite-State Machine Nedir?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde <strong><em>Finite-State Machine<\/em><\/strong> kavram\u0131 \u00fczerine duruyor olaca\u011f\u0131z. \u00d6z\u00fcnde bu kavram, bir sonraki kaleme alaca\u011f\u0131m\u0131z microservice yap\u0131lanmalar\u0131nda distributed transaction&#8217;\u0131 sa\u011flayabilmek i\u00e7in Saga pattern&#8217;\u0131n Orchestrator implemantasyonunu ele al\u0131rken istifade edece\u011fimiz bir yap\u0131lanmaya kar\u015f\u0131l\u0131k gelmektedir. Haliyle bizler bu kavram\u0131 salt bir \u015fekilde de\u011ferlendirmi\u015fken bir yandan da sonraki i\u00e7eri\u011fimize temel niteli\u011finde bir i\u00e7erik ortaya koymu\u015f olaca\u011f\u0131z. O halde buyrun ba\u015flayal\u0131m&#8230;<\/p>\n<h3>Finite-State Machine Nedir?<\/h3>\n<p><em>Finite-State Machine<\/em>&#8216;in ne oldu\u011funu anlayabilmek i\u00e7in \u00f6ncelikle <em>State<\/em> kavram\u0131na tam hakim olmak gerekmektedir.<\/p>\n<h6>State Nedir?<\/h6>\n<p><em>State<\/em>, bir nesnenin o anki durumunu ifade eden de\u011ferleridir\/de\u011ferler b\u00fct\u00fcn\u00fcd\u00fcr. Yani burada s\u00f6ylemek istenileni daha da a\u00e7arsak e\u011fer bir nesnenin herhangi bir <em>t<\/em> an\u0131ndaki de\u011ferlerinin <em>t + 1<\/em> an\u0131nda kullan\u0131lan de\u011ferlerle tan\u0131mlanabilmesini sa\u011flayan de\u011ferleridir. Bunu hemen a\u015fa\u011f\u0131daki \u00f6rnekle zenginle\u015ftirelim;<\/p>\n<table>\n<tbody>\n<tr>\n<td rowspan=\"3\" style=\"font-size:11px;width:50%;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir..png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir..png\" alt=\"Finite-State Machine Nedir?\" width=\"299\" height=\"127\" class=\"aligncenter size-full wp-image-22570\" \/><\/a>Bir Person nesne modelinin oldu\u011funu d\u00fc\u015f\u00fcnelim&#8230;\n<\/td>\n<td style=\"font-size:11px;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-1.png\" alt=\"Finite-State Machine Nedir?\" width=\"145\" height=\"99\" class=\"aligncenter size-full wp-image-22577\" \/><\/a>Bu modelden yarat\u0131lan yukar\u0131daki nesneye g\u00f6z atarsan\u0131z e\u011fer &#8216;Name&#8217; de\u011feri &#8216;Ali&#8217; olan ve &#8216;Age&#8217; de\u011feri &#8217;20&#8217; olan bir nesne g\u00f6rmekteyiz.<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size:11px;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-2.png\" alt=\"Finite-State Machine Nedir?\" width=\"151\" height=\"102\" class=\"aligncenter size-full wp-image-22578\" \/><\/a>Benzer mant\u0131kla yukar\u0131daki nesneye g\u00f6z atarsak e\u011fer &#8216;Name&#8217; de\u011feri &#8216;Ay\u015fe&#8217;, &#8216;Age&#8217; de\u011feri &#8217;19&#8217; olan bir nesne g\u00f6rmekteyiz.<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size:11px;\">\nBizler her iki nesneye de g\u00f6z atarsak e\u011fer genel anlamda state&#8217;lerini g\u00f6rebilmekteyiz. Yani herhangi bir <em>t<\/em> an\u0131nda bu nesnelerin hangi state&#8217;de oldu\u011funu <em>t + 1<\/em> an\u0131nda yorumlayabilmekteyiz.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Yukar\u0131daki nesnelerden herhangi birinin state&#8217;ini de\u011fi\u015ftirmek i\u00e7in herhangi bir de\u011ferinin de\u011fi\u015ftirilmesi yeterlidir. Misal olarak;<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"font-size:11px;width:50%;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-1.png\" alt=\"Finite-State Machine Nedir?\" width=\"145\" height=\"99\" class=\"aligncenter size-full wp-image-22577\" \/><\/a><\/td>\n<td style=\"font-size:11px;width:50%;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-3.png\" alt=\"Finite-State Machine Nedir?\" width=\"152\" height=\"101\" class=\"aligncenter size-full wp-image-22591\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-3.png 152w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-3-150x101.png 150w\" sizes=\"auto, (max-width: 152px) 100vw, 152px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" style=\"font-size:11px;\">\nG\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere p1 nesnenin &#8216;Name&#8217; de\u011feri herhangi bir <em>t<\/em> an\u0131nda &#8216;Ali&#8217; iken <em>t + 1<\/em> an\u0131nda &#8216;Veli&#8217; olarak de\u011fi\u015ftirilmi\u015ftir. Haliyle b\u00f6ylece ilgili nesnenin state&#8217;i de\u011fi\u015ftirilmi\u015ftir.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tabi burada ilgili nesnenin state&#8217;ini de\u011fi\u015ftirebilmek i\u00e7in manuel bir yakla\u015f\u0131m sergilenmi\u015ftir. Bu i\u015flem ayr\u0131ca a\u015fa\u011f\u0131daki gibi bir metot ya da farkl\u0131 bir event kullan\u0131larak da ger\u00e7ekle\u015ftirilebilirdi.<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"font-size:11px;width:50%;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-4.png\" alt=\"Finite-State Machine Nedir?\" width=\"303\" height=\"183\" class=\"aligncenter size-full wp-image-22594\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-4.png 303w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-4-300x181.png 300w\" sizes=\"auto, (max-width: 303px) 100vw, 303px\" \/><\/a><\/td>\n<td style=\"font-size:11px;width:50%;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-5.png\" alt=\"Finite-State Machine Nedir?\" width=\"158\" height=\"142\" class=\"aligncenter size-full wp-image-22595\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\" style=\"font-size:11px;\">\nDikkat edilirse p1 nesnesinin state&#8217;i bu sefer &#8216;SetName&#8217; metodu arac\u0131l\u0131\u011f\u0131yla de\u011fi\u015ftirilmektedir.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Yukar\u0131daki \u00f6rnekte bildirilen &#8216;SetName&#8217; metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 an ilgili nesnenin de\u011ferini de\u011fi\u015ftirecektir. Dolay\u0131s\u0131yla bu da state&#8217;inin de\u011fi\u015fti\u011fi anlam\u0131na gelecektir.<\/p>\n<p><em style=\"font-size:12px;\"><strong>Hocam, bizler g\u00fcnl\u00fck hayatta state olarak bir nesnenin kullan\u0131labilirlik durumunu ifade etmiyor muyuz?<\/strong><\/em><br \/>\nYaz\u0131m\u0131z boyunca bir nesnenin state&#8217;inden kastetti\u011fimiz nesnenin b\u00fct\u00fcnsel de\u011feriydi. Halbuki g\u00fcnl\u00fck hayatta bir nesnenin state&#8217;i yukar\u0131daki sorunuz mant\u0131\u011f\u0131nda de\u011ferlendirilmektedir ve o nesnenin aktiflik\/pasiflik yahut ba\u015far\u0131l\u0131\/ba\u015far\u0131s\u0131z gibi s\u0131n\u0131fland\u0131rma niteli\u011finde tan\u0131mlamalar amac\u0131yla kullan\u0131lmaktad\u0131r. Amma velakin bu kullan\u0131m yine ilgili nesnenin b\u00fct\u00fcnsel anlamda durumunu ifade edece\u011finden dolay\u0131 herhangi bir mant\u0131ksal farkl\u0131l\u0131k do\u011furmamaktad\u0131r. Yani demek istedi\u011fim o ki, bir nesnenin aktiflik\/pasiflik yahut ba\u015far\u0131l\u0131\/ba\u015far\u0131s\u0131z gibi s\u0131n\u0131fland\u0131rmalar olmaks\u0131z\u0131n b\u00fct\u00fcnsel anlamda mevcut de\u011ferleriyle de state&#8217;i ifade edilebilmektedir.<\/p>\n<h6>FINITE-State Machine Nedir?<\/h6>\n<p>Evet&#8230; Art\u0131k <em>State<\/em> kavram\u0131n\u0131n ne oldu\u011fu hakk\u0131nda isti\u015fare eyledi\u011fimize g\u00f6re esas sualimizi tekrar masaya yat\u0131rabiliriz. Finite-State Machine; ald\u0131\u011f\u0131 input&#8217;a g\u00f6re durum de\u011fi\u015ftiren makinelerdir. <em style=\"font-size:12px;\"><strong>Hmmm&#8230; \ud83d\ude44\ud83d\ude15 Anlamad\u0131m hocam\ud83e\udd74<\/strong><\/em> Evet, tahmin edebiliyorum \ud83d\ude42 Yukar\u0131da state&#8217;i anlatmaya \u00e7al\u0131\u015f\u0131rken verilen \u00f6rneklerden birinde &#8216;SetName&#8217; metoduyla, \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 anda ilgili nesnenin state&#8217;ini de\u011fi\u015ftiriyorduk hat\u0131rlad\u0131n\u0131z m\u0131? Heh i\u015fte o &#8216;SetName&#8217; gibi ilgili nesne \u00fczerinde de\u011fi\u015fiklikler yaratan t\u00fcm aparatlara(metot, property, event vs.) <strong>input<\/strong> diyoruz&#8230; Ne diyormu\u015fuz? Input.<\/p>\n<p>\u015eimdi ayn\u0131 a\u00e7\u0131klamay\u0131 tekrardan yaparsak e\u011fer:<br \/>\nFinite-State Machine; ald\u0131\u011f\u0131 input&#8217;a g\u00f6re durum de\u011fi\u015ftiren makinelerdir. San\u0131r\u0131m daha anla\u015f\u0131l\u0131r olmu\u015ftur kanaatindeyim \ud83d\ude42 Evet, Finite-State Machine bir nesneden ziyade, bir makinedir. Yaz\u0131l\u0131msal a\u00e7\u0131dan de\u011ferlendirirsek e\u011fer ba\u015fl\u0131 ba\u015f\u0131na bir durum kontrol merkezidir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-6.png\" alt=\"Finite-State Machine Nedir?\" width=\"271\" height=\"459\" class=\"alignleft size-full wp-image-22605\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-6.png 271w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-6-177x300.png 177w\" sizes=\"auto, (max-width: 271px) 100vw, 271px\" \/><\/a>Yandaki g\u00f6rseli incelerseniz e\u011fer bir State Machine&#8217;in basit bir \u015fekilde \u015fematize edilmi\u015f halini g\u00f6receksiniz. Belirli eylemler\/inputlar\/eventler neticesinde \u015fartlara g\u00f6re durumun de\u011fi\u015fmesini sembolize eden bir State Machine \u00e7izilmi\u015ftir.<\/p>\n<p>Mealen incelersek e\u011fer; bir kap\u0131n\u0131n a\u00e7\u0131k veya kapal\u0131 durumlar\u0131na istinaden durum kontrol\u00fcn\u00fc sa\u011flayan bir State Machine mevzu bahistir. E\u011fer kap\u0131 kapal\u0131ysa ve &#8216;kap\u0131y\u0131_a\u00e7&#8217; eylemi neticesinde kap\u0131 a\u00e7\u0131l\u0131yorsa durumu &#8216;a\u00e7\u0131ld\u0131&#8217; olarak de\u011fi\u015ftirilmektedir. Yok e\u011fer kap\u0131 a\u00e7\u0131ksa ve &#8216;kap\u0131y\u0131_kapa&#8217; eylemi neticesinde kap\u0131 kapan\u0131yorsa bu seferde durumu &#8216;kapand\u0131&#8217; olarak de\u011fi\u015ftirilmektedir. \u0130\u015fte buradaki durum bilgisini tutan yap\u0131lanma State Machine&#8217;dir.<\/p>\n<p>Bu \u00f6rnekte kap\u0131n\u0131n a\u00e7\u0131l\u0131p kapanmas\u0131 eylemine istinaden &#8216;a\u00e7\u0131ld\u0131&#8217; ve &#8216;kapand\u0131&#8217; olmak \u00fczere iki adet state mevcuttur. Haliyle buradan yola \u00e7\u0131karak State Machine yap\u0131lanmalar\u0131nda state&#8217;lerin s\u0131n\u0131rl\u0131 oldu\u011funu d\u00fc\u015f\u00fcnebiliriz.<\/p>\n<blockquote style=\"color:green;\"><p><em>State Machine; ald\u0131\u011f\u0131 input&#8217;a g\u00f6re durum de\u011fi\u015ftiren ve s\u0131n\u0131rl\u0131 say\u0131da duruma sahip olan makinelerdir.<\/em><\/p><\/blockquote>\n<p>State Machine&#8217;i mant\u0131ksal olarak daha da g\u00fc\u00e7lendirebilmek i\u00e7in farkl\u0131 bir teorik \u00f6rnek vermek gerekirse e\u011fer buna internet \u00fczerinden yap\u0131lan herhangi bir sipari\u015f durumunu sunabiliriz.<\/p>\n<ul>\n<li>\u00dcr\u00fcnler sepete eklendi ve sipari\u015f olu\u015fturuldu (<span style=\"color:purple;\">Siparis Olusturuldu<\/span> state&#8217;i)<\/li>\n<li>Al\u0131nan \u00fcr\u00fcnlerin stok bilgileri g\u00fcncellendi (<span style=\"color:purple;\">Stok G\u00fcncellendi<\/span> state&#8217;i)<\/li>\n<li>\u00d6deme i\u015flemi ba\u015far\u0131yla ger\u00e7ekle\u015ftirildi (<span style=\"color:purple;\">Sipari\u015f Tamamland\u0131<\/span> state&#8217;i)<\/li>\n<li>Yetersiz stoktan dolay\u0131 sipari\u015f iptal edildi (<span style=\"color:purple;\">Sipari\u015f Stok \u0130ptal<\/span> state&#8217;i)<\/li>\n<li>Bakiye yetersizli\u011finden dolay\u0131 \u00f6deme ger\u00e7ekle\u015ftirilemedi (<span style=\"color:purple;\">Sipari\u015f \u00d6deme \u0130ptal<\/span> state&#8217;i)<\/li>\n<\/ul>\n<blockquote style=\"color:gray;\"><p><em>State Machine&#8217;ler durum ge\u00e7i\u015f tablolar\u0131 veya diyagramlarla g\u00f6sterilirler.<\/em><\/p><\/blockquote>\n<p>Asl\u0131nda g\u00fcnl\u00fck hayatta State Machine mant\u0131\u011f\u0131 \u00e7o\u011fu yerde kullan\u0131lmaktad\u0131r. Buna metrolardaki turnikeler \u00f6rnek olarak verilebilir. Bu turnikelerin &#8216;a\u00e7\u0131k&#8217; ve &#8216;kapal\u0131&#8217; olmak \u00fczere iki durumlar\u0131 bulunmaktad\u0131r. Eylemsel a\u00e7\u0131dan inputlar\u0131 yolcular\u0131n kartlar\u0131n\u0131 basmalar\u0131 \u00fczerinedir. E\u011fer kartta yeterli bakiye mevcutsa turnike &#8216;a\u00e7\u0131k&#8217; duruma gelir, yok e\u011fer bakiye yetersizse &#8216;kapal\u0131&#8217; kalmaya devam eder. &#8216;a\u00e7\u0131k&#8217; durumda olan turnikeler birisinin ge\u00e7mesi kayd\u0131yla bir tur d\u00f6nd\u00fckten sonra &#8216;kapal\u0131&#8217; duruma ge\u00e7erler.<\/p>\n<p>Bir ba\u015fka \u00f6rnek vermemiz gerekirse e\u011fer trafik \u0131\u015f\u0131klar\u0131n\u0131 ele alabiliriz. Mant\u0131ksal olarak belirli periyodik s\u00fcreler zarf\u0131nda inputlar devreye girer ve ye\u015fil, sar\u0131 ve k\u0131rm\u0131z\u0131 durumlar\u0131na g\u00f6re trafi\u011fi y\u00f6nlendirmektedirler.<\/p>\n<h6>State Machine&#8217;i Pratik \u00d6rneklendirelim<\/h6>\n<p>Yaz\u0131l\u0131msal olarak State Machine&#8217;e dair onlarca farkl\u0131 senaryoda pratik \u00f6rnek sunabiliriz. Lakin bizler bu i\u00e7eri\u011fimizde iterasyonel mant\u0131kta bir \u00f6rnek sunuyor olaca\u011f\u0131z. Biliyorsunuz ki, C# programlama dilinde <code>foreach<\/code> iterasyonu mevcuttur. Bu iterasyona verilen koleksiyon yahut dizi i\u00e7erisindeki elemanlar s\u0131ral\u0131 bir \u015fekilde elde edilerek i\u015fleme tabii tutulabilir. Taa ki sonuncu eleman elde edilene denk! Sonuncu elemandan sonra iterasyon <u>sonlan\u0131r<\/u> <em style=\"font-size:12px;\"><strong>Peki iterasyon sonuncu elemanda sonlanaca\u011f\u0131n\u0131 nereden bilebilir?<\/strong><\/em> \u0130\u015fte bu sorunun cevab\u0131 State Machine&#8217;de sakl\u0131d\u0131r&#8230;<\/p>\n<p>Programatik a\u00e7\u0131dan iterasyon, yap\u0131sal olarak bir koleksiyondaki verilerin s\u0131ral\u0131 bir \u015fekilde elde edilmesini sa\u011flayan ve o andaki verinin devam\u0131nda ba\u015fka bir verinin olup olmamas\u0131na g\u00f6re tetiklenen i\u015flevselli\u011fe sahip bir mant\u0131kt\u0131r. Yani sonraki veri varsa \u00e7al\u0131\u015fmakta, yoksa durmaktad\u0131r. Buradan yola \u00e7\u0131karak iterasyon yap\u0131s\u0131nda iki durum(state) oldu\u011funu g\u00f6rebilmekteyiz. Sonraki veri &#8216;var&#8217; ya da &#8216;yok&#8217;. <span style=\"font-size:11px;\">\u0130terasyonun ne oldu\u011funu daha iyi anlayabilmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/cta-iterator-kavrami-ve-yield-anahtar-sozcugu\/\" rel=\"noopener\" target=\"_blank\">C#\u2019ta Iterator Kavram\u0131 ve yield Anahtar S\u00f6zc\u00fc\u011f\u00fc<\/a> ba\u015fl\u0131kl\u0131 makalemi okuyabilirsiniz.<\/span><\/p>\n<p>\u015eimdi gelin benzer mant\u0131kta bir iterasyonel \u00e7al\u0131\u015fma sergileyelim ve State Machine ile ilgili k\u0131sm\u0131n\u0131 hep beraber g\u00f6relim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            ValueEnumerable v = new();\r\n            v.Add(1);\r\n            v.Add(2);\r\n            v.Add(3);\r\n            while (v.MoveNext())\r\n                Console.WriteLine(v.Current);\r\n        }\r\n    }\r\n\r\n    class ValueEnumerable\r\n    {\r\n        List&lt;object&gt; objects = new();\r\n        int currentIndex = -1;\r\n\r\n        public void Add(object @object)\r\n            =&gt; objects.Add(@object);\r\n        public bool MoveNext()\r\n            =&gt; currentIndex++ + 1 &lt; objects.Count;\r\n        public object Current\r\n            =&gt; objects&#x5B;currentIndex];\r\n    }\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/08\/Finite-State-Machine-Nedir.-7.png\" alt=\"Finite-State Machine Nedir?\" width=\"16\" height=\"51\" class=\"alignleft size-full wp-image-22622\" \/><\/a><span style=\"font-size:11px;\">(Daha profesyonel bir iterasyonel tasar\u0131m i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/c-iterator-design-patterniterator-tasarim-deseni\/\" rel=\"noopener\" target=\"_blank\">Iterator Design Pattern<\/a>&#8216;i inceleyebilirsiniz)<\/span><br \/>\nYukar\u0131daki kod blo\u011funu derleyip, \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z e\u011fer yandaki ekran \u00e7\u0131kt\u0131s\u0131yla kar\u015f\u0131la\u015facaks\u0131n\u0131z. Dikkat ederseniz &#8216;ValueEnumerable&#8217; s\u0131n\u0131f\u0131na verilen de\u011ferler her ne ise <code>while<\/code> d\u00f6ng\u00fcs\u00fcnde o kadar\u0131 ekrana yazd\u0131r\u0131lm\u0131\u015f ve sonra ilgili d\u00f6ng\u00fcden \u00e7\u0131k\u0131larak ak\u0131\u015f sonland\u0131r\u0131lm\u0131\u015ft\u0131r. \u0130\u015fte burada mant\u0131ksal olarak d\u00f6ng\u00fcden \u00e7\u0131karan yap\u0131 State Machine ile ilgilidir. Mant\u0131\u011f\u0131 ise \u015f\u00f6yledir; &#8216;MoveNext&#8217; metodu kendi i\u00e7erisinde &#8216;currentIndex&#8217; de\u011ferine ba\u011fl\u0131 bir \u015fekilde &#8216;objects&#8217; koleksiyonundaki eleman say\u0131s\u0131na kar\u015f\u0131l\u0131k hangi hanede oldu\u011funu kontrol etmekte ve sonras\u0131nda gelecek olan bir veri varsa geriye true d\u00f6nd\u00fcrmektedir. Yani yukar\u0131da bahsetti\u011fimiz gibi sonraki veri i\u00e7in &#8216;var&#8217; durumu s\u00f6z konusudur. Aksi taktirde false d\u00f6nd\u00fc\u011f\u00fcnde ise &#8216;yok&#8217; durumu s\u00f6z konusu olmakta ve d\u00f6ng\u00fcden \u00e7\u0131k\u0131lmaktad\u0131r. \u0130\u015fte burada &#8216;MoveNext&#8217;in her tetiklendi\u011finde &#8216;currentIndex&#8217;in de\u011ferinin +1 artmas\u0131 ve duruma g\u00f6re sonucu belirlemesi input&#8217;ken, bu olay\u0131 kontrol eden genel yap\u0131lanma State Machine&#8217;dir.<\/p>\n<p>Nihai olarak;<br \/>\nBu makinelerin en \u00f6nemli \u00f6zelli\u011fi determinist olmalar\u0131d\u0131r. Yani s\u00fcrekli ayn\u0131 input de\u011ferlerine kar\u015f\u0131l\u0131k hep ayn\u0131 sonu\u00e7lar\u0131 \u00fcretmektedirler ve bu da ayn\u0131 durumlara ge\u00e7i\u015f yapmalar\u0131 anlam\u0131na gelir. Yani ne yapacaklar\u0131\/yapabilecekleri \u00f6nceden bellidir\/belirlenebilir. Haliyle teorik ve pratik a\u00e7\u0131dan ele alm\u0131\u015f ve g\u00fcnl\u00fck hayatta nerelerde, hangi mant\u0131kla kullan\u0131ld\u0131\u011f\u0131 \u00fczerine bir nebze hasbihalde bulunmu\u015f oldu\u011fumuz State Machine kavram\u0131n\u0131 sizlere elimden geldi\u011fince anla\u015f\u0131l\u0131r k\u0131lmaya \u00e7al\u0131\u015ft\u0131m. \u00d6zellikle muhtemelen bu makalenin akabinde ele alaca\u011f\u0131m\u0131z Saga pattern&#8217;\u0131n Orchestrator implemantasyonu i\u00e7eri\u011finde State Machine kavram\u0131 merkezi rol \u00fcstlenecektir. Haliyle basitte olsa bu yap\u0131ya dair bilgili olmak bundan sonraki t\u00fcm \u00e7al\u0131\u015fmalar\u0131m\u0131zda bizlere maksimum verimi sa\u011flatacak ve faydalanma imkan\u0131 tan\u0131yacakt\u0131r.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde Finite-State Machine kavram\u0131 \u00fczerine duruyor olaca\u011f\u0131z. \u00d6z\u00fcnde bu kavram, bir sonraki kaleme alaca\u011f\u0131m\u0131z microservice yap\u0131lanmalar\u0131nda distributed transaction&#8217;\u0131 sa\u011flayabilmek i\u00e7in Saga pattern&#8217;\u0131n Orchestrator implemantasyonunu ele al\u0131rken istifade edece\u011fimiz bir yap\u0131lanmaya kar\u015f\u0131l\u0131k gelmektedir.&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739],"tags":[4378,4379,4382,4380,4381,4383],"class_list":["post-22566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","tag-finite-state-machine","tag-finite-state-machine-nedir","tag-state","tag-state-machine","tag-state-machine-nedir","tag-state-nedir"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/22566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=22566"}],"version-history":[{"count":54,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/22566\/revisions"}],"predecessor-version":[{"id":22628,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/22566\/revisions\/22628"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=22566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=22566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=22566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}