{"id":39304,"date":"2026-02-18T15:00:36","date_gmt":"2026-02-18T12:00:36","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/"},"modified":"2026-02-18T15:00:36","modified_gmt":"2026-02-18T12:00:36","slug":"kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/","title":{"rendered":"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131"},"content":{"rendered":"<h2>Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda verimlilik, s\u00fcrd\u00fcr\u00fclebilirlik ve kod kalitesi daima \u00f6ncelikli hedefler olmu\u015ftur. Bu hedeflere ula\u015fmada kritik rol oynayan prensiplerden biri de &#8220;Don&#8217;t Repeat Yourself&#8221; (DRY) yani &#8220;Kendini Tekrar Etme&#8221; prensibidir. Bu makale, DRY prensibinin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu, tekrar eden kodun (genellikle WET &#8211; Write Everything Twice veya We Enjoy Typing olarak adland\u0131r\u0131l\u0131r) yol a\u00e7t\u0131\u011f\u0131 sorunlar\u0131 ve yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecinde tekrardan ka\u00e7\u0131nmak i\u00e7in kullan\u0131labilecek stratejileri detayl\u0131 bir \u015fekilde inceleyecektir.<\/p>\n<h2>DRY Prensibi Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>DRY prensibi, yaz\u0131l\u0131m m\u00fchendisli\u011finde temel bir ilkedir ve &#8220;Her bilgi par\u00e7as\u0131, bir sistem i\u00e7inde tek, a\u00e7\u0131k ve yetkili bir temsile sahip olmal\u0131d\u0131r&#8221; \u015feklinde \u00f6zetlenebilir. Bu, kodunuzda veya sisteminizde herhangi bir mant\u0131k, veri veya bilgi par\u00e7as\u0131n\u0131n birden fazla yerde tekrarlanmamas\u0131 gerekti\u011fi anlam\u0131na gelir. Amac\u0131, kodun mod\u00fclerli\u011fini, okunabilirli\u011fini, bak\u0131m\u0131n\u0131 ve geni\u015fletilebilirli\u011fini art\u0131rmakt\u0131r.<\/p>\n<h3>DRY&#8217;nin Tan\u0131m\u0131 ve Amac\u0131<\/h3>\n<p>DRY prensibi, Andy Hunt ve Dave Thomas taraf\u0131ndan &#8220;The Pragmatic Programmer&#8221; kitab\u0131nda pop\u00fcler hale getirilmi\u015ftir. Temelinde, ayn\u0131 i\u015fi yapan kod bloklar\u0131n\u0131 veya ayn\u0131 veriyi temsil eden yap\u0131lar\u0131 tekrar tekrar yazmaktan ka\u00e7\u0131nma fikri yatar. Bu, bir de\u011fi\u015fikli\u011fin yaln\u0131zca tek bir yerde yap\u0131lmas\u0131 gerekti\u011fi ve bu de\u011fi\u015fikli\u011fin sistemin geri kalan\u0131na otomatik olarak yans\u0131d\u0131\u011f\u0131 bir yap\u0131 olu\u015fturmay\u0131 hedefler.<\/p>\n<h3>Tekrar Eden Kodun (WET) Maliyetleri<\/h3>\n<p>Tekrar eden kod (WET), ba\u015flang\u0131\u00e7ta h\u0131zl\u0131 bir \u00e7\u00f6z\u00fcm gibi g\u00f6r\u00fcnse de uzun vadede ciddi maliyetlere yol a\u00e7ar:<\/p>\n<ul>\n<li><strong>Bak\u0131m Zorlu\u011fu:<\/strong> Bir hatay\u0131 d\u00fczeltmek veya bir \u00f6zelli\u011fi de\u011fi\u015ftirmek istedi\u011finizde, ayn\u0131 kodun t\u00fcm kopyalar\u0131n\u0131 bulup g\u00fcncellemeniz gerekir. Bu, zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir.<\/li>\n<li><strong>Hata Yay\u0131l\u0131m\u0131:<\/strong> Bir kopyada yap\u0131lan bir d\u00fczeltme veya de\u011fi\u015fiklik, di\u011fer kopyalara uygulanmazsa, sistemde tutars\u0131zl\u0131klar ve yeni hatalar ortaya \u00e7\u0131kar.<\/li>\n<li><strong>Anla\u015f\u0131labilirlik Azalmas\u0131:<\/strong> Tekrar eden kod, kod taban\u0131n\u0131 gereksiz yere b\u00fcy\u00fct\u00fcr ve okunabilirli\u011fini d\u00fc\u015f\u00fcr\u00fcr. Bu da yeni geli\u015ftiricilerin projeye adapte olmas\u0131n\u0131 zorla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Geli\u015ftirme H\u0131z\u0131 D\u00fc\u015f\u00fc\u015f\u00fc:<\/strong> Her yeni \u00f6zellik eklendi\u011finde veya mevcut bir \u00f6zellik de\u011fi\u015ftirildi\u011finde, ayn\u0131 kodun farkl\u0131 yerlerde tekrar tekrar yaz\u0131lmas\u0131 veya g\u00fcncellenmesi gerekir, bu da geli\u015ftirme h\u0131z\u0131n\u0131 yava\u015flat\u0131r.<\/li>\n<\/ul>\n<h3>Prensibin Temel Felsefesi<\/h3>\n<p>DRY&#8217;nin temel felsefesi, &#8220;tek do\u011fruluk kayna\u011f\u0131&#8221; (single source of truth) olu\u015fturmakt\u0131r. Bir i\u015f kural\u0131, bir veritaban\u0131 \u015femas\u0131 veya bir UI bile\u015feni gibi her bilgi par\u00e7as\u0131, sistemde yaln\u0131zca bir yerde tan\u0131mlanmal\u0131 ve di\u011fer yerler bu tek kayna\u011fa ba\u015fvurmal\u0131d\u0131r. Bu yakla\u015f\u0131m, sistemin daha tutarl\u0131, daha g\u00fcvenilir ve daha kolay y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>Tekrar Eden Kodun Belirtileri ve Tan\u0131mlanmas\u0131<\/h2>\n<p>Tekrar eden kod, her zaman a\u00e7\u0131k\u00e7a ortada olmayabilir. Bazen farkl\u0131 isimler alt\u0131nda gizlenmi\u015f, ancak ayn\u0131 i\u015fi yapan kod bloklar\u0131 \u015feklinde kar\u015f\u0131m\u0131za \u00e7\u0131kabilir. Bu belirtileri tan\u0131mak, DRY prensibini etkili bir \u015fekilde uygulamak i\u00e7in ilk ad\u0131md\u0131r.<\/p>\n<h3>Kod Kopyala-Yap\u0131\u015ft\u0131r Pratikleri<\/h3>\n<p>En bariz DRY ihlali, bir kod blo\u011funu kopyalay\u0131p farkl\u0131 bir yere yap\u0131\u015ft\u0131rmakt\u0131r. Bu genellikle aciliyet durumlar\u0131nda veya h\u0131zl\u0131 \u00e7\u00f6z\u00fcmler \u00fcretmek amac\u0131yla yap\u0131l\u0131r. Ancak bu pratik, kod taban\u0131nda k\u0131sa s\u00fcrede biriken ve bak\u0131m\u0131 kabusa \u00e7eviren &#8220;kopya-yap\u0131\u015ft\u0131r&#8221; sendromuna yol a\u00e7ar.<\/p>\n<h3>Benzer \u0130\u015flevsellikteki Fonksiyonlar<\/h3>\n<p>Farkl\u0131 isimlere sahip olsalar da \u00e7ok benzer arg\u00fcmanlar alan ve neredeyse ayn\u0131 mant\u0131\u011f\u0131 uygulayan birden fazla fonksiyon veya metot g\u00f6rmek yayg\u0131n bir DRY ihlalidir. \u00d6rne\u011fin, <code>calculateTaxForProductA()<\/code> ve <code>calculateTaxForProductB()<\/code> gibi fonksiyonlar, asl\u0131nda tek bir <code>calculateTax(productType)<\/code> fonksiyonu alt\u0131nda birle\u015ftirilebilir.<\/p>\n<h3>Veritaban\u0131 \u015eemalar\u0131nda ve Yap\u0131land\u0131rmalarda Tekrar<\/h3>\n<p>DRY prensibi sadece kod i\u00e7in de\u011fil, veritaban\u0131 \u015femalar\u0131, yap\u0131land\u0131rma dosyalar\u0131 ve hatta dok\u00fcmantasyon i\u00e7in de ge\u00e7erlidir. Ayn\u0131 verinin farkl\u0131 tablolarda gereksiz yere tekrarlanmas\u0131 veya benzer yap\u0131land\u0131rma ayarlar\u0131n\u0131n birden fazla dosyada bulunmas\u0131, DRY ihlalidir ve tutars\u0131zl\u0131k riskini art\u0131r\u0131r.<\/p>\n<h3>Test Kodlar\u0131nda Tekrar<\/h3>\n<p>Test kodlar\u0131 da DRY prensibinden muaf de\u011fildir. Benzer test senaryolar\u0131n\u0131n veya test kurulum ad\u0131mlar\u0131n\u0131n farkl\u0131 test dosyalar\u0131nda tekrar tekrar yaz\u0131lmas\u0131, testlerin bak\u0131m\u0131n\u0131 zorla\u015ft\u0131r\u0131r ve test s\u00fcresini uzatabilir. Ortak test yard\u0131mc\u0131lar\u0131 (helper functions) veya test kurulum\/y\u0131k\u0131m (setup\/teardown) metotlar\u0131 kullan\u0131larak bu tekrardan ka\u00e7\u0131n\u0131labilir.<\/p>\n<h2>Tekrardan Ka\u00e7\u0131nma Stratejileri ve Teknikleri<\/h2>\n<p>DRY prensibini uygulamak, sadece kod kopyalamaktan ka\u00e7\u0131nmakla s\u0131n\u0131rl\u0131 de\u011fildir; ayn\u0131 zamanda iyi bir tasar\u0131m ve soyutlama becerisi gerektirir. \u0130\u015fte tekrardan ka\u00e7\u0131nmak i\u00e7in kullan\u0131labilecek temel stratejiler ve teknikler:<\/p>\n<h3>Fonksiyonlar ve Metotlar ile Soyutlama<\/h3>\n<p>En temel DRY tekni\u011fi, tekrar eden kod bloklar\u0131n\u0131 bir fonksiyon veya metot i\u00e7ine almakt\u0131r. Bu sayede, ayn\u0131 mant\u0131k birden fazla yerden \u00e7a\u011fr\u0131labilir ve herhangi bir de\u011fi\u015fiklik sadece fonksiyonun i\u00e7inde yap\u0131l\u0131r. Bu, kodun yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-python\">\n# WET (Tekrar Eden) \u00d6rnek\ndef print_user_details_admin(user):\n    print(f\"Admin User: {user['name']} {user['surname']}\")\n    print(f\"Email: {user['email']}\")\n    print(f\"Role: {user['role']}\")\n\ndef print_user_details_guest(user):\n    print(f\"Guest User: {user['name']} {user['surname']}\")\n    print(f\"Email: {user['email']}\")\n    # Role bilgisi g\u00f6sterilmiyor\n\n# DRY (Tekrars\u0131z) \u00d6rnek\ndef print_user_details(user, show_role=False):\n    print(f\"User: {user['name']} {user['surname']}\")\n    print(f\"Email: {user['email']}\")\n    if show_role:\n        print(f\"Role: {user['role']}\")\n\n# Kullan\u0131m\nuser_data = {'name': 'Ay\u015fe', 'surname': 'Y\u0131lmaz', 'email': 'ayse@example.com', 'role': 'admin'}\nprint_user_details(user_data, show_role=True) # Admin i\u00e7in\nprint_user_details(user_data) # Misafir i\u00e7in\n<\/pre>\n<p><\/code><\/p>\n<h3>S\u0131n\u0131flar ve Nesne Y\u00f6nelimli Programlama (OOP)<\/h3>\n<p>Nesne Y\u00f6nelimli Programlama (OOP), DRY prensibini uygulamak i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sunar. Kal\u0131t\u0131m (inheritance), polimorfizm (polymorphism) ve kompozisyon (composition) gibi kavramlar sayesinde, ortak davran\u0131\u015flar ve \u00f6zellikler temel s\u0131n\u0131flarda tan\u0131mlanabilir ve alt s\u0131n\u0131flar taraf\u0131ndan yeniden kullan\u0131labilir. Bu, kod tekrar\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<h3>Mod\u00fcller ve K\u00fct\u00fcphaneler<\/h3>\n<p>Daha b\u00fcy\u00fck \u00f6l\u00e7ekte, tekrar eden i\u015flevsellikleri mod\u00fcller veya k\u00fct\u00fcphaneler halinde paketlemek, farkl\u0131 projeler veya projenin farkl\u0131 b\u00f6l\u00fcmleri aras\u0131nda kod payla\u015f\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir veritaban\u0131 ba\u011flant\u0131 katman\u0131 veya bir kimlik do\u011frulama mod\u00fcl\u00fc, uygulaman\u0131n farkl\u0131 yerlerinde veya farkl\u0131 uygulamalarda kullan\u0131labilir.<\/p>\n<h3>Tasar\u0131m Desenleri (Strategy, Template Method vb.)<\/h3>\n<p>Tasar\u0131m desenleri, yaz\u0131l\u0131m geli\u015ftirmede s\u0131k kar\u015f\u0131la\u015f\u0131lan sorunlara kan\u0131tlanm\u0131\u015f \u00e7\u00f6z\u00fcmler sunar. \u00d6rne\u011fin, Strategy deseni, benzer algoritmalar\u0131 farkl\u0131 ba\u011flamlarda kullanmak i\u00e7in esneklik sa\u011flarken, Template Method deseni, bir algoritman\u0131n iskeletini bir metotta tan\u0131mlay\u0131p ad\u0131mlar\u0131n baz\u0131lar\u0131n\u0131 alt s\u0131n\u0131flara b\u0131rakarak kod tekrar\u0131n\u0131 \u00f6nler.<\/p>\n<h3>Veri Yap\u0131lar\u0131 ve Algoritmalar\u0131n Do\u011fru Kullan\u0131m\u0131<\/h3>\n<p>Bazen tekrar eden kod, yanl\u0131\u015f veri yap\u0131s\u0131 se\u00e7imi veya verimsiz algoritmalar nedeniyle ortaya \u00e7\u0131kar. Do\u011fru veri yap\u0131s\u0131n\u0131 (\u00f6rne\u011fin, liste yerine s\u00f6zl\u00fck kullanmak) ve algoritmalar\u0131 (\u00f6rne\u011fin, d\u00f6ng\u00fcler yerine haritalama veya filtreleme fonksiyonlar\u0131) kullanmak, kodun daha k\u0131sa, daha okunakl\u0131 ve daha az tekrarl\u0131 olmas\u0131n\u0131 sa\u011flayabilir.<\/p>\n<h2>Kod \u00d6rnekleri ile DRY Uygulamalar\u0131<\/h2>\n<p>DRY prensibini somutla\u015ft\u0131rmak i\u00e7in baz\u0131 pratik kod \u00f6rneklerine g\u00f6z atal\u0131m. Bu \u00f6rnekler, farkl\u0131 senaryolarda tekrar eden kodun nas\u0131l soyutlanabilece\u011fini g\u00f6sterecektir.<\/p>\n<h3>Basit Bir Fonksiyon Tekrar\u0131 \u00d6rne\u011fi (Python)<\/h3>\n<p>Bir web uygulamas\u0131nda farkl\u0131 kullan\u0131c\u0131 tipleri i\u00e7in ho\u015f geldiniz mesaj\u0131 olu\u015fturan iki ayr\u0131 fonksiyon d\u00fc\u015f\u00fcnelim:<\/p>\n<pre><code class=\"language-python\">\n# WET Yakla\u015f\u0131m\ndef get_welcome_message_for_admin(username):\n    return f\"Ho\u015f geldiniz, Y\u00f6netici {username}! T\u00fcm \u00f6zelliklere eri\u015fiminiz var.\"\n\ndef get_welcome_message_for_user(username):\n    return f\"Ho\u015f geldiniz, {username}! S\u0131n\u0131rl\u0131 \u00f6zelliklere eri\u015fiminiz var.\"\n\n# Kullan\u0131m\nprint(get_welcome_message_for_admin(\"Ali\"))\nprint(get_welcome_message_for_user(\"Ay\u015fe\"))\n<\/pre>\n<p><\/code><\/p>\n<p>Bu iki fonksiyonun mesaj\u0131n ba\u015flang\u0131\u00e7 k\u0131sm\u0131 ayn\u0131d\u0131r. DRY prensibini uygulayarak bunu tek bir fonksiyonda birle\u015ftirebiliriz:<\/p>\n<pre><code class=\"language-python\">\n# DRY Yakla\u015f\u0131m\ndef get_welcome_message(username, role=\"user\"):\n    if role == \"admin\":\n        return f\"Ho\u015f geldiniz, Y\u00f6netici {username}! T\u00fcm \u00f6zelliklere eri\u015fiminiz var.\"\n    else:\n        return f\"Ho\u015f geldiniz, {username}! S\u0131n\u0131rl\u0131 \u00f6zelliklere eri\u015fiminiz var.\"\n\n# Kullan\u0131m\nprint(get_welcome_message(\"Ali\", \"admin\"))\nprint(get_welcome_message(\"Ay\u015fe\", \"user\"))\n<\/pre>\n<p><\/code><\/p>\n<p>Bu DRY versiyonu, kod tekrar\u0131n\u0131 ortadan kald\u0131r\u0131r ve gelecekte yeni bir rol eklendi\u011finde sadece tek bir fonksiyonun g\u00fcncellenmesi yeterli olur.<\/p>\n<h3>S\u0131n\u0131f Yap\u0131s\u0131 ile Tekrar\u0131 \u00d6nleme (Python)<\/h3>\n<p>Farkl\u0131 t\u00fcrdeki hayvanlar\u0131n ses \u00e7\u0131karmas\u0131n\u0131 modelleyen bir \u00f6rnek:<\/p>\n<pre><code class=\"language-python\">\n# WET Yakla\u015f\u0131m\nclass Dog:\n    def make_sound(self):\n        return \"Hav hav!\"\n\nclass Cat:\n    def make_sound(self):\n        return \"Miyav!\"\n\nclass Cow:\n    def make_sound(self):\n        return \"M\u00f6\u00f6\u00f6!\"\n\n# Kullan\u0131m\ndog = Dog()\ncat = Cat()\ncow = Cow()\nprint(dog.make_sound())\nprint(cat.make_sound())\nprint(cow.make_sound())\n<\/pre>\n<p><\/code><\/p>\n<p>Her s\u0131n\u0131f\u0131n <code>make_sound<\/code> metodu benzer bir i\u015f yap\u0131yor. Ortak bir temel s\u0131n\u0131f veya aray\u00fcz kullanarak bunu DRY hale getirebiliriz:<\/p>\n<pre><code class=\"language-python\">\n# DRY Yakla\u015f\u0131m (Polimorfizm ile)\nfrom abc import ABC, abstractmethod\n\nclass Animal(ABC): # Soyut Temel S\u0131n\u0131f\n    @abstractmethod\n    def make_sound(self):\n        pass\n\nclass Dog(Animal):\n    def make_sound(self):\n        return \"Hav hav!\"\n\nclass Cat(Animal):\n    def make_sound(self):\n        return \"Miyav!\"\n\nclass Cow(Animal):\n    def make_sound(self):\n        return \"M\u00f6\u00f6\u00f6!\"\n\n# Kullan\u0131m\nanimals = [Dog(), Cat(), Cow()]\nfor animal in animals:\n    print(animal.make_sound())\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>Animal<\/code> soyut s\u0131n\u0131f\u0131, t\u00fcm hayvanlar\u0131n <code>make_sound<\/code> metoduna sahip olmas\u0131 gerekti\u011fini garanti eder. Bu, kodun daha d\u00fczenli ve geni\u015fletilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Konfig\u00fcrasyon Dosyalar\u0131nda Tekrar\u0131 \u00d6nleme (JSON)<\/h3>\n<p>Bir uygulaman\u0131n farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in benzer ama k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar i\u00e7eren yap\u0131land\u0131rma dosyalar\u0131 olabilir. Tekrar\u0131 \u00f6nlemek i\u00e7in ortak ayarlar\u0131 ayr\u0131 bir dosyada tutmak ve ortam bazl\u0131 farkl\u0131l\u0131klar\u0131 \u00fczerine yazmak iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-json\">\n\/\/ base_config.json\n{\n  \"database_host\": \"localhost\",\n  \"database_port\": 5432,\n  \"log_level\": \"INFO\",\n  \"api_version\": \"v1\"\n}\n\n\/\/ production_config.json (base_config'i geni\u015fletir)\n{\n  \"database_host\": \"prod.db.example.com\",\n  \"log_level\": \"ERROR\"\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Uygulama, \u00f6nce <code>base_config.json<\/code>'\u0131 y\u00fckler, ard\u0131ndan <code>production_config.json<\/code>'\u0131 y\u00fckleyerek \u00e7ak\u0131\u015fan de\u011ferleri g\u00fcnceller. Bu, her ortam i\u00e7in t\u00fcm ayarlar\u0131 tekrar yazmaktan kurtar\u0131r.<\/p>\n<h2>DRY'nin A\u015f\u0131r\u0131 Uygulanmas\u0131 ve Tuzaklar\u0131<\/h2>\n<p>DRY prensibi g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, her prensip gibi a\u015f\u0131r\u0131ya ka\u00e7\u0131ld\u0131\u011f\u0131nda veya yanl\u0131\u015f anla\u015f\u0131ld\u0131\u011f\u0131nda sorunlara yol a\u00e7abilir. \"A\u015f\u0131r\u0131 DRY\" veya \"Yanl\u0131\u015f DRY\" sendromu, kodun gereksiz yere karma\u015f\u0131kla\u015fmas\u0131na ve anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131n azalmas\u0131na neden olabilir.<\/p>\n<h3>Soyutlama Maliyeti<\/h3>\n<p>Her tekrar eden kod par\u00e7as\u0131n\u0131 soyutlamaya \u00e7al\u0131\u015fmak, bazen soyutlaman\u0131n kendisinin koddan daha karma\u015f\u0131k hale gelmesine neden olabilir. K\u00fc\u00e7\u00fck ve \u00f6nemsiz tekrarlar i\u00e7in karma\u015f\u0131k bir soyutlama katman\u0131 olu\u015fturmak, kodu daha az de\u011fil, daha \u00e7ok okunaks\u0131z hale getirebilir. Bu, \"soyutlama maliyeti\" olarak bilinir.<\/p>\n<h3>Erken Optimizasyon ve Gereksiz Karma\u015f\u0131kl\u0131k<\/h3>\n<p>DRY prensibini, hen\u00fcz tekrar etmeyen veya gelecekte tekrar edip etmeyece\u011fi belli olmayan kod par\u00e7alar\u0131na uygulamaya \u00e7al\u0131\u015fmak, erken optimizasyondur. Bu durum, gelecekteki ihtiya\u00e7lar\u0131 yanl\u0131\u015f tahmin etmeye ve gereksiz yere karma\u015f\u0131k, esnek olmayan bir tasar\u0131m olu\u015fturmaya yol a\u00e7abilir. \"YAGNI\" (You Ain't Gonna Need It - Buna \u0130htiyac\u0131n Olmayacak) prensibiyle dengelenmelidir.<\/p>\n<h3>Yanl\u0131\u015f Soyutlama ve \"A\u015f\u0131r\u0131 DRY\" Sendromu<\/h3>\n<p>Bazen iki kod par\u00e7as\u0131 y\u00fczeysel olarak benzer g\u00f6r\u00fcnse de, asl\u0131nda farkl\u0131 i\u015flevlere hizmet edebilir veya gelecekte farkl\u0131 \u015fekillerde de\u011fi\u015febilir. Bu t\u00fcr kodlar\u0131 tek bir soyutlama alt\u0131nda birle\u015ftirmek, gelecekte her iki i\u015flevsellikten birinde de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131nda di\u011ferini de etkileyecek ve \"ba\u011f\u0131ml\u0131l\u0131k\" sorunlar\u0131na yol a\u00e7acakt\u0131r. Bu durum, \"yanl\u0131\u015f soyutlama\" veya \"a\u015f\u0131r\u0131 DRY\" olarak adland\u0131r\u0131l\u0131r.<\/p>\n<h3>Kod Okunabilirli\u011fi ve Anla\u015f\u0131l\u0131rl\u0131k Dengesi<\/h3>\n<p>DRY prensibi, kodun okunabilirli\u011fini ve anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 art\u0131rmay\u0131 hedefler. Ancak, a\u015f\u0131r\u0131ya ka\u00e7an soyutlamalar veya \u00e7ok genel fonksiyonlar, kodun ne yapt\u0131\u011f\u0131n\u0131 anlamay\u0131 zorla\u015ft\u0131rabilir. DRY prensibini uygularken, kodun hala kolayca okunabilir ve anla\u015f\u0131labilir oldu\u011fundan emin olmak \u00f6nemlidir. Bazen k\u00fc\u00e7\u00fck bir tekrar, karma\u015f\u0131k bir soyutlamadan daha anla\u015f\u0131l\u0131r olabilir.<\/p>\n<h2>DRY Prensibini Destekleyen Ara\u00e7lar ve Yakla\u015f\u0131mlar<\/h2>\n<p>DRY prensibini yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecine entegre etmek i\u00e7in \u00e7e\u015fitli ara\u00e7lar ve yakla\u015f\u0131mlar mevcuttur. Bu ara\u00e7lar, tekrar eden kodu tespit etmeye, \u00f6nlemeye ve y\u00f6netmeye yard\u0131mc\u0131 olur.<\/p>\n<h3>Kod Analiz Ara\u00e7lar\u0131 (Linting, Statik Analiz)<\/h3>\n<p>Statik kod analiz ara\u00e7lar\u0131 (\u00f6rne\u011fin SonarQube, Pylint, ESLint), kod taban\u0131ndaki potansiyel DRY ihlallerini, yani tekrar eden kod bloklar\u0131n\u0131 (code duplication) otomatik olarak tespit edebilir. Bu ara\u00e7lar, geli\u015ftiricilere nerede soyutlama yapmalar\u0131 gerekti\u011fi konusunda de\u011ferli geri bildirimler sa\u011flar.<\/p>\n<h3>Otomatik Testler<\/h3>\n<p>Otomatik testler, \u00f6zellikle bir kod blo\u011funda yap\u0131lan de\u011fi\u015fikliklerin sistemin di\u011fer b\u00f6l\u00fcmlerini etkilemedi\u011finden emin olmak i\u00e7in kritik \u00f6neme sahiptir. DRY prensibini uygularken yap\u0131lan refactoring (yeniden yap\u0131land\u0131rma) i\u015flemleri, mevcut testlerin ge\u00e7mesini sa\u011flamal\u0131d\u0131r. Bu, g\u00fcvenle de\u011fi\u015fiklik yapma imkan\u0131 sunar.<\/p>\n<h3>Refactoring (Yeniden Yap\u0131land\u0131rma)<\/h3>\n<p>Refactoring, mevcut kodun d\u0131\u015f davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirmeden i\u00e7 yap\u0131s\u0131n\u0131 iyile\u015ftirme s\u00fcrecidir. DRY prensibini uygulamak, genellikle tekrar eden kodlar\u0131 bulup soyutlama, fonksiyonlara veya s\u0131n\u0131flara ay\u0131rma gibi refactoring tekniklerini i\u00e7erir. Bu, kod kalitesini s\u00fcrekli olarak art\u0131rman\u0131n bir yoludur.<\/p>\n<h3>Versiyon Kontrol Sistemleri (Git)<\/h3>\n<p>Versiyon kontrol sistemleri (\u00f6rne\u011fin Git), kod taban\u0131ndaki de\u011fi\u015fiklikleri takip etmeyi ve y\u00f6netmeyi sa\u011flar. Bu sistemler, refactoring veya DRY prensibini uygularken yap\u0131lan b\u00fcy\u00fck de\u011fi\u015fikliklerde geri d\u00f6n\u00fc\u015f noktalar\u0131 sa\u011flayarak geli\u015ftiricilere g\u00fcvenlik sunar. Ayr\u0131ca, farkl\u0131 dallarda yap\u0131lan de\u011fi\u015fiklikleri birle\u015ftirmeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>DRY prensibi, modern yaz\u0131l\u0131m geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. Kod kalitesini art\u0131r\u0131r, bak\u0131m\u0131 kolayla\u015ft\u0131r\u0131r, hata oran\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr ve geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r. Ancak, her prensip gibi DRY'nin de do\u011fru anla\u015f\u0131lmas\u0131 ve dengeli bir \u015fekilde uygulanmas\u0131 gerekir. A\u015f\u0131r\u0131ya ka\u00e7an veya yanl\u0131\u015f uygulanan soyutlamalar, faydadan \u00e7ok zarara yol a\u00e7abilir. Geli\u015ftiricilerin g\u00f6revi, tekrar eden kodlar\u0131 tan\u0131mak, uygun soyutlama tekniklerini kullanmak ve kodun okunabilirli\u011fi ile esnekli\u011fi aras\u0131nda sa\u011fl\u0131kl\u0131 bir denge kurmakt\u0131r. Unutmay\u0131n, iyi yaz\u0131l\u0131m geli\u015ftirme, sadece kod yazmak de\u011fil, ayn\u0131 zamanda s\u00fcrd\u00fcr\u00fclebilir, anla\u015f\u0131l\u0131r ve bak\u0131m\u0131 kolay sistemler in\u015fa etmektir.<\/p>\n<h2>SSS (S\u0131k Sorulan Sorular)<\/h2>\n<h3>DRY sadece kod i\u00e7in mi ge\u00e7erli?<\/h3>\n<p>Hay\u0131r, DRY prensibi sadece yaz\u0131l\u0131m kodlar\u0131yla s\u0131n\u0131rl\u0131 de\u011fildir. Veritaban\u0131 \u015femalar\u0131, yap\u0131land\u0131rma dosyalar\u0131, test senaryolar\u0131, dok\u00fcmantasyon ve hatta i\u015f s\u00fcre\u00e7leri gibi bir sistemdeki her t\u00fcrl\u00fc bilgi par\u00e7as\u0131 i\u00e7in ge\u00e7erlidir. Ama\u00e7, herhangi bir bilginin tek bir yetkili kayna\u011fa sahip olmas\u0131d\u0131r.<\/p>\n<h3>Her tekrar DRY ihlali midir?<\/h3>\n<p>Hay\u0131r, her tekrar DRY ihlali de\u011fildir. Bazen iki kod blo\u011fu ayn\u0131 g\u00f6r\u00fcnse de, asl\u0131nda farkl\u0131 nedenlerle var olabilir ve gelecekte farkl\u0131 \u015fekillerde de\u011fi\u015febilirler. Bu t\u00fcr durumlarda, onlar\u0131 birle\u015ftirmek yerine ayr\u0131 tutmak daha do\u011fru olabilir. \u00d6nemli olan, tekrar\u0131n \"anlamsal\" olup olmad\u0131\u011f\u0131d\u0131r; yani ayn\u0131 i\u015f kural\u0131n\u0131, ayn\u0131 mant\u0131\u011f\u0131 veya ayn\u0131 bilgiyi mi temsil ediyorlar?<\/p>\n<h3>DRY prensibini ne zaman uygulamal\u0131y\u0131z?<\/h3>\n<p>DRY prensibini, bir kod blo\u011funu veya bilgi par\u00e7as\u0131n\u0131 en az iki veya \u00fc\u00e7 kez tekrar etti\u011finizi fark etti\u011finizde uygulamaya ba\u015flamak genellikle iyi bir yakla\u015f\u0131md\u0131r. \"\u00dc\u00e7 kural\u0131\" (Rule of Three) olarak bilinen bu yakla\u015f\u0131m, erken optimizasyondan ka\u00e7\u0131nman\u0131za yard\u0131mc\u0131 olur. Ancak, bazen ilk yazarken bile gelecekteki tekrar potansiyelini \u00f6ng\u00f6rerek DRY prensibini uygulamak faydal\u0131 olabilir.<\/p>\n<h3>DRY'nin z\u0131tt\u0131 nedir?<\/h3>\n<p>DRY'nin z\u0131tt\u0131 genellikle WET (Write Everything Twice veya We Enjoy Typing) olarak adland\u0131r\u0131l\u0131r. WET, kod tekrar\u0131n\u0131n yayg\u0131n oldu\u011fu, her \u015feyin birden fazla kez yaz\u0131ld\u0131\u011f\u0131 ve bu durumun genellikle geli\u015ftiriciler taraf\u0131ndan fark\u0131nda olmadan veya h\u0131zl\u0131 \u00e7\u00f6z\u00fcmler aray\u0131\u015f\u0131yla benimsendi\u011fi durumlar\u0131 ifade eder.<\/p>\n","protected":false},"excerpt":{"rendered":"Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda verimlilik, s\u00fcrd\u00fcr\u00fclebilirlik ve kod kalitesi daima \u00f6ncelikli hedefler olmu\u015ftur. Bu hedeflere ula\u015fmada kritik rol oy&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-39304","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/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:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131\" \/>\n<meta property=\"og:description\" content=\"Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda verimlilik, s\u00fcrd\u00fcr\u00fclebilirlik ve kod kalitesi daima \u00f6ncelikli hedefler olmu\u015ftur. Bu hedeflere ula\u015fmada kritik rol oy...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-18T12:00:36+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131\",\"datePublished\":\"2026-02-18T12:00:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/\"},\"wordCount\":2440,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/\",\"name\":\"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-18T12:00:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/","og_locale":"tr_TR","og_type":"article","og_title":"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131","og_description":"Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda verimlilik, s\u00fcrd\u00fcr\u00fclebilirlik ve kod kalitesi daima \u00f6ncelikli hedefler olmu\u015ftur. Bu hedeflere ula\u015fmada kritik rol oy...","og_url":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-18T12:00:36+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131","datePublished":"2026-02-18T12:00:36+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/"},"wordCount":2440,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/","url":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/","name":"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-18T12:00:36+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kendini-tekrar-etme-dry-prensibi-ve-tekrardan-kacinma-sanati\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kendini Tekrar Etme (DRY) Prensibi ve Tekrardan Ka\u00e7\u0131nma Sanat\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39304"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39304\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}