﻿
{"id":5229,"date":"2016-10-20T17:39:31","date_gmt":"2016-10-20T17:39:31","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5229"},"modified":"2016-10-20T17:41:56","modified_gmt":"2016-10-20T17:41:56","slug":"c-7-0-ref-returns","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-7-0-ref-returns\/","title":{"rendered":"C# 7.0 &#8211; Ref Returns"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>.NET \u00e7at\u0131s\u0131 alt\u0131nda yap\u0131lan g\u00fcncellemeler her zaman yeni keyword yahut yap\u0131 getirmekten ziyade bilakis genellikle var olan\u0131n geli\u015fmesi ve daha pratik bir yap\u0131ya b\u00fcr\u00fcnmesi \u00fczerine odaklanmaktad\u0131r. \u015eahsen t\u00fcm ihtiya\u00e7lara d\u00f6n\u00fck anahtar s\u00f6zc\u00fcklerin var olmas\u0131 ve yeni ihtiya\u00e7lar\u0131n uzun vadede belirlenebiliyor olmas\u0131ndan dolay\u0131 bu ihtiya\u00e7lara d\u00f6n\u00fck keywordlerin do\u011fmas\u0131na daha uzun zaman oldu\u011funu s\u00f6yleyebiliriz. Bu dersimizde ise var olan bir keyword\u00fcn daha pratik kullan\u0131labildi\u011fi C# 7.0 ile gelen &#8220;ref returns&#8221; \u00f6zelli\u011fi \u00fczerine duruyor olaca\u011f\u0131z. Tabi bu \u00f6zelli\u011fi anlamland\u0131rabilmek i\u00e7in \u00f6ncelikle <a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-metodlarda-ref-ve-params-kullanimi\/\" target=\"_blank\"><strong><em>ref<\/em><\/strong><\/a> keyword\u00fcn\u00fcn kullan\u0131m\u0131na hakim olman\u0131z gerekmektedir. Her ne kadar ilgili linkteki makaleyi okuyarak bu hakimiyeti sa\u011flayabileceksenizde, benim burada hafiften konuya de\u011finmem daha veremli olacakt\u0131r.<\/p>\n<p>Referans kelimesinin k\u0131saltmas\u0131 olan ref keyword\u00fc ile bir metoddun parametresini i\u015faretlersek e\u011fer o parametreye verilen de\u011fi\u015fkenin de\u011feri de\u011fil, bizzat kendisi, referans\u0131 ilgili metoda g\u00f6nderilmi\u015f olacakt\u0131r. Haliyle a\u015fa\u011f\u0131daki \u00f6rnek kod blo\u011fu bu keyword\u00fcn i\u015flevini olduk\u00e7a net g\u00f6zler \u00f6n\u00fcne sermektedir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns.png\" alt=\"C# 7.0 \u2013 Ref Returns\" width=\"313\" height=\"269\" class=\"aligncenter size-full wp-image-5239\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns.png 313w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-300x258.png 300w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><\/a><\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere int tipinden &#8220;y&#8221; isimli de\u011fi\u015fkenimiz &#8220;Metod&#8221; isimli metoda parametre olarak ref keyword\u00fcyle g\u00f6nderilmekte ve i\u00e7erisinde 40 de\u011feri atanmaktad\u0131r. ref keyword\u00fc sayesinde parametreye direkt olarak &#8220;y&#8221; de\u011fi\u015fkeni fiziksel olarak geldi\u011finden dolay\u0131 RAM&#8217;de ki Stack k\u0131sm\u0131nda &#8220;y&#8221; referans\u0131na 40 de\u011feri set edilmekte, ee dolay\u0131s\u0131yla yazd\u0131rd\u0131\u011f\u0131m\u0131zda 40 de\u011ferini \u00e7\u0131kt\u0131 olarak bizlere vermektedir.<\/p>\n<p>Yani uzun laf\u0131n k\u0131sas\u0131, &#8220;ref&#8221; metoda parametre olarak de\u011fi\u015fkenin de\u011ferini de\u011fil direkt olarak kendisi  g\u00f6ndermektedir.<\/p>\n<p>Nas\u0131l ki, &#8220;ref&#8221; ile de\u011fi\u015fkenin kendisini metoda g\u00f6nderiyorsak C# 7.0 ile gelen Ref Returns \u00f6zelli\u011fiylede metoddan de\u011fi\u015fkeni fiziksel olarak return edebiliyoruz. Nas\u0131l m\u0131? A\u015fa\u011f\u0131daki kod blo\u011funa bakal\u0131m&#8230;<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-1.png\" alt=\"C# 7.0 \u2013 Ref Returns\" width=\"492\" height=\"321\" class=\"aligncenter size-full wp-image-5245\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-1.png 492w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-1-300x196.png 300w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/a><\/p>\n<p>Siz yukar\u0131daki kod yap\u0131s\u0131n\u0131 incelerken ben burada d\u00f6nen mevzuyu anlatmaya ba\u015fl\u0131yorum. &#8220;Metod&#8221; isimli metodumuz g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;ref&#8221; keyword\u00fcyle i\u015faretlenmi\u015f parametre almakta ve bu parametreden gelen de\u011fi\u015fkeni direkt olarak &#8220;return ref&#8221; komutu ile geriye d\u00f6nd\u00fcrmektedir. Tabi ki de burada daha kompleks i\u015flemler ger\u00e7ekle\u015ftirebilir ve en sonunda &#8220;return ref&#8221; komutunu kullanabilirsiniz. Ben daha sade bir tablo \u00fczerinden konumuzu anlatmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131mdan dolay\u0131 metodumuzun i\u00e7eri\u011fini bu \u015fekilde bo\u015f olarak ayarlad\u0131m. Her neyse, burada &#8220;return ref x&#8221; komutu sayesinde metodumuz geriye ilgili &#8220;x&#8221; de\u011fi\u015fkeninin refere etti\u011fi de\u011fi\u015fkenin de\u011ferini de\u011fil ta kendisini fiziksel olarak geriye d\u00f6nd\u00fcrecektir.<\/p>\n<p>&#8220;Main&#8221; metodu i\u00e7erisinde ise tan\u0131mlanm\u0131\u015f olan int tipinden &#8220;y&#8221; isimli de\u011fi\u015fkenimiz &#8220;Metod&#8221; isimli metodumuza parametre olarak g\u00f6nderilmekte ve geriye gelen de\u011feri tekrardan &#8220;ref int x&#8221; de\u011fi\u015fkeniyle elde etmekteyiz. Tabi burada yazm\u0131\u015f oldu\u011fumuz komutun gramerine daha \u00e7ok de\u011finmemiz gerekece\u011finden dolay\u0131 bu sat\u0131r\u0131 \u00f6zellikle a\u015fa\u011f\u0131ya al\u0131p, inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            ref int x = ref Metod(ref y);\r\n<\/pre>\n<p>Burada yapm\u0131\u015f oldu\u011fumuz i\u015flem, assing operat\u00f6r\u00fcn\u00fcn sol taraf\u0131ndan tan\u0131mlad\u0131\u011f\u0131m\u0131z de\u011fi\u015fken tipi bir de\u011ferden \u00e7ok fiziksel bir de\u011fi\u015fkeni refere edece\u011finden dolay\u0131 tekrardan &#8220;ref&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcyle i\u015faretlenmektedir. Ayn\u0131 mant\u0131kla assing operat\u00f6r\u00fcn\u00fcn sa\u011f taraftaki k\u0131sm\u0131nda ise metotdan gelecek olan de\u011fi\u015fkenin de\u011fer de\u011fil fiziksel olarak bellekteki adresi oldu\u011funu belirtebilmek i\u00e7inde yine &#8220;ref&#8221; anahtar s\u00f6zc\u00fc\u011f\u00fcyle i\u015faretlendirme yap\u0131lm\u0131\u015ft\u0131r.<\/p>\n<p>K\u0131saca sol tarafta bir de\u011fer tipi de\u011fil bir de\u011fi\u015fken referans\u0131 tutulaca\u011f\u0131 ve sa\u011f tarafta da bir de\u011fer de\u011fil de\u011fi\u015fkenin ta kendisi yani bellekteki adresi atanaca\u011f\u0131 belirtilmi\u015ftir. \u0130\u015fte bu \u015fekilde yap\u0131lan tan\u0131mlama neticesinde &#8220;x&#8221; ile &#8220;y&#8221; referanslar\u0131 arka planda a\u015fa\u011f\u0131daki \u015femada oldu\u011fu gibi ayn\u0131 fiziksel de\u011fi\u015fkeni i\u015faret &#8211; refere etmektedirler.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-2.png\" alt=\"C# 7.0 \u2013 Ref Returns\" width=\"244\" height=\"212\" class=\"aligncenter size-full wp-image-5252\" \/><\/a><\/p>\n<p>Haliyle &#8220;x&#8221; yahut &#8220;y&#8221; de\u011fi\u015fkenlerinden herhangi birinin de\u011feri de\u011fi\u015fsin fark etmeksizin di\u011ferinide etkileyecektir. A\u015fa\u011f\u0131da konuya geni\u015f a\u00e7\u0131dan bakabilmeniz i\u00e7in farkl\u0131 bir \u00f6rnek daha veriyorum.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-3.png\" alt=\"C# 7.0 \u2013 Ref Returns\" width=\"368\" height=\"340\" class=\"aligncenter size-full wp-image-5254\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-3.png 368w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/C-7.0-\u2013-Ref-Returns-3-300x277.png 300w\" sizes=\"auto, (max-width: 368px) 100vw, 368px\" \/><\/a><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;x&#8221; de\u011fi\u015fkenine verilen de\u011fere &#8220;y&#8221; de\u011fi\u015fkeninden, &#8220;y&#8221; de\u011fi\u015fkenine verilen de\u011fere ise &#8220;x&#8221; de\u011fi\u015fkeninden eri\u015febilmekteyiz. \u00c7\u00fcnk\u00fc asl\u0131nda bu ikisi ayn\u0131 de\u011fi\u015fkendir.<\/p>\n<p>Evet, her ne kadar Ref Returns \u00f6zelli\u011fi geriye de\u011fi\u015fkenin bellek adresini g\u00f6ndermek ama\u00e7l\u0131 bir yenilik olsada asl\u0131nda de\u011fer tipli bir de\u011fi\u015fkeni iki farkl\u0131 referans ile refere etmeyide ger\u00e7ekle\u015ftirmeyi sa\u011flamakta ve bir ku\u015fla iki ta\u015f vurmaktad\u0131r&#8230; <\/p>\n<p>Umar\u0131m okurken hem e\u011flenir hem de bol bol faydalan\u0131rs\u0131n\u0131z&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda 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, .NET \u00e7at\u0131s\u0131 alt\u0131nda yap\u0131lan g\u00fcncellemeler her zaman yeni keyword yahut yap\u0131 getirmekten ziyade bilakis genellikle var olan\u0131n geli\u015fmesi ve daha pratik bir yap\u0131ya b\u00fcr\u00fcnmesi \u00fczerine odaklanmaktad\u0131r. \u015eahsen t\u00fcm ihtiya\u00e7lara d\u00f6n\u00fck anahtar s\u00f6zc\u00fcklerin var&#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":[12,1490],"tags":[1491,1518,163,1527,1528],"class_list":["post-5229","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-yenilikleri","tag-ref","tag-ref-returns","tag-returns"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5229","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=5229"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5229\/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=5229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}