﻿
{"id":10616,"date":"2019-03-20T15:45:19","date_gmt":"2019-03-20T15:45:19","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=10616"},"modified":"2019-03-20T15:45:19","modified_gmt":"2019-03-20T15:45:19","slug":"c-7-0-discard-kavrami","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-7-0-discard-kavrami\/","title":{"rendered":"C# 7.0 &#8211; Discard Kavram\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Genellikle C# s\u00fcr\u00fcmlerindeki yenilikler \u00fczerine konu bazl\u0131 de\u011ferlendirme i\u00e7erikleri olu\u015fturarak m\u00fcmk\u00fcn mertebe kendimi ve blo\u011fumu g\u00fcncel tutmaya \u00e7al\u0131\u015fmaktay\u0131m. Tabi arada baz\u0131 konular g\u00f6zden ka\u00e7abilmekte yahut sonra de\u011ferlendirilmek \u00fczere ileriye \u00f6telenebilmektedir. Bu i\u00e7eri\u011fimizde C# 7.0 ile gelmi\u015f olan ve g\u00f6zden ka\u00e7an(<em>bu makale klavyeye al\u0131nd\u0131\u011f\u0131 esnada mevcut C# s\u00fcr\u00fcm\u00fc 7.3<\/em>) bir \u00f6zellik olan Discard Kavram\u0131 \u00fczerine konu\u015fuyor olaca\u011f\u0131z.<\/p>\n<p>C#&#8217;ta Discard kavram\u0131 &#8220;_&#8221;<em>(alt tire)<\/em> karakteriyle alakal\u0131 bir kavramd\u0131r. Normal \u015fartlarda C# programlama dilinde sadece ad\u0131 &#8220;_&#8221; karakterinden olu\u015fan de\u011fi\u015fken tan\u0131mlanabilmekte ve kullan\u0131labilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            int _ = 123;\r\n            Console.WriteLine(_);\r\n<\/pre>\n<p>Burada &#8220;int&#8221; tipinden &#8220;123&#8221; de\u011ferini tutan de\u011fi\u015fkenimizin ad\u0131 &#8220;_&#8221; karakteridir.<\/p>\n<p>E\u011fer ki ilgili karakterde bir de\u011fi\u015fken tan\u0131mlanmam\u0131\u015fsa ve salt bir \u015fekilde kullan\u0131l\u0131yorsa i\u015fte o durumda &#8220;_&#8221; karakteri Discard \u00f6zelli\u011fi g\u00f6stermektedir.<\/p>\n<p><strong>Peki Discard Operat\u00f6r\u00fcn\u00fcn G\u00f6revi Nedir?<\/strong><br \/>\nBir veriyi, de\u011fi\u015fkeni, propertyi yahut metot geri d\u00f6n\u00fc\u015f de\u011ferini bir noktaya atama i\u015flemi neticesinde ilgili de\u011ferin bellekte bir yer ayr\u0131lmayacak \u015fekilde \u00e7\u00f6p olarak kabul edilmesini sa\u011flamakla g\u00f6revlidir.<\/p>\n<p>Bir ba\u015fka deyi\u015fle de\u011fi\u015fken deklare(tan\u0131mlama) etmeye ihtiya\u00e7 duyulmad\u0131\u011f\u0131 durumlarda Discard operat\u00f6r\u00fc kullan\u0131larak sonraki ad\u0131mlarda hi\u00e7bir zaman kullan\u0131lmayacak de\u011fi\u015fkenleri bo\u015funa olu\u015fturarak bellekte l\u00fczumsuz yer i\u015fgal edilmemesini sa\u011flamaktad\u0131r.<\/p>\n<h3>Salt De\u011ferlerde Kullan\u0131m\u0131<\/h3>\n<p>\u015eimdi a\u015fa\u011f\u0131daki kodlar\u0131 inceleyiniz;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            _ = &quot;3&quot;;\r\n            _ = 3;\r\n            _ = true;\r\n            _ = new int&#x5B;5] { 1, 2, 3, 4, 5 };\r\n<\/pre>\n<p>g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8220;string&#8221; tipteki &#8220;3&#8221; de\u011ferini Discard operat\u00f6r\u00fc sayesinde herhangi bir de\u011fi\u015fken ile belle\u011fe atmaks\u0131z\u0131n ifade etmi\u015f bulunmaktay\u0131z. Benzer mant\u0131kla &#8220;int&#8221; tipindeki &#8220;3&#8221; ve &#8220;bool&#8221; tipteki &#8220;true&#8221; de\u011ferleri i\u00e7inde ge\u00e7erlidir. Ayriyetten sonuncu \u00f6rne\u011fe dikkat ederseniz &#8220;int&#8221; tipinde 5 elemanl\u0131 bir dizide discard operat\u00f6r\u00fc ile kar\u015f\u0131lanmaktad\u0131r.<\/p>\n<h3>Metotlarda Kullan\u0131m\u0131<\/h3>\n<p>Direkt salt de\u011ferler yerine a\u015fa\u011f\u0131daki gibi metot geri d\u00f6n\u00fc\u015f de\u011ferlerinide discard ile kar\u015f\u0131layabiliriz;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            int GetValue() =&gt; 3;\r\n            _ = GetValue();\r\n        }\r\n<\/pre>\n<h3>Out Parametrelerde Kullan\u0131m\u0131<\/h3>\n<p>Discard \u00f6zelli\u011finin en b\u00fcy\u00fck getirisi out parametrelerin kullan\u0131ld\u0131\u011f\u0131 metotlarda ilgili parametrenin herhangi bir de\u011fi\u015fken ile kar\u015f\u0131lanmas\u0131na gerek olmad\u0131\u011f\u0131 durumlarda kullan\u0131lmas\u0131d\u0131r.<\/p>\n<p>Bunun i\u00e7in en iyi \u00f6rnek TryParse metodu olabilir;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            if (int.TryParse(&quot;50&quot;, out _)) { }\r\n            if (int.TryParse(&quot;50&quot;, out int _)) { }\r\n<\/pre>\n<p>dikkat ederseniz e\u011fer &#8220;out _&#8221; ya da &#8220;out int _&#8221; \u015feklinde de kullan\u0131labilmektedir. Ayn\u0131 \u015fekilde kendi yazm\u0131\u015f oldu\u011fumuz out parametreli metotlar i\u00e7inde a\u015fa\u011f\u0131daki gibi kullan\u0131labilir;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            void OutMethod(out int i) =&gt; i = 5;\r\n            OutMethod(out _);\r\n            OutMethod(out int _);\r\n        }\r\n<\/pre>\n<h3>Tuple Tiplerde Kullan\u0131m\u0131<\/h3>\n<p>Ve son olarak Discard&#8217;\u0131n Tuple nesnelerde nas\u0131l kullan\u0131ld\u0131\u011f\u0131na dair a\u015fa\u011f\u0131daki \u00f6rnekleri inceleyebilirsiniz;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            (int a, int b, bool c) GetValues() =&gt; (3, 5, true);\r\n            (int a, int b, bool c) = GetValues();\r\n            (int _, int _, bool _) = GetValues();\r\n            (int _, int b2, bool _) = GetValues();\r\n            (int _, int b3, bool c2) = GetValues();\r\n            (int a2, int b4, _) = GetValues();\r\n            (int a3, _, _) = GetValues();\r\n            (int _, _, _) = GetValues();\r\n        }\r\n<\/pre>\n<p>g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere geriye &#8220;(int a, int b, bool c)&#8221; tiplerinden verileri d\u00f6nen &#8220;GetValues&#8221; isimli Tuple nesnesinin discard operat\u00f6r\u00fcyle bir\u00e7ok kullan\u0131m kombinasyonu \u00f6rneklendirilmi\u015ftir.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131m\u0131zda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#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, Genellikle C# s\u00fcr\u00fcmlerindeki yenilikler \u00fczerine konu bazl\u0131 de\u011ferlendirme i\u00e7erikleri olu\u015fturarak m\u00fcmk\u00fcn mertebe kendimi ve blo\u011fumu g\u00fcncel tutmaya \u00e7al\u0131\u015fmaktay\u0131m. Tabi arada baz\u0131 konular g\u00f6zden ka\u00e7abilmekte yahut sonra de\u011ferlendirilmek \u00fczere ileriye \u00f6telenebilmektedir. Bu i\u00e7eri\u011fimizde C#&#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":[12,1490],"tags":[1491,2792,2791,2789,2790,2794,2788,2793],"class_list":["post-10616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-c-7-0","tag-c-7-0","tag-c-7-0-discard","tag-c-7-0-discard-kavrami","tag-c-discard","tag-c-discard-kavrami","tag-c-discard-operatoru","tag-discard-kavrami","tag-discard-operatoru"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10616","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=10616"}],"version-history":[{"count":15,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10616\/revisions"}],"predecessor-version":[{"id":10631,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10616\/revisions\/10631"}],"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=10616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}