﻿
{"id":5104,"date":"2016-10-09T09:57:32","date_gmt":"2016-10-09T09:57:32","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5104"},"modified":"2016-10-09T09:57:32","modified_gmt":"2016-10-09T09:57:32","slug":"c-7-0-local-functions","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-7-0-local-functions\/","title":{"rendered":"C# 7.0 &#8211; Local Functions"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Biliyorsunuz ki, son zamanlarda SQL Server 2016&#8217;n\u0131n yeniliklerine dalm\u0131\u015f durumday\u0131m. Bu durum, g\u00f6z bebe\u011fimiz C#&#8217;\u0131n yeniliklerini g\u00f6z ard\u0131 etti\u011fimiz anlam\u0131na gelmemektedir. Piyasaya C# 7.0 s\u00fcr\u00fcm\u00fcnde sunulan yeniliklerin pi\u015fip kavrulmas\u0131 i\u00e7in biraz beklemeyi, zaman i\u00e7inde neyin kal\u0131c\u0131 neyin gidici olaca\u011f\u0131n\u0131 g\u00f6rebilmek i\u00e7in sabredip biraz ge\u00e7 olsada do\u011fru \u015fekilde yeniliklere de\u011finmeyi tercih ettim. Bu i\u00e7eri\u011fimizde C# 7.0 ile gelen <strong><em>Local Functions<\/em><\/strong> yap\u0131s\u0131na de\u011finece\u011fiz.<\/p>\n<p>C# d\u0131\u015f\u0131nda baz\u0131 diller, metod i\u00e7erisinde metod olu\u015fturmaya izin verirken C#&#8217;ta 7.0 versiyonuna kadar izin verilmemekte, biz de bu ihtiyac\u0131 <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-isimsiz-metodlaranonymous-methods\/\" target=\"_blank\">Anonymous Methodst<\/a>, <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-delegatetemsilci-ve-eventolay-kullanimi\/\" target=\"_blank\">Delegate<\/a> yahut Expression yap\u0131lar\u0131yla gidermekteydik.<\/p>\n<p>7.0 versiyonu ile gelen Local Functions \u00f6zelli\u011fi sayesinde metod i\u00e7erisinde metod olu\u015fturabilmekte ve daha temiz ve kullan\u0131\u015fl\u0131 bir in\u015fa s\u00fcreci ge\u00e7irebilmekteyiz.<\/p>\n<h2><span style=\"color: #800080;\">Neden Metod \u0130\u00e7erisinde Metod?<\/span><\/h2>\n<p>Evet&#8230; \u0130lgili yenili\u011fin nas\u0131l tatbik edildi\u011finden \u00e7ok bu sorunun cevab\u0131 daha \u00e7ok \u00f6nem arz etmektedir. Biz yaz\u0131l\u0131mc\u0131lar; uzun, maliyetli ve bak\u0131m\u0131 zor olan senaryolarda \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z metodun i\u00e7erisinde t\u00fcm in\u015fay\u0131 ger\u00e7ekle\u015ftirmeyiz. Fonksiyonellik arz eden b\u00f6l\u00fcmleri farkl\u0131 metodlara ay\u0131r\u0131r daha sonra bu metodlar\u0131 ilgili metod i\u00e7erisinde \u00e7a\u011f\u0131rarak par\u00e7alardan olu\u015fan ve y\u00f6netilebilir bir b\u00fct\u00fcn elde ederiz.<\/p>\n<p>Bu d\u0131\u015far\u0131ya ta\u015f\u0131d\u0131\u011f\u0131m\u0131z ufak metodlara helper(yard\u0131mc\u0131) metod diyelim. \u015e\u00f6yle bir d\u00fc\u015f\u00fcn\u00fcrsek e\u011fer, bu helper metodlar classta tan\u0131mland\u0131klar\u0131 halde tek bir metot taraf\u0131ndan kullan\u0131l\u0131rlar. Buna ra\u011fmen class\u0131n \u00fcyesi olduklar\u0131 i\u00e7in class i\u00e7erisinde veyahut nesne \u00fczerinde bu metodlar\u0131n yanl\u0131\u015fl\u0131kla \u00e7a\u011fr\u0131lma ihtimali, yahut \u00e7al\u0131\u015f\u0131rkende IntelliSense&#8217;de l\u00fczumsuz yer i\u015fgal etmesi \u00e7okta g\u00f6z ard\u0131 edilebilir olas\u0131 bir hata de\u011fildir. &#8220;<em>ya hocam, metodu o halde public de\u011fil private yapar\u0131z<\/em>&#8221; diye d\u00fc\u015f\u00fcnebilirsiniz. private olarak tan\u0131mlasak bile class i\u00e7erisinde \u00e7al\u0131\u015f\u0131rken bu metodu yanl\u0131\u015fl\u0131kla kullanabilir, class i\u00e7erisinde IntelliSense&#8217;de bu metod yer i\u015fgal edebilir.<\/p>\n<p>\u0130\u015fte bu t\u00fcr olas\u0131 durumlar\u0131n a\u015f\u0131labilmesi i\u00e7in Local Functions&#8217;lara ihtiya\u00e7 vard\u0131r.<\/p>\n<p>\u015eimdi biraz \u00f6nce bahsetti\u011fim durumu \u00f6rneklendirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Banka\r\n    {\r\n        public void ParaSay(string Kisi, int Adet, double Deger)\r\n        {\r\n            Console.WriteLine($&quot;{Kisi} ki\u015finin paras\u0131 say\u0131lmaya ba\u015fl\u0131yor.&quot;);\r\n            Console.WriteLine($&quot;{Kisi} ki\u015fisinin toplam paras\u0131 {Say(Adet, Deger)}&quot;);\r\n        }\r\n\r\n        double Say(int Adet, double Deger)\r\n        {\r\n            double ToplamPara = 0;\r\n            for (int i = 0; i &lt; Adet; i++)\r\n                ToplamPara += Deger;\r\n\r\n            return ToplamPara;\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;Banka&#8221; s\u0131n\u0131f\u0131 i\u00e7erisinde &#8220;ParaSay&#8221; metodu i\u00e7erisinde &#8220;Say&#8221; metodu \u00e7a\u011fr\u0131larak verilen parametrik de\u011ferlere g\u00f6re belirli i\u015flemler ger\u00e7ekle\u015ftirilmektedir.<em>(evet, Adet * Deger \u015feklinde de bir i\u015flem yapabilirdik ama tak\u0131lmay\u0131n oraya, maksat iki sat\u0131r kod g\u00f6z\u00fcks\u00fcn&#8230;)<\/em> Do\u011fal olarak &#8220;Say&#8221; metodu &#8220;ParaSay&#8221; metodu d\u0131\u015f\u0131nda kullan\u0131lmayacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Banka\r\n    {\r\n        public void ParaSay(string Kisi, int Adet, double Deger)\r\n        {\r\n            Console.WriteLine($&quot;{Kisi} ki\u015finin paras\u0131 say\u0131lmaya ba\u015fl\u0131yor.&quot;);\r\n            Console.WriteLine($&quot;{Kisi} ki\u015fisinin toplam paras\u0131 {Say(Adet, Deger)}&quot;);\r\n        }\r\n\r\n        double Say(int Adet, double Deger)\r\n        {\r\n            double ToplamPara = 0;\r\n            for (int i = 0; i &lt; Adet; i++)\r\n                ToplamPara += Deger;\r\n\r\n            return ToplamPara;\r\n        }\r\n\r\n        public string MusteriyeSelamSoyle()\r\n        {\r\n            return &quot;Anl\u0131k faizlerimizle hep arkan\u0131zday\u0131z...&quot;\r\n        }\r\n    }\r\n<\/pre>\n<p>&#8220;Banka&#8221; s\u0131n\u0131f\u0131 i\u00e7erisinde &#8220;MusteriyeSelamSoyle&#8221; isminde bir metod olu\u015fturduk. \u015eimdi bu metod i\u00e7erisinde \u00e7al\u0131\u015f\u0131rken a\u015fa\u011f\u0131daki gibi IntelliSense&#8217;de &#8220;Say&#8221; metodunun g\u00f6z\u00fckmesi ne kadar do\u011frudur?<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5111 size-full\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions.png\" alt=\"C# 7.0 - Local Functions\" width=\"551\" height=\"147\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions.png 551w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-300x80.png 300w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/a><br \/>\nPeki g\u00f6z\u00fckmesi bir yana, hadi o anda bir dalg\u0131nl\u0131\u011f\u0131ma gelip yanl\u0131\u015fl\u0131kla a\u015fa\u011f\u0131daki gibi alakas\u0131z metodu alakas\u0131z bir ba\u015fka metod i\u00e7erisinde \u00e7a\u011f\u0131rm\u0131\u015f olsam&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Banka\r\n    {\r\n        public void ParaSay(string Kisi, int Adet, double Deger)\r\n        {\r\n            Console.WriteLine($&quot;{Kisi} ki\u015finin paras\u0131 say\u0131lmaya ba\u015fl\u0131yor.&quot;);\r\n            Console.WriteLine($&quot;{Kisi} ki\u015fisinin toplam paras\u0131 {Say(Adet, Deger)}&quot;);\r\n        }\r\n\r\n        double Say(int Adet, double Deger)\r\n        {\r\n            double ToplamPara = 0;\r\n            for (int i = 0; i &lt; Adet; i++)\r\n                ToplamPara += Deger;\r\n\r\n            return ToplamPara;\r\n        }\r\n\r\n        public string MusteriyeSelamSoyle()\r\n        {\r\n            Say(100, 23);\r\n            return &quot;Anl\u0131k faizlerimizle hep arkan\u0131zday\u0131z...&quot;;\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet&#8230; G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi bu tarz alakas\u0131z i\u015flemleri, kod karma\u015fas\u0131na sebep olabilecek her t\u00fcrl\u00fc ihtimali ortadan Local Functions ile a\u015fa\u011f\u0131daki gibi kald\u0131rabilmekteyiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Banka\r\n    {\r\n        public void ParaSay(string Kisi, int Adet, double Deger)\r\n        {\r\n            double Say(int adet, double deger)\r\n            {\r\n                double ToplamPara = 0;\r\n                for (int i = 0; i &lt; Adet; i++)\r\n                    ToplamPara += Deger;\r\n\r\n                return ToplamPara;\r\n            }\r\n\r\n            Console.WriteLine($&quot;{Kisi} ki\u015finin paras\u0131 say\u0131lmaya ba\u015fl\u0131yor.&quot;);\r\n            Console.WriteLine($&quot;{Kisi} ki\u015fisinin toplam paras\u0131 {Say(Adet, Deger)}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>&#8220;Say&#8221; metodu sade ve sadece &#8220;ParaSay&#8221; metodu i\u00e7erisinde kullan\u0131laca\u011f\u0131ndan dolay\u0131 yukar\u0131daki gibi metod i\u00e7erisinde tan\u0131mlanmaktad\u0131r. &#8220;Say&#8221; metoduna eri\u015febilece\u011fimiz noktalara a\u015fa\u011f\u0131da g\u00f6z atal\u0131m.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5115 size-full\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-1.png\" alt=\"C# 7.0 - Local Functions\" width=\"416\" height=\"371\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-1.png 416w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-1-300x268.png 300w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/a><\/p>\n<p>&#8220;ParaSay&#8221; scopelar\u0131 i\u00e7erisinde &#8220;Say&#8221; metoduna eri\u015febilmekteyiz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5116 size-full\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-2.png\" alt=\"C# 7.0 - Local Functions\" width=\"594\" height=\"98\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-2.png 594w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-Local-Functions-2-300x49.png 300w\" sizes=\"auto, (max-width: 594px) 100vw, 594px\" \/><\/a><\/p>\n<p>Do\u011fal olarak &#8220;MusteriyeSelamSoyle&#8221; metodu i\u00e7erisinde eri\u015fememekteyiz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-6-0-expression-bodied-functions\/\" target=\"_blank\"><\/p>\n<h2><span style=\"color: #800080;\">Expression Bodied Local Functions<\/span><\/h2>\n<p><\/a><br \/>\nE\u011fer ki local olarak tan\u0131mlayaca\u011f\u0131n\u0131z metod tek sat\u0131rl\u0131k i\u015flem bar\u0131nd\u0131r\u0131yorsa Expression Bodied Functions olarakta tan\u0131mlanabilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Banka\r\n    {\r\n        public void ParaSay(string Kisi, int Adet, double Deger)\r\n        {\r\n            double Say(int adet, double deger) =&gt; Adet * Deger;\r\n\r\n            Console.WriteLine($&quot;{Kisi} ki\u015finin paras\u0131 say\u0131lmaya ba\u015fl\u0131yor.&quot;);\r\n            Console.WriteLine($&quot;{Kisi} ki\u015fisinin toplam paras\u0131 {Say(Adet, Deger)}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet&#8230; Bir yaz\u0131m\u0131z\u0131n daha sonuna gelmi\u015f bulunmaktay\u0131z.<br \/>\nBol bol faydalanman\u0131z dile\u011fiyle&#8230;<\/p>\n<p>Sonraki 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, Biliyorsunuz ki, son zamanlarda SQL Server 2016&#8217;n\u0131n yeniliklerine dalm\u0131\u015f durumday\u0131m. Bu durum, g\u00f6z bebe\u011fimiz C#&#8217;\u0131n yeniliklerini g\u00f6z ard\u0131 etti\u011fimiz anlam\u0131na gelmemektedir. Piyasaya C# 7.0 s\u00fcr\u00fcm\u00fcnde sunulan yeniliklerin pi\u015fip kavrulmas\u0131 i\u00e7in biraz beklemeyi, zaman&#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":5118,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1490],"tags":[1491,1493,1492],"class_list":["post-5104","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-7-0","tag-c-7-0","tag-expression-bodied-local-functions","tag-local-functions"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5104","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=5104"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5104\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/5118"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}