{"id":33688,"date":"2014-08-20T13:00:00","date_gmt":"2014-08-20T10:00:00","guid":{"rendered":"https:\/\/fatihboy.com\/?p=33688"},"modified":"2021-06-20T22:39:34","modified_gmt":"2021-06-20T19:39:34","slug":"csharp-6-desen-eslestirme-taslak-onerisi","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/csharp-6-desen-eslestirme-taslak-onerisi\/","title":{"rendered":"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi)"},"content":{"rendered":"<p>&nbsp;&nbsp; \u00d6zellikle Roslyn projesinin <strong>.NET Compiler Platform<\/strong> ad\u0131yla a\u00e7\u0131k kaynak olarak geli\u015ftirilmeye devam etmesi ard\u0131ndan C# 6 \u00e7al\u0131\u015fmalar\u0131 da ivmelendi. A\u00e7\u0131k kaynak kod geli\u015ftiricilerinden destek gelmesi ve C#\u2019a yeni \u00f6zellikler katma iste\u011fi bu ivmenin dinamikleri aras\u0131nda yer al\u0131yor. \u00c7al\u0131\u015fmalar h\u0131zla devam ederken, ge\u00e7ti\u011fimiz hafta i\u00e7erisinde yeni bir geli\u015fme ya\u015fand\u0131. C# diline yeni bir \u00f6zellik eklenmesi konusunda yeni bir <em>taslak \u00f6nerisi<\/em> sunuldu; <strong>Pattern Matching (Desen E\u015fle\u015ftirme)<\/strong>.<\/p>\n\n\n\n<p align=\"justify\"><strong><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"Uyari[6]\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png\" alt=\"Uyari[6]\" width=\"89\" height=\"92\" border=\"0\" align=\"left\">Bu makalede payla\u015ft\u0131\u011f\u0131m Record Class <em>hen\u00fcz taslak a\u015famas\u0131nda<\/em>ki bir \u00f6neri olup C#\u2019a dahil edilip edilmeyece\u011fi, C# 6.0 ile gelip-gelmeyece\u011fi \u00e7ok k\u0131sa bir s\u00fcre \u00f6nce tart\u0131\u015fmaya a\u00e7\u0131lm\u0131\u015ft\u0131r. \u0130lerleyen zamanlarda topluluklar i\u00e7erisindeki fikir al\u0131\u015f-veri\u015fleri neticesinde nihayi \u015feklini al\u0131rken de\u011fi\u015fikli\u011fe u\u011frama olas\u0131l\u0131\u011f\u0131 y\u00fcksektir.<\/strong><\/p>\n\n\n\n<p>&nbsp;&nbsp; Hen\u00fcz kesin olarak C# eklenme karar\u0131 al\u0131nmam\u0131\u015f olan ve tart\u0131\u015f\u0131lmas\u0131 amac\u0131yla a\u00e7\u0131lan Pattern Matching taslak \u00f6nerisine <a href=\"https:\/\/onedrive.live.com\/view.aspx?resid=4558A04E77D0CF5!5396&amp;app=Word\" target=\"_blank\" rel=\"noopener noreferrer\">bu adresten<\/a> ula\u015farak inceleyebilirsiniz. <a href=\"\/en\/?p=12588\" target=\"_blank\" rel=\"noopener noreferrer\">\u00d6ncelikle makalemde<\/a> hat\u0131rlarsan\u0131z Record Class konusuna de\u011finmi\u015ftim. Bu defa s\u0131ra Pattern Matching konusunda. Her\u015feyden \u00f6nce \u015funu belirtmem gerekir ki <strong>F#<\/strong> ve <strong>Scala<\/strong> gibi dillerden tan\u0131d\u0131\u011f\u0131m\u0131z Pattern Matching yakla\u015f\u0131m\u0131n\u0131n C# kazand\u0131r\u0131lmas\u0131 ger\u00e7ekten heyacan verici bir geli\u015fme olacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Hat\u0131rlarsan\u0131z bir \u00f6nceki makalemde yukar\u0131da linkini payla\u015ft\u0131\u011f\u0131m taslak \u00f6nerisinde yer alan <strong>Record<\/strong> ve <strong>Record Class<\/strong> kavramlar\u0131ndan bahsetmi\u015ftim. Taslak \u00f6nerisinde yer alan iki konudan bir di\u011feri ise \u00f6zellikle fonksiyonel programlama dillerinden gelen bir konsept olan desen e\u015fle\u015ftirme. Desen e\u015fle\u015ftirme denilince pek \u00e7oklar\u0131n\u0131n akl\u0131na switch c\u00fcmlecikleri gelse de asl\u0131nda bundan \u00e7ok daha g\u00fc\u00e7l\u00fc bir consept ile kar\u015f\u0131 kar\u015f\u0131yay\u0131z.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bir \u00f6nceki makalemizde Record s\u0131n\u0131f\u0131 i\u00e7in derleyici taraf\u0131ndan \u00fcretilen kodlar aras\u0131nda yer alan is operat\u00f6r tan\u0131m\u0131n\u0131 hat\u0131rlayal\u0131m;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public static bool operator is(Cartesian c, out double x, out double y) {\n  x = c.X;\n  y = c.Y;\n  return true;\n}<\/pre>\n\n\n\n<p>&nbsp; Dikkat ederseniz operator\u00fcm\u00fcz boolean bir de\u011fer d\u00f6nerek fonksiyona verilen ilk parametrenin t\u00fcr\u00fcn\u00fc teyit etmekte. \u00d6te yandan out parametreleri ile x ve y de\u011ferleride kar\u015f\u0131la\u015ft\u0131rma sonucunda d\u00f6nemekte. \u015eimdi, bu noktadan sonra i\u015fler biraz kar\u0131\u015facak. Bu y\u00fczden dikkatle takip etmenizi tavsiye ederim \ud83d\ude09<\/p>\n\n\n\n<p>&nbsp;&nbsp; Tasla\u011f\u0131n devam\u0131nda is operat\u00f6r\u00fc i\u00e7in geni\u015fletme metodlar\u0131 gibi bir yakla\u015f\u0131m d\u00fc\u015f\u00fcn\u00fclerek operat\u00f6r tan\u0131m\u0131n\u0131n sadece ilgili s\u0131n\u0131f i\u00e7erisinde de\u011fil, ayn\u0131 zamanda d\u0131\u015far\u0131daki static bir s\u0131n\u0131f i\u00e7erisinde de yap\u0131labilmesi sa\u011flanm\u0131\u015ft\u0131r; ki bu durumda \u00f6nemli bir esnekli\u011fe sahip oluyoruz. Bu durum i\u00e7in a\u015fa\u011f\u0131daki \u015fekilde Polar koordinatlar\u0131nda \u201cis\u201d tan\u0131m\u0131 yap\u0131lm\u0131\u015ft\u0131r;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public static class Polar {\n  public static bool operator is(\n      Cartesian c, out double R, out double Theta) {\n      R = Math.Sqrt(c.X*c.X + c.Y*c.Y);\n      Theta = Math.Atan2(c.Y, c.X);\n      return c.X != 0 || c.Y != 0;\n  }\n}<\/pre>\n\n\n\n<p>devam\u0131nda kullan\u0131m\u0131 a\u015fa\u011f\u0131daki \u015fekilde \u00f6rneklenmi\u015ftir;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var c = Cartesian(3, 4);\nif (c is Polar(var R, *)) Console.WriteLine(R);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; (<em><strong>ipucu<\/strong>: konsola \u00e7\u0131kt\u0131 olarak 5 de\u011feri yaz\u0131lacakt\u0131r<\/em> \ud83d\ude42 )<\/p>\n\n\n\n<p>&nbsp; Son \u00f6rne\u011fimizde yer alan if c\u00fcmleci\u011finde derleyici bizim ad\u0131m\u0131za bir ka\u00e7 i\u015f yapmakta. \u00d6ncelikle Polar s\u0131n\u0131f\u0131 i\u00e7erisindeki is operat\u00f6r\u00fcn\u00fcn ilk parametresine bakarak c de\u011fi\u015fkeni ile i\u015flem yap\u0131p yapamayaca\u011f\u0131na karar verecektir. \u00d6rne\u011fimizde is operat\u00f6r\u00fcm\u00fcz ilk parametresi olarak Cartesian s\u0131n\u0131f\u0131n\u0131 kabul etti\u011fi ve c de\u011fi\u015fkenide bu t\u00fcrde oldu\u011fu i\u00e7in kontrol true de\u011fer d\u00f6necek ve fonksiyon \u00e7a\u011fr\u0131s\u0131 yap\u0131lacakt\u0131r. <em>Fonksiyon \u00e7a\u011fr\u0131s\u0131ndaki notasyonu \u015fimdilik dikkat almayal\u0131m,makalemin sonunda detayland\u0131raca\u011f\u0131m<\/em>. Fonksiyon normal bir \u015fekilde \u00e7al\u0131\u015facak ve R ve Theta de\u011ferleri hesaplanacakt\u0131r. Fonksiyon d\u00f6n\u00fc\u015f\u00fcnde sadece R parametresi kar\u015f\u0131land\u0131\u011f\u0131 i\u00e7in bu de\u011fer al\u0131nacak ve konsola yaz\u0131lacakt\u0131r. Yani art\u0131k is operat\u00f6r\u00fc ile sadece kar\u015f\u0131la\u015ft\u0131rma i\u015flemi yapmaktan \u00f6teye ge\u00e7mi\u015f oluyoruz. Tek kalemde; \u201c<em>kartezyen koordinat sistemdeki c noktas\u0131n\u0131n Polar (kutupsal) koordinat sistemindeki kar\u015f\u0131l\u0131\u011f\u0131 var ise yar\u0131\u00e7ap bilgisini bana ver<\/em>\u201d diyebiliyoruz\u2026 Yani; Kartezyen c nesnesi \u00fczerinde Polar bir nesneymi\u015f gibi i\u015flem yapabiliyoruz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Burada dikkat etmeniz gereken nokta; is operat\u00f6r\u00fcne ge\u00e7ti\u011fimiz de\u011fi\u015fkenin ya\u015fam \u00f6mr\u00fc. Bu \u00f6rne\u011fimizde R de\u011fi\u015fkeni if blo\u011fu ile s\u0131n\u0131rl\u0131d\u0131r. Dolay\u0131s\u0131yla blok d\u0131\u015f\u0131nda R de\u011fi\u015fkenine eri\u015fmek istedi\u011fimizde derlenme-zaman\u0131 hata alaca\u011f\u0131z.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizdeki if ifadesinde yer alan Polar fonksiyon \u00e7a\u011fr\u0131 parametrelerini \u015fimdilik g\u00f6z ard\u0131 edelim, a\u015fa\u011f\u0131daki detaylar ard\u0131ndan onlara tekrar geri d\u00f6nece\u011fiz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Taslak \u00f6neride is ve switch ifadelerinin a\u015fa\u011f\u0131daki \u015fekilde g\u00fcncellendi\u011fini g\u00f6rebiliriz;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>relational-expression: <br>&nbsp;&nbsp;&nbsp; relational-expression&nbsp;&nbsp; is&nbsp; complex-pattern <br>&nbsp;&nbsp;&nbsp; relational-expression&nbsp;&nbsp; is&nbsp; type <br>&nbsp;&nbsp;&nbsp; <br>complex-pattern: <br>&nbsp;&nbsp;&nbsp; constant-pattern <br>&nbsp;&nbsp;&nbsp; type identifier <br>&nbsp;&nbsp;&nbsp; recursive-pattern <br>&nbsp;&nbsp;&nbsp; recursive-pattern identifier <br>&nbsp;&nbsp;&nbsp; <br>recursive-pattern: <br>&nbsp;&nbsp;&nbsp; type <strong>(<\/strong> subpattern-list<sub>opt<\/sub>&nbsp; <strong>)<\/strong> <br>&nbsp;&nbsp;&nbsp; <br>subpattern-list: <br>&nbsp;&nbsp;&nbsp; subpattern <br>&nbsp;&nbsp;&nbsp; subpattern-list , subpattern <br>&nbsp;&nbsp;&nbsp; <br>subpattern: <br>&nbsp;&nbsp;&nbsp; argument-name<sub>opt<\/sub>&nbsp; pattern <br>&nbsp;&nbsp;&nbsp; <br>pattern: <br>&nbsp;&nbsp;&nbsp; simple-pattern <br>&nbsp;&nbsp;&nbsp; complex-pattern <br>&nbsp;&nbsp;&nbsp; <br>simple-pattern: <br>&nbsp;&nbsp;&nbsp; wildcard-pattern <br>&nbsp;&nbsp;&nbsp; var identifier <br>&nbsp;&nbsp;&nbsp; <br>wildcard-pattern: <br>*<\/p><p>constant-pattern: <br>&nbsp;&nbsp;&nbsp; constant-expression<\/p><\/blockquote>\n\n\n\n<p>&nbsp;&nbsp; Bu durumda art\u0131k sabit ifadeleri switch c\u00fcmlecikleri yerine daha karma\u015f\u0131k ifadeler de kullanabiliriz. \u015eimdi par\u00e7a par\u00e7a yukar\u0131daki ifadenin ne anlama geldi\u011fini inceleyelim;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p align=\"justify\">complex-pattern: <br>&nbsp;&nbsp;&nbsp; constant-pattern <br>&nbsp;&nbsp;&nbsp; type identifier <br>&nbsp;&nbsp;&nbsp; recursive-pattern <br>&nbsp;&nbsp;&nbsp; recursive-pattern identifier<\/p><\/blockquote>\n\n\n\n<h1 class=\"wp-block-heading\">Sabit Deseni<\/h1>\n\n\n\n<p>&nbsp;&nbsp; <strong>Constant Pattern (Sabit Desen)<\/strong> yabanc\u0131 olmad\u0131\u011f\u0131m\u0131z, halen kullanmakta oldu\u011fumuz bir desendir. Bu desende verilen ifade sabit bir de\u011fer ile test edilir. Buna g\u00f6re;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">e is c<\/pre>\n\n\n\n<p>ifadesi<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">object.Equals(e, c)<\/pre>\n\n\n\n<p>\u015feklinde kontrol edilecektir. \u0130fadenin do\u011fru olmas\u0131 durumunda true de\u011fer d\u00f6n\u00fclecektir.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">T\u00fcr Deseni&nbsp;<\/h1>\n\n\n\n<p>&nbsp;&nbsp; Taslak \u00f6neride, sabit desen d\u0131\u015f\u0131nda type identifier format\u0131nda bir ifade alabilmekte deniliyor. Bu ifade \u015fekline <strong>Type Pattern (T\u00fcr deseni)<\/strong> ad\u0131 verilmekte. Yeni bir desen t\u00fcr\u00fc olan Type Pattern\u2019da \u00f6ncelikle de\u011fi\u015fken verilen t\u00fcr i\u00e7in test edilir. Test\u2019in ba\u015far\u0131l\u0131 olmas\u0131 durumunda de\u011fi\u015fken belirtilen t\u00fcr\u2019e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Bu d\u00f6n\u00fc\u015ft\u00fcrme sonucu ifade i\u00e7erisinde belirtilen identifier ile adland\u0131r\u0131larak kod i\u00e7erisinde kullan\u0131labilmesi sa\u011flan\u0131r. Bunun i\u00e7in g\u00fczel bir \u00f6rnek verilmi\u015f.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var v = expr as Type;\nif (v != null) {\n    \/\/ code using v\n}<\/pre>\n\n\n\n<p>gibi bir ifade yerine art\u0131k a\u015fa\u011f\u0131daki bir kullan\u0131ma gidebiliriz.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if (expr is Type v) {\n    \/\/ code using v\n}<\/pre>\n\n\n\n<p>daha netle\u015fmesi ad\u0131na;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int? x = 3;\nif (x is int v) {\n    \/\/ code using v\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu \u00f6rnekte; nullable int t\u00fcr\u00fcndeki x de\u011fi\u015fkeni 3 de\u011ferine sahiptir. if i\u00e7erisinde x de\u011fi\u015fkeninin bir tamsay\u0131 olup olmad\u0131\u011f\u0131 kontrol ediliyor; ki bu durumda sahip. Kontrol\u00fcn ba\u015far\u0131l\u0131 olmas\u0131 ard\u0131ndan int t\u00fcr\u00fcnden v ad\u0131yla bir de\u011fi\u015fken tan\u0131mlanarak x de\u011fi\u015fkeninin de\u011feri atanmakta. Bu noktadan itibaren if blo\u011fu i\u00e7erisinde v de\u011fi\u015fkenini kullanabiliriz.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Var Deseni<\/h1>\n\n\n\n<p>&nbsp;&nbsp; Tasla\u011fa g\u00f6re, <strong>Var Pattern<\/strong> olarak adland\u0131r\u0131lan <em>var identifier<\/em> deseni her zaman i\u00e7in true de\u011fer d\u00f6nen basit bir desendir. Bu ifadede verilen ifade sonucu <em>var identifier<\/em> ile belirtilen isimle derleyici taraf\u0131ndan olu\u015fturulan de\u011fi\u015fkene atanmaktad\u0131r.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Wildcard Deseni<\/h1>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tasla\u011fa g\u00f6re, <strong>Wildcard Pattern<\/strong> olarak adland\u0131r\u0131lan <strong>* <\/strong>desenin ayn\u0131 var pattern gibi her zaman i\u00e7in true de\u011fer d\u00f6nmektedir. Var pattern\u2019dan fark\u0131 ise burada derleyiciye d\u00f6nen de\u011ferin bizim i\u00e7in bir \u00f6nemi olmad\u0131\u011f\u0131n\u0131 ve bunun i\u00e7in bizim bir de\u011fi\u015fken tan\u0131mlamas\u0131 yapmayaca\u011f\u0131m\u0131z\u0131 belirtmemizdir.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u00d6zyenileme Deseni<\/h1>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131da payla\u015ft\u0131\u011f\u0131m var ve wildcard desenlerinin ilk bak\u0131\u015fta size bir \u015fey ifade etmedi\u011fini tahmin ediyorum. \u00dcz\u00fclmeyin, yaln\u0131z de\u011filsiniz\u2026 okumaya devam edin \ud83d\ude42 . Taslakta yer alan desenlerden birisi de <strong>Recursive Pattern<\/strong>\u2019d\u0131r.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>recursive-pattern: <br>&nbsp;&nbsp;&nbsp; type <strong>(<\/strong> subpattern-list<sub>opt<\/sub>&nbsp; <strong>)<\/strong><\/p><\/blockquote>\n\n\n\n<p>&nbsp;&nbsp; \u00d6zyenileme deseni olarak T\u00fcrk\u00e7e\u2019ye \u00e7evirebilece\u011fim bu desende yukar\u0131da da g\u00f6rebilece\u011finiz gibi tan\u0131ml\u0131 olan is operat\u00f6r \u00e7a\u011fr\u0131s\u0131n\u0131n \u00f6zyenileme ile i\u00e7 i\u00e7e \u00e7al\u0131\u015ft\u0131r\u0131labilmesi \u00f6ng\u00f6r\u00fclmektedir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Recursive Pattern\u2019a \u00f6rnek i\u00e7in makalemin ba\u015f\u0131na geri d\u00f6nelim;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var c = Cartesian(3, 4);\nif (c is Polar(var R, *)) Console.WriteLine(R);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Hat\u0131rlarsan\u0131z bu ifade sonucunda konsola 5 yazasa\u011f\u0131n\u0131 s\u00f6ylemi\u015ftim. Yukarda payla\u015ft\u0131\u011f\u0131m desenler \u00fczerinden gidersek; \u00f6ncelikle en d\u0131\u015fta bir Recursive Pattern yer ald\u0131\u011f\u0131n\u0131 g\u00f6rebiliriz :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Polar(var R, *)<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u0130ncelemeye devam etti\u011fimizde bu ifadenin i\u00e7erisinde de var pattern ve wildcard patten oldu\u011funu g\u00f6rebiliriz. Dolay\u0131s\u0131yla;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">c is Polar(var R, *)<\/pre>\n\n\n\n<p>ifadesiyle derleyiciye kartezyen c\u2019nin polar sistemde kar\u015f\u0131l\u0131\u011f\u0131 olup olmad\u0131\u011f\u0131n\u0131, kar\u015f\u0131l\u0131\u011f\u0131 var ise R ad\u0131yla bir de\u011fi\u015fken olu\u015fturup Polar sistemdeki R de\u011ferini buna atamas\u0131n\u0131, Theta de\u011ferinin ise bizim i\u00e7in \u00f6nemli olmad\u0131\u011f\u0131n\u0131 bunun i\u00e7in kendisinin ge\u00e7ici bir de\u011fi\u015fken olu\u015fturabilece\u011fini s\u00f6yl\u00fcyoruz.<\/p>\n\n\n\n<p>Son olarak a\u015fa\u011f\u0131daki \u00f6rne\u011fi inceleyelim;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public record class Konum(int x: X, int y: Y, int z: Z);\n\nvar konumBilgisi = new Konum(1, 2, 3);\nif (konumBilgisi is Konum(1, *, var z)){\n    Console.WriteLine(z);\n}<\/pre>\n\n\n\n<p>Bu sat\u0131rlar ard\u0131nda derleyici kodu \u015fu \u015fekilde yorumlayacak ve i\u015flem yapacakt\u0131r;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>$x, $y ve $z ad\u0131yla birer de\u011fi\u015fken tan\u0131mlan\u0131r tan\u0131mlan\u0131r<\/li><li>Konum.is(konumBilgisi, out $x, out $y, out $z); \u00e7a\u011fr\u0131s\u0131 yap\u0131l\u0131r<\/li><li>is kontrol\u00fcn\u00fcn do\u011fru de\u011fer d\u00f6n\u00fcp d\u00f6nmedi\u011fi kontrol edilir<\/li><li><strong>Constant Pattern:<\/strong> object.Equals($x, 1) ifadesinin do\u011frulu\u011fu kontrol edilir<\/li><li><strong>Wildcard Pattern:<\/strong> $y ifadesi g\u00f6zard\u0131 edilir.<\/li><li><strong>Var Pattern:<\/strong> z ad\u0131yla bir de\u011fi\u015fken olu\u015fturularak $z de\u011feri atan\u0131r<\/li><\/ul>\n\n\n\n<p>Bu ad\u0131mlar ard\u0131nda derleyicinin olu\u015fturaca\u011f\u0131 kod a\u015fa\u011f\u0131dakine benzer olacakt\u0131r;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var konumBilgisi = new Konum(1, 2, 3);\n\nint $x, $y,$z;\nif (Konum.is(konumBilgisi, out $x, out $y, out $z)){\n    if(object.Equals($x, 1)){\n        var z = $z;\n\n        Console.WriteLine(z);\n    }\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Switch \u0130fadeleri<\/h1>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdiye kadar ki \u00f6rneklerin is operat\u00f6r\u00fc \u00fczerinden gitmi\u015f olsa da makelemin ba\u015f\u0131nda da belirtti\u011fim gibi ayn\u0131 kurallar switch ifadesi i\u00e7in de ge\u00e7erlidir. Dolay\u0131s\u0131yla bu tasla\u011f\u0131n kabul edilmesi durumunda a\u015fa\u011f\u0131daki gibi ifadelerin de kullanabilece\u011fiz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">case int z:\ncase Konum(1, *, var z):\ncase null:<\/pre>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; \u00d6zellikle Roslyn projesinin .NET Compiler Platform ad\u0131yla a\u00e7\u0131k kaynak olarak geli\u015ftirilmeye devam etmesi ard\u0131ndan C# 6 \u00e7al\u0131\u015fmalar\u0131 da ivmelendi. A\u00e7\u0131k kaynak kod geli\u015ftiricilerinden destek gelmesi ve C#\u2019a yeni \u00f6zellikler katma iste\u011fi bu ivmenin dinamikleri aras\u0131nda yer al\u0131yor. \u00c7al\u0131\u015fmalar h\u0131zla devam ederken, ge\u00e7ti\u011fimiz hafta i\u00e7erisinde yeni bir geli\u015fme ya\u015fand\u0131. C# diline yeni bir \u00f6zellik eklenmesi&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/csharp-6-desen-eslestirme-taslak-onerisi\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[41,324,351],"class_list":["post-33688","post","type-post","status-publish","format-standard","hentry","category-csharp","category-turkce","tag-c","tag-c-6","tag-pattern-matching"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi) - Fatih Boy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/csharp-6-desen-eslestirme-taslak-onerisi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi) - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; \u00d6zellikle Roslyn projesinin .NET Compiler Platform ad\u0131yla a\u00e7\u0131k kaynak olarak geli\u015ftirilmeye devam etmesi ard\u0131ndan C# 6 \u00e7al\u0131\u015fmalar\u0131 da ivmelendi. A\u00e7\u0131k kaynak kod geli\u015ftiricilerinden destek gelmesi ve C#\u2019a yeni \u00f6zellikler katma iste\u011fi bu ivmenin dinamikleri aras\u0131nda yer al\u0131yor. \u00c7al\u0131\u015fmalar h\u0131zla devam ederken, ge\u00e7ti\u011fimiz hafta i\u00e7erisinde yeni bir geli\u015fme ya\u015fand\u0131. C# diline yeni bir \u00f6zellik eklenmesi...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/csharp-6-desen-eslestirme-taslak-onerisi\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-20T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-20T19:39:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi)\",\"datePublished\":\"2014-08-20T10:00:00+00:00\",\"dateModified\":\"2021-06-20T19:39:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/\"},\"wordCount\":1697,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png\",\"keywords\":[\"C#\",\"C# 6\",\"Pattern Matching\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/\",\"url\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/\",\"name\":\"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi) - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png\",\"datePublished\":\"2014-08-20T10:00:00+00:00\",\"dateModified\":\"2021-06-20T19:39:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi) - Fatih Boy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/csharp-6-desen-eslestirme-taslak-onerisi\/","og_locale":"en_US","og_type":"article","og_title":"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi) - Fatih Boy","og_description":"&nbsp;&nbsp; \u00d6zellikle Roslyn projesinin .NET Compiler Platform ad\u0131yla a\u00e7\u0131k kaynak olarak geli\u015ftirilmeye devam etmesi ard\u0131ndan C# 6 \u00e7al\u0131\u015fmalar\u0131 da ivmelendi. A\u00e7\u0131k kaynak kod geli\u015ftiricilerinden destek gelmesi ve C#\u2019a yeni \u00f6zellikler katma iste\u011fi bu ivmenin dinamikleri aras\u0131nda yer al\u0131yor. \u00c7al\u0131\u015fmalar h\u0131zla devam ederken, ge\u00e7ti\u011fimiz hafta i\u00e7erisinde yeni bir geli\u015fme ya\u015fand\u0131. C# diline yeni bir \u00f6zellik eklenmesi...Read More","og_url":"https:\/\/fatihboy.com\/en\/csharp-6-desen-eslestirme-taslak-onerisi\/","og_site_name":"Fatih Boy","article_published_time":"2014-08-20T10:00:00+00:00","article_modified_time":"2021-06-20T19:39:34+00:00","og_image":[{"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png","type":"","width":"","height":""}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi)","datePublished":"2014-08-20T10:00:00+00:00","dateModified":"2021-06-20T19:39:34+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/"},"wordCount":1697,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png","keywords":["C#","C# 6","Pattern Matching"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/","url":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/","name":"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi) - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png","datePublished":"2014-08-20T10:00:00+00:00","dateModified":"2021-06-20T19:39:34+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Uyari6.png"},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/csharp-6-desen-eslestirme-taslak-onerisi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"C# 6.0 \u2013 Desen E\u015fle\u015ftirme (Taslak \u00d6nerisi)"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=33688"}],"version-history":[{"count":1,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33688\/revisions"}],"predecessor-version":[{"id":33689,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33688\/revisions\/33689"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}