[{"data":1,"prerenderedAt":1490},["ShallowReactive",2],{"post-\u002Ftr\u002Fprototype-tasarim-deseni-nedir":3},{"page":4,"translation":1332,"nav":1346,"related":1465,"random":1477},{"id":5,"title":6,"body":7,"categories":1330,"category":1332,"date":1333,"description":1334,"draft":1335,"extension":1336,"image":1337,"kind":1332,"lang":371,"meta":1338,"navigation":215,"path":1224,"readingTime":219,"seo":1339,"slug":1340,"stem":1341,"tags":1342,"translationKey":1332,"type":1331,"updated":1332,"__hash__":1345},"postsTr\u002Ftr\u002Fprototype-tasarim-deseni-nedir.md","Prototype Tasarım Deseni Nedir?",{"type":8,"value":9,"toc":1311},"minimark",[10,20,33,36,86,89,94,99,101,105,108,111,130,137,139,143,150,153,160,166,168,172,175,358,360,364,434,436,440,454,456,460,501,503,507,512,851,855,1141,1143,1147,1151,1165,1169,1184,1188,1199,1201,1205,1210,1228,1233,1261,1266,1307],[11,12,13,14,19],"p",{},"Bu yazı ",[15,16,18],"a",{"href":17},"\u002Ftr\u002Fdesign-patterns-tasarim-desenleri-nedir","Design Patterns\u002FTasarım Desenleri Nedir?"," başlıklı yazı dizisinin bir parçasıdır.",[11,21,22,23,32],{},"Bu içerik ağırlıklı olarak ",[15,24,31],{"href":25,"rel":26,"target":30},"https:\u002F\u002Frefactoring.guru\u002Fdesign-patterns",[27,28,29],"nofollow","noopener","noreferrer","_blank","refactoring.guru"," sitesindeki içeriğin tercümesi ve derlenmesinden oluşturulmuştur.",[11,34,35],{},"Tüm tasarım desenleri ya da diğer adıyla tasarım kalıplarına yönelik ayrıntılı içeriklere yazının sonundaki bağlantılardan ulaşabilirsiniz.",[37,38,39,46],"blockquote",{},[11,40,41,42],{},"💡 ",[43,44,45],"strong",{},"Özet (TL;DR):",[47,48,49,56,75],"ul",{},[50,51,52,55],"li",{},[43,53,54],{},"Amaç:"," Mevcut nesneleri (prototipleri), sınıflarına (concrete classes) doğrudan bağımlı kalmadan kopyalamayı (klonlamayı) sağlar.",[50,57,58,61,62,66,67,70,71,74],{},[43,59,60],{},"Kilit Yapılar:"," Prototip Arayüzü (",[63,64,65],"code",{},"Prototype","), Somut Prototipler (",[63,68,69],{},"ConcretePrototypes",") ve Prototip Havuzu (",[63,72,73],{},"PrototypeRegistry",").",[50,76,77,80,81,85],{},[43,78,79],{},"Motto:"," ",[82,83,84],"em",{},"Clone instead of instantiate"," (Sıfırdan üretmek yerine klonla). Özellikle oluşturulması maliyetli (ağır veritabanı sorguları veya API çağrıları içeren) nesneler için idealdir.",[87,88],"hr",{},[90,91,93],"h2",{"id":92},"prototype-deseninin-amacı","Prototype Deseninin Amacı",[11,95,96,98],{},[43,97,65],{}," (Klon), bir objeyi, kodunuz onun sınıflarına bağımlı hale gelmeden kopyalamayı sağlayan oluşumsal (creational) bir tasarım desenidir.",[87,100],{},[90,102,104],{"id":103},"sorun","Sorun",[11,106,107],{},"Bir nesneniz olduğunu ve onun birebir kopyasını oluşturmak istediğinizi düşünün. Bunu nasıl yaparsınız?\nÖncelikle aynı sınıftan yeni bir nesne oluşturmalı, ardından orijinal nesnenin tüm alanlarını (fields) sırayla okuyup yeni nesneye atamalısınız.",[11,109,110],{},"Ancak bu yöntemin iki büyük sorunu vardır:",[112,113,114,124],"ol",{},[50,115,116,119,120,123],{},[43,117,118],{},"Gizli (Private) Alanlar:"," Nesnenin bazı alanları ",[63,121,122],{},"private"," olabilir ve dışarıdan doğrudan okunamaz.",[50,125,126,129],{},[43,127,128],{},"Sıkı Bağımlılık (Tight Coupling):"," Nesneyi kopyalamak için onun somut sınıfını (concrete class) bilmek zorunda kalırsınız. Çoğu durumda istemci kod sadece arayüzü (interface) bilir, somut sınıf detaylarından habersizdir.",[11,131,132],{},[133,134],"img",{"alt":135,"src":136},"Prototype comic 1","\u002Fimages\u002Fprototype-tasarim-deseni-nedir\u002Fprototype-comic-1.avif",[87,138],{},[90,140,142],{"id":141},"çözüm","Çözüm",[11,144,145,146,149],{},"Prototip deseni kopyalama (klonlama) sürecini, kopyalanacak olan nesnenin kendisine delege etmeyi önerir. Klonlama destekleyen nesneler tek bir ortak arayüzü uygular. Bu arayüz genellikle sadece bir ",[63,147,148],{},"clone()"," metodu içerir.",[11,151,152],{},"Bu metot çalıştırıldığında, sınıf kendi içinde yeni bir nesne oluşturur ve tüm alanları (özel\u002Fprivate alanlar dahil) yeni nesneye kopyalar. Sınıf kendi içindeki özel alanlara erişebildiği için hiçbir veri kaybı yaşanmaz.",[11,154,155,156,159],{},"Klonlamaya izin veren nesnelere ",[43,157,158],{},"prototip (prototype)"," denir.",[11,161,162],{},[133,163],{"alt":164,"src":165},"Prototype comic 2","\u002Fimages\u002Fprototype-tasarim-deseni-nedir\u002Fprototype-comic-2.avif",[87,167],{},[90,169,171],{"id":170},"gerçek-hayat-senaryosu-web-sayfası-taslak-klonlama-page-template-registry","Gerçek Hayat Senaryosu: Web Sayfası Taslak Klonlama (Page Template Registry)",[11,173,174],{},"Bir içerik yönetim sisteminde (CMS) karmaşık bir sayfa taslağını veritabanından çekip sıfırdan oluşturmak yerine klonlayarak hızlıca çoğaltma örneği:",[176,177,182],"pre",{"className":178,"code":179,"language":180,"meta":181,"style":181},"language-php shiki shiki-themes github-light github-dark","\u002F\u002F 1. Prototip Arayüzü\ninterface PagePrototype {\n    public function clone(): PagePrototype;\n}\n\n\u002F\u002F 2. Somut Prototip\nclass Page implements PagePrototype {\n    private string $title;\n    private array $widgets = [];\n\n    public function __construct(string $title) {\n        $this->title = $title;\n        \u002F\u002F Ağır veritabanı yüklemesi veya widget kurulumu yapıldığını varsayalım\n    }\n\n    public function addWidget(string $widget): void {\n        $this->widgets[] = $widget;\n    }\n\n    public function setTitle(string $title): void {\n        $this->title = $title;\n    }\n\n    \u002F\u002F Klonlama Metodu\n    public function clone(): PagePrototype {\n        $clone = new Page($this->title);\n        $clone->widgets = $this->widgets; \u002F\u002F Shallow copy örneği\n        return $clone;\n    }\n}\n","php","",[63,183,184,192,198,204,210,217,223,229,235,241,246,252,258,264,270,275,281,287,292,297,303,308,313,318,324,330,336,342,348,353],{"__ignoreMap":181},[185,186,189],"span",{"class":187,"line":188},"line",1,[185,190,191],{},"\u002F\u002F 1. Prototip Arayüzü\n",[185,193,195],{"class":187,"line":194},2,[185,196,197],{},"interface PagePrototype {\n",[185,199,201],{"class":187,"line":200},3,[185,202,203],{},"    public function clone(): PagePrototype;\n",[185,205,207],{"class":187,"line":206},4,[185,208,209],{},"}\n",[185,211,213],{"class":187,"line":212},5,[185,214,216],{"emptyLinePlaceholder":215},true,"\n",[185,218,220],{"class":187,"line":219},6,[185,221,222],{},"\u002F\u002F 2. Somut Prototip\n",[185,224,226],{"class":187,"line":225},7,[185,227,228],{},"class Page implements PagePrototype {\n",[185,230,232],{"class":187,"line":231},8,[185,233,234],{},"    private string $title;\n",[185,236,238],{"class":187,"line":237},9,[185,239,240],{},"    private array $widgets = [];\n",[185,242,244],{"class":187,"line":243},10,[185,245,216],{"emptyLinePlaceholder":215},[185,247,249],{"class":187,"line":248},11,[185,250,251],{},"    public function __construct(string $title) {\n",[185,253,255],{"class":187,"line":254},12,[185,256,257],{},"        $this->title = $title;\n",[185,259,261],{"class":187,"line":260},13,[185,262,263],{},"        \u002F\u002F Ağır veritabanı yüklemesi veya widget kurulumu yapıldığını varsayalım\n",[185,265,267],{"class":187,"line":266},14,[185,268,269],{},"    }\n",[185,271,273],{"class":187,"line":272},15,[185,274,216],{"emptyLinePlaceholder":215},[185,276,278],{"class":187,"line":277},16,[185,279,280],{},"    public function addWidget(string $widget): void {\n",[185,282,284],{"class":187,"line":283},17,[185,285,286],{},"        $this->widgets[] = $widget;\n",[185,288,290],{"class":187,"line":289},18,[185,291,269],{},[185,293,295],{"class":187,"line":294},19,[185,296,216],{"emptyLinePlaceholder":215},[185,298,300],{"class":187,"line":299},20,[185,301,302],{},"    public function setTitle(string $title): void {\n",[185,304,306],{"class":187,"line":305},21,[185,307,257],{},[185,309,311],{"class":187,"line":310},22,[185,312,269],{},[185,314,316],{"class":187,"line":315},23,[185,317,216],{"emptyLinePlaceholder":215},[185,319,321],{"class":187,"line":320},24,[185,322,323],{},"    \u002F\u002F Klonlama Metodu\n",[185,325,327],{"class":187,"line":326},25,[185,328,329],{},"    public function clone(): PagePrototype {\n",[185,331,333],{"class":187,"line":332},26,[185,334,335],{},"        $clone = new Page($this->title);\n",[185,337,339],{"class":187,"line":338},27,[185,340,341],{},"        $clone->widgets = $this->widgets; \u002F\u002F Shallow copy örneği\n",[185,343,345],{"class":187,"line":344},28,[185,346,347],{},"        return $clone;\n",[185,349,351],{"class":187,"line":350},29,[185,352,269],{},[185,354,356],{"class":187,"line":355},30,[185,357,209],{},[87,359],{},[90,361,363],{"id":362},"prototype-vs-factory-method-vs-abstract-factory","Prototype vs Factory Method vs Abstract Factory",[365,366,367,384],"table",{},[368,369,370],"thead",{},[371,372,373,378,381],"tr",{},[374,375,377],"th",{"align":376},"left","Desen",[374,379,380],{"align":376},"Üretim Yöntemi",[374,382,383],{"align":376},"Kalıtım (Inheritance) Kullanımı",[385,386,387,403,419],"tbody",{},[371,388,389,394,397],{},[390,391,392],"td",{"align":376},[43,393,65],{},[390,395,396],{"align":376},"Mevcut nesneyi klonlar.",[390,398,399,402],{"align":376},[43,400,401],{},"Hayır",", nesneler çalışma zamanında doğrudan kopyalanır.",[371,404,405,410,413],{},[390,406,407],{"align":376},[43,408,409],{},"Factory Method",[390,411,412],{"align":376},"Nesneyi alt sınıf kurucuları ile oluşturur.",[390,414,415,418],{"align":376},[43,416,417],{},"Evet",", alt sınıflar kurucu metodu override eder.",[371,420,421,426,429],{},[390,422,423],{"align":376},[43,424,425],{},"Abstract Factory",[390,427,428],{"align":376},"İlişkili nesne aileleri için fabrika arayüzleri sunar.",[390,430,431,433],{"align":376},[43,432,417],{},", somut fabrikalar nesne ailelerini üretir.",[87,435],{},[90,437,439],{"id":438},"uygulanabilirlik","Uygulanabilirlik",[47,441,442,448],{},[50,443,444,447],{},[43,445,446],{},"Sınıf Bağımlılığını Azaltmak:"," Kodunuzun kopyalayacağı nesnelerin somut sınıflarından bağımsız olmasını istediğinizde kullanın.",[50,449,450,453],{},[43,451,452],{},"Alt Sınıf Enflasyonunu Engellemek:"," Sadece nesneleri oluşturma ve yapılandırma biçimleri farklı olan alt sınıfların sayısını azaltmak istediğinizde kullanın.",[87,455],{},[90,457,459],{"id":458},"diğer-tasarım-desenleri-ile-i̇lişkisi","Diğer Tasarım Desenleri ile İlişkisi",[47,461,462,471,481,488],{},[50,463,464,465,467,468,470],{},"Tasarımlar genellikle ",[43,466,409],{}," ile başlar ve esneklik ihtiyacı arttıkça ",[43,469,65],{}," desenine evrilir.",[50,472,473,476,477,480],{},[43,474,475],{},"Composite"," ve ",[43,478,479],{},"Decorator"," desenlerini yoğun kullanan tasarımlarda, karmaşık ağaç yapılarını baştan kurmak yerine klonlamak için Prototype kullanılabilir.",[50,482,483,484,487],{},"Prototipler, durum (state) saklamak için kullanılan ",[43,485,486],{},"Memento"," desenine basit bir alternatif olabilir.",[50,489,490,491,476,493,496,497,500],{},"Prototipler, ",[43,492,425],{},[43,494,495],{},"Builder"," gibi desenler ile birlikte ",[43,498,499],{},"Singleton"," olarak saklanabilir.",[87,502],{},[90,504,506],{"id":505},"prototype-tasarım-deseni-kod-örnekleri","Prototype Tasarım Deseni Kod Örnekleri",[508,509,511],"h3",{"id":510},"örnek-php-kodu","Örnek PHP Kodu",[176,513,515],{"className":178,"code":514,"language":180,"meta":181,"style":181},"\u003C?php\n\nnamespace RefactoringGuru\\Prototype\\Conceptual;\n\nclass Prototype\n{\n    public $primitive;\n    public $component;\n    public $circularReference;\n\n    public function __clone()\n    {\n        \u002F\u002F DateTime nesnesini referansıyla değil, kopyalayarak aktarmak için:\n        $this->component = clone $this->component;\n\n        \u002F\u002F Döngüsel referansa sahip nesneler için özel klonlama mantığı:\n        $this->circularReference = clone $this->circularReference;\n        $this->circularReference->prototype = $this;\n    }\n}\n\nclass ComponentWithBackReference\n{\n    public $prototype;\n\n    public function __construct(Prototype $prototype)\n    {\n        $this->prototype = $prototype;\n    }\n}\n\nfunction clientCode()\n{\n    $p1 = new Prototype();\n    $p1->primitive = 245;\n    $p1->component = new \\DateTime();\n    $p1->circularReference = new ComponentWithBackReference($p1);\n\n    $p2 = clone $p1;\n    if ($p1->primitive === $p2->primitive) {\n        echo \"Primitive alan değerleri klona başarıyla aktarıldı.\\n\";\n    } else {\n        echo \"Primitive alanlar kopyalanamadı.\\n\";\n    }\n    \n    if ($p1->component === $p2->component) {\n        echo \"DateTime nesnesi klonlanamadı (aynı referans).\\n\";\n    } else {\n        echo \"DateTime nesnesi başarıyla klonlandı.\\n\";\n    }\n\n    if ($p1->circularReference === $p2->circularReference) {\n        echo \"Döngüsel referanslı nesne klonlanamadı.\\n\";\n    } else {\n        echo \"Döngüsel referanslı nesne başarıyla klonlandı.\\n\";\n    }\n\n    if ($p1->circularReference->prototype === $p2->circularReference->prototype) {\n        echo \"Geriye dönük referans hala orijinal nesneyi gösteriyor.\\n\";\n    } else {\n        echo \"Geriye dönük referans yeni klon nesnesini gösteriyor.\\n\";\n    }\n}\n\nclientCode();\n",[63,516,517,522,526,531,535,540,545,550,555,560,564,569,574,579,584,588,593,598,603,607,611,615,620,624,629,633,638,642,647,651,655,660,666,671,677,683,689,695,700,706,712,718,724,730,735,741,747,753,758,764,769,774,780,786,791,797,802,807,813,819,824,830,835,840,845],{"__ignoreMap":181},[185,518,519],{"class":187,"line":188},[185,520,521],{},"\u003C?php\n",[185,523,524],{"class":187,"line":194},[185,525,216],{"emptyLinePlaceholder":215},[185,527,528],{"class":187,"line":200},[185,529,530],{},"namespace RefactoringGuru\\Prototype\\Conceptual;\n",[185,532,533],{"class":187,"line":206},[185,534,216],{"emptyLinePlaceholder":215},[185,536,537],{"class":187,"line":212},[185,538,539],{},"class Prototype\n",[185,541,542],{"class":187,"line":219},[185,543,544],{},"{\n",[185,546,547],{"class":187,"line":225},[185,548,549],{},"    public $primitive;\n",[185,551,552],{"class":187,"line":231},[185,553,554],{},"    public $component;\n",[185,556,557],{"class":187,"line":237},[185,558,559],{},"    public $circularReference;\n",[185,561,562],{"class":187,"line":243},[185,563,216],{"emptyLinePlaceholder":215},[185,565,566],{"class":187,"line":248},[185,567,568],{},"    public function __clone()\n",[185,570,571],{"class":187,"line":254},[185,572,573],{},"    {\n",[185,575,576],{"class":187,"line":260},[185,577,578],{},"        \u002F\u002F DateTime nesnesini referansıyla değil, kopyalayarak aktarmak için:\n",[185,580,581],{"class":187,"line":266},[185,582,583],{},"        $this->component = clone $this->component;\n",[185,585,586],{"class":187,"line":272},[185,587,216],{"emptyLinePlaceholder":215},[185,589,590],{"class":187,"line":277},[185,591,592],{},"        \u002F\u002F Döngüsel referansa sahip nesneler için özel klonlama mantığı:\n",[185,594,595],{"class":187,"line":283},[185,596,597],{},"        $this->circularReference = clone $this->circularReference;\n",[185,599,600],{"class":187,"line":289},[185,601,602],{},"        $this->circularReference->prototype = $this;\n",[185,604,605],{"class":187,"line":294},[185,606,269],{},[185,608,609],{"class":187,"line":299},[185,610,209],{},[185,612,613],{"class":187,"line":305},[185,614,216],{"emptyLinePlaceholder":215},[185,616,617],{"class":187,"line":310},[185,618,619],{},"class ComponentWithBackReference\n",[185,621,622],{"class":187,"line":315},[185,623,544],{},[185,625,626],{"class":187,"line":320},[185,627,628],{},"    public $prototype;\n",[185,630,631],{"class":187,"line":326},[185,632,216],{"emptyLinePlaceholder":215},[185,634,635],{"class":187,"line":332},[185,636,637],{},"    public function __construct(Prototype $prototype)\n",[185,639,640],{"class":187,"line":338},[185,641,573],{},[185,643,644],{"class":187,"line":344},[185,645,646],{},"        $this->prototype = $prototype;\n",[185,648,649],{"class":187,"line":350},[185,650,269],{},[185,652,653],{"class":187,"line":355},[185,654,209],{},[185,656,658],{"class":187,"line":657},31,[185,659,216],{"emptyLinePlaceholder":215},[185,661,663],{"class":187,"line":662},32,[185,664,665],{},"function clientCode()\n",[185,667,669],{"class":187,"line":668},33,[185,670,544],{},[185,672,674],{"class":187,"line":673},34,[185,675,676],{},"    $p1 = new Prototype();\n",[185,678,680],{"class":187,"line":679},35,[185,681,682],{},"    $p1->primitive = 245;\n",[185,684,686],{"class":187,"line":685},36,[185,687,688],{},"    $p1->component = new \\DateTime();\n",[185,690,692],{"class":187,"line":691},37,[185,693,694],{},"    $p1->circularReference = new ComponentWithBackReference($p1);\n",[185,696,698],{"class":187,"line":697},38,[185,699,216],{"emptyLinePlaceholder":215},[185,701,703],{"class":187,"line":702},39,[185,704,705],{},"    $p2 = clone $p1;\n",[185,707,709],{"class":187,"line":708},40,[185,710,711],{},"    if ($p1->primitive === $p2->primitive) {\n",[185,713,715],{"class":187,"line":714},41,[185,716,717],{},"        echo \"Primitive alan değerleri klona başarıyla aktarıldı.\\n\";\n",[185,719,721],{"class":187,"line":720},42,[185,722,723],{},"    } else {\n",[185,725,727],{"class":187,"line":726},43,[185,728,729],{},"        echo \"Primitive alanlar kopyalanamadı.\\n\";\n",[185,731,733],{"class":187,"line":732},44,[185,734,269],{},[185,736,738],{"class":187,"line":737},45,[185,739,740],{},"    \n",[185,742,744],{"class":187,"line":743},46,[185,745,746],{},"    if ($p1->component === $p2->component) {\n",[185,748,750],{"class":187,"line":749},47,[185,751,752],{},"        echo \"DateTime nesnesi klonlanamadı (aynı referans).\\n\";\n",[185,754,756],{"class":187,"line":755},48,[185,757,723],{},[185,759,761],{"class":187,"line":760},49,[185,762,763],{},"        echo \"DateTime nesnesi başarıyla klonlandı.\\n\";\n",[185,765,767],{"class":187,"line":766},50,[185,768,269],{},[185,770,772],{"class":187,"line":771},51,[185,773,216],{"emptyLinePlaceholder":215},[185,775,777],{"class":187,"line":776},52,[185,778,779],{},"    if ($p1->circularReference === $p2->circularReference) {\n",[185,781,783],{"class":187,"line":782},53,[185,784,785],{},"        echo \"Döngüsel referanslı nesne klonlanamadı.\\n\";\n",[185,787,789],{"class":187,"line":788},54,[185,790,723],{},[185,792,794],{"class":187,"line":793},55,[185,795,796],{},"        echo \"Döngüsel referanslı nesne başarıyla klonlandı.\\n\";\n",[185,798,800],{"class":187,"line":799},56,[185,801,269],{},[185,803,805],{"class":187,"line":804},57,[185,806,216],{"emptyLinePlaceholder":215},[185,808,810],{"class":187,"line":809},58,[185,811,812],{},"    if ($p1->circularReference->prototype === $p2->circularReference->prototype) {\n",[185,814,816],{"class":187,"line":815},59,[185,817,818],{},"        echo \"Geriye dönük referans hala orijinal nesneyi gösteriyor.\\n\";\n",[185,820,822],{"class":187,"line":821},60,[185,823,723],{},[185,825,827],{"class":187,"line":826},61,[185,828,829],{},"        echo \"Geriye dönük referans yeni klon nesnesini gösteriyor.\\n\";\n",[185,831,833],{"class":187,"line":832},62,[185,834,269],{},[185,836,838],{"class":187,"line":837},63,[185,839,209],{},[185,841,843],{"class":187,"line":842},64,[185,844,216],{"emptyLinePlaceholder":215},[185,846,848],{"class":187,"line":847},65,[185,849,850],{},"clientCode();\n",[508,852,854],{"id":853},"örnek-python-kodu","Örnek Python Kodu",[176,856,860],{"className":857,"code":858,"language":859,"meta":181,"style":181},"language-python shiki shiki-themes github-light github-dark","import copy\nfrom typing import Any, List\n\nclass SelfReferencingEntity:\n    def __init__(self):\n        self.parent = None\n\n    def set_parent(self, parent: Any):\n        self.parent = parent\n\n\nclass SomeComponent:\n    def __init__(self, some_int: int, some_list_of_objects: List, some_circular_ref: Any):\n        self.some_int = some_int\n        self.some_list_of_objects = some_list_of_objects\n        self.some_circular_ref = some_circular_ref\n\n    def __copy__(self) -> SomeComponent:\n        # Sığ kopyalama (Shallow Copy)\n        some_list_of_objects = copy.copy(self.some_list_of_objects)\n        some_circular_ref = copy.copy(self.some_circular_ref)\n\n        new = self.__class__(\n            self.some_int, some_list_of_objects, some_circular_ref\n        )\n        new.__dict__.update(self.__dict__)\n        return new\n\n    def __deepcopy__(self, memo: dict = {}) -> SomeComponent:\n        # Derin kopyalama (Deep Copy)\n        some_list_of_objects = copy.deepcopy(self.some_list_of_objects, memo)\n        some_circular_ref = copy.deepcopy(self.some_circular_ref, memo)\n\n        new = self.__class__(\n            self.some_int, some_list_of_objects, some_circular_ref\n        )\n        new.__dict__ = copy.deepcopy(self.__dict__, memo)\n        return new\n\n\nif __name__ == \"__main__\":\n    list_of_objects = [1, {1, 2, 3}, [1, 2, 3]]\n    circular_ref = SelfReferencingEntity()\n    component = SomeComponent(23, list_of_objects, circular_ref)\n    circular_ref.set_parent(component)\n\n    # 1. Sığ Kopyalama Testi\n    shallow_copied = copy.copy(component)\n    shallow_copied.some_list_of_objects.append(\"another object\")\n    if component.some_list_of_objects[-1] == \"another object\":\n        print(\"Sığ Kopyalama: Referans nesneler ortak paylaşıldı (Normal davranış).\")\n\n    # 2. Derin Kopyalama Testi\n    deep_copied = copy.deepcopy(component)\n    deep_copied.some_list_of_objects.append(\"one more object\")\n    if component.some_list_of_objects[-1] == \"one more object\":\n        print(\"Derin Kopyalama başarısız.\")\n    else:\n        print(\"Derin Kopyalama: Listeler ve içerikler tamamen bağımsızlaştırıldı.\")\n","python",[63,861,862,867,872,876,881,886,891,895,900,905,909,913,918,923,928,933,938,942,947,952,957,962,966,971,976,981,986,991,995,1000,1005,1010,1015,1019,1023,1027,1031,1036,1040,1044,1048,1053,1058,1063,1068,1073,1077,1082,1087,1092,1097,1102,1106,1111,1116,1121,1126,1131,1136],{"__ignoreMap":181},[185,863,864],{"class":187,"line":188},[185,865,866],{},"import copy\n",[185,868,869],{"class":187,"line":194},[185,870,871],{},"from typing import Any, List\n",[185,873,874],{"class":187,"line":200},[185,875,216],{"emptyLinePlaceholder":215},[185,877,878],{"class":187,"line":206},[185,879,880],{},"class SelfReferencingEntity:\n",[185,882,883],{"class":187,"line":212},[185,884,885],{},"    def __init__(self):\n",[185,887,888],{"class":187,"line":219},[185,889,890],{},"        self.parent = None\n",[185,892,893],{"class":187,"line":225},[185,894,216],{"emptyLinePlaceholder":215},[185,896,897],{"class":187,"line":231},[185,898,899],{},"    def set_parent(self, parent: Any):\n",[185,901,902],{"class":187,"line":237},[185,903,904],{},"        self.parent = parent\n",[185,906,907],{"class":187,"line":243},[185,908,216],{"emptyLinePlaceholder":215},[185,910,911],{"class":187,"line":248},[185,912,216],{"emptyLinePlaceholder":215},[185,914,915],{"class":187,"line":254},[185,916,917],{},"class SomeComponent:\n",[185,919,920],{"class":187,"line":260},[185,921,922],{},"    def __init__(self, some_int: int, some_list_of_objects: List, some_circular_ref: Any):\n",[185,924,925],{"class":187,"line":266},[185,926,927],{},"        self.some_int = some_int\n",[185,929,930],{"class":187,"line":272},[185,931,932],{},"        self.some_list_of_objects = some_list_of_objects\n",[185,934,935],{"class":187,"line":277},[185,936,937],{},"        self.some_circular_ref = some_circular_ref\n",[185,939,940],{"class":187,"line":283},[185,941,216],{"emptyLinePlaceholder":215},[185,943,944],{"class":187,"line":289},[185,945,946],{},"    def __copy__(self) -> SomeComponent:\n",[185,948,949],{"class":187,"line":294},[185,950,951],{},"        # Sığ kopyalama (Shallow Copy)\n",[185,953,954],{"class":187,"line":299},[185,955,956],{},"        some_list_of_objects = copy.copy(self.some_list_of_objects)\n",[185,958,959],{"class":187,"line":305},[185,960,961],{},"        some_circular_ref = copy.copy(self.some_circular_ref)\n",[185,963,964],{"class":187,"line":310},[185,965,216],{"emptyLinePlaceholder":215},[185,967,968],{"class":187,"line":315},[185,969,970],{},"        new = self.__class__(\n",[185,972,973],{"class":187,"line":320},[185,974,975],{},"            self.some_int, some_list_of_objects, some_circular_ref\n",[185,977,978],{"class":187,"line":326},[185,979,980],{},"        )\n",[185,982,983],{"class":187,"line":332},[185,984,985],{},"        new.__dict__.update(self.__dict__)\n",[185,987,988],{"class":187,"line":338},[185,989,990],{},"        return new\n",[185,992,993],{"class":187,"line":344},[185,994,216],{"emptyLinePlaceholder":215},[185,996,997],{"class":187,"line":350},[185,998,999],{},"    def __deepcopy__(self, memo: dict = {}) -> SomeComponent:\n",[185,1001,1002],{"class":187,"line":355},[185,1003,1004],{},"        # Derin kopyalama (Deep Copy)\n",[185,1006,1007],{"class":187,"line":657},[185,1008,1009],{},"        some_list_of_objects = copy.deepcopy(self.some_list_of_objects, memo)\n",[185,1011,1012],{"class":187,"line":662},[185,1013,1014],{},"        some_circular_ref = copy.deepcopy(self.some_circular_ref, memo)\n",[185,1016,1017],{"class":187,"line":668},[185,1018,216],{"emptyLinePlaceholder":215},[185,1020,1021],{"class":187,"line":673},[185,1022,970],{},[185,1024,1025],{"class":187,"line":679},[185,1026,975],{},[185,1028,1029],{"class":187,"line":685},[185,1030,980],{},[185,1032,1033],{"class":187,"line":691},[185,1034,1035],{},"        new.__dict__ = copy.deepcopy(self.__dict__, memo)\n",[185,1037,1038],{"class":187,"line":697},[185,1039,990],{},[185,1041,1042],{"class":187,"line":702},[185,1043,216],{"emptyLinePlaceholder":215},[185,1045,1046],{"class":187,"line":708},[185,1047,216],{"emptyLinePlaceholder":215},[185,1049,1050],{"class":187,"line":714},[185,1051,1052],{},"if __name__ == \"__main__\":\n",[185,1054,1055],{"class":187,"line":720},[185,1056,1057],{},"    list_of_objects = [1, {1, 2, 3}, [1, 2, 3]]\n",[185,1059,1060],{"class":187,"line":726},[185,1061,1062],{},"    circular_ref = SelfReferencingEntity()\n",[185,1064,1065],{"class":187,"line":732},[185,1066,1067],{},"    component = SomeComponent(23, list_of_objects, circular_ref)\n",[185,1069,1070],{"class":187,"line":737},[185,1071,1072],{},"    circular_ref.set_parent(component)\n",[185,1074,1075],{"class":187,"line":743},[185,1076,216],{"emptyLinePlaceholder":215},[185,1078,1079],{"class":187,"line":749},[185,1080,1081],{},"    # 1. Sığ Kopyalama Testi\n",[185,1083,1084],{"class":187,"line":755},[185,1085,1086],{},"    shallow_copied = copy.copy(component)\n",[185,1088,1089],{"class":187,"line":760},[185,1090,1091],{},"    shallow_copied.some_list_of_objects.append(\"another object\")\n",[185,1093,1094],{"class":187,"line":766},[185,1095,1096],{},"    if component.some_list_of_objects[-1] == \"another object\":\n",[185,1098,1099],{"class":187,"line":771},[185,1100,1101],{},"        print(\"Sığ Kopyalama: Referans nesneler ortak paylaşıldı (Normal davranış).\")\n",[185,1103,1104],{"class":187,"line":776},[185,1105,216],{"emptyLinePlaceholder":215},[185,1107,1108],{"class":187,"line":782},[185,1109,1110],{},"    # 2. Derin Kopyalama Testi\n",[185,1112,1113],{"class":187,"line":788},[185,1114,1115],{},"    deep_copied = copy.deepcopy(component)\n",[185,1117,1118],{"class":187,"line":793},[185,1119,1120],{},"    deep_copied.some_list_of_objects.append(\"one more object\")\n",[185,1122,1123],{"class":187,"line":799},[185,1124,1125],{},"    if component.some_list_of_objects[-1] == \"one more object\":\n",[185,1127,1128],{"class":187,"line":804},[185,1129,1130],{},"        print(\"Derin Kopyalama başarısız.\")\n",[185,1132,1133],{"class":187,"line":809},[185,1134,1135],{},"    else:\n",[185,1137,1138],{"class":187,"line":815},[185,1139,1140],{},"        print(\"Derin Kopyalama: Listeler ve içerikler tamamen bağımsızlaştırıldı.\")\n",[87,1142],{},[90,1144,1146],{"id":1145},"sıkça-sorulan-sorular-faq","Sıkça Sorulan Sorular (FAQ)",[508,1148,1150],{"id":1149},"shallow-copy-sığ-kopyalama-ile-deep-copy-derin-kopyalama-arasındaki-fark-nedir","Shallow Copy (Sığ Kopyalama) ile Deep Copy (Derin Kopyalama) arasındaki fark nedir?",[47,1152,1153,1159],{},[50,1154,1155,1158],{},[43,1156,1157],{},"Shallow Copy (Sığ Kopyalama):"," Sadece nesnenin en üst seviye alanlarını kopyalar. Eğer nesnenin içinde başka nesne referansları varsa, klon nesne de aynı referans adreslerini gösterir. İçerideki nesnede yapılan bir değişiklik klon nesneyi de etkiler.",[50,1160,1161,1164],{},[43,1162,1163],{},"Deep Copy (Derin Kopyalama):"," Nesnenin içindeki tüm referans nesneleri de özyinelemeli (recursive) olarak kopyalar. Klon nesne ile orijinal nesne bellek seviyesinde tamamen birbirinden bağımsız hale gelir.",[508,1166,1168],{"id":1167},"prototype-registry-prototip-kayıt-defteri-nedir-ve-ne-zaman-kullanılmalıdır","Prototype Registry (Prototip Kayıt Defteri) nedir ve ne zaman kullanılmalıdır?",[11,1170,1171,1172,1175,1176,1179,1180,1183],{},"Eğer uygulamanızda çok sık kullanılan ve çeşitli yapılandırmalara sahip prototipleriniz varsa, bunları yönetmek için bir ",[43,1173,1174],{},"Prototype Registry"," (Prototip Havuzu \u002F Kayıt Defteri) oluşturabilirsiniz. Bu havuz genellikle anahtar-değer (key-value) şeklinde çalışan bir cache yapısıdır (örn: ",[63,1177,1178],{},"Map","). İstemciler ",[63,1181,1182],{},"Registry.get(\"RedButtonPrototype\")"," gibi çağrılarla önceden yapılandırılmış prototiplere kolayca erişip onları klonlayabilir.",[508,1185,1187],{"id":1186},"javascripttypescriptteki-prototype-yapısı-bu-desenle-mi-ilgilidir","JavaScript\u002FTypeScript'teki prototype yapısı bu desenle mi ilgilidir?",[11,1189,1190,1191,1194,1195,1198],{},"Evet, doğrudan ilgilidir. JavaScript sınıf tabanlı (class-based) kalıtım yerine ",[43,1192,1193],{},"prototip tabanlı (prototypal inheritance)"," bir kalıtım modeli kullanır. JavaScript'te her nesnenin gizli bir ",[63,1196,1197],{},"[[Prototype]]"," referansı vardır. Bir nesnenin bir özelliğine erişilmek istendiğinde, özellik nesnede yoksa otomatik olarak prototip nesnesine sorulur. Bu, Prototype deseninin dil mimarisi düzeyinde uygulanmış halidir.",[87,1200],{},[90,1202,1204],{"id":1203},"diğer-tasarım-kalıplarıdesign-patterns","Diğer Tasarım Kalıpları\u002FDesign Patterns",[11,1206,1207],{},[43,1208,1209],{},"Oluşumsal Kalıplar (Creational Patterns)",[11,1211,1212,1215,1216,1215,1219,1215,1222,1215,1225],{},[15,1213,409],{"href":1214},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir",",\n",[15,1217,425],{"href":1218},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir",[15,1220,495],{"href":1221},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir",[15,1223,65],{"href":1224},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir",[15,1226,499],{"href":1227},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir",[11,1229,1230],{},[43,1231,1232],{},"Yapısal Kalıplar (Structural Patterns)",[11,1234,1235,1215,1239,1215,1243,1215,1246,1215,1249,1215,1253,1215,1257],{},[15,1236,1238],{"href":1237},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter",[15,1240,1242],{"href":1241},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge",[15,1244,475],{"href":1245},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir",[15,1247,479],{"href":1248},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir",[15,1250,1252],{"href":1251},"\u002Ftr\u002Ffacade-tasarim-deseni-nedir","Facade",[15,1254,1256],{"href":1255},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight",[15,1258,1260],{"href":1259},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy",[11,1262,1263],{},[43,1264,1265],{},"Davranışsal Kalıplar (Behavioral Patterns)",[11,1267,1268,1215,1272,1215,1276,1215,1280,1215,1284,1215,1287,1215,1291,1215,1295,1215,1299,1215,1303],{},[15,1269,1271],{"href":1270},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility",[15,1273,1275],{"href":1274},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command",[15,1277,1279],{"href":1278},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator",[15,1281,1283],{"href":1282},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator",[15,1285,486],{"href":1286},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir",[15,1288,1290],{"href":1289},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer",[15,1292,1294],{"href":1293},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State",[15,1296,1298],{"href":1297},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy",[15,1300,1302],{"href":1301},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir","Template Method",[15,1304,1306],{"href":1305},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor",[1308,1309,1310],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":181,"searchDepth":194,"depth":194,"links":1312},[1313,1314,1315,1316,1317,1318,1319,1320,1324,1329],{"id":92,"depth":194,"text":93},{"id":103,"depth":194,"text":104},{"id":141,"depth":194,"text":142},{"id":170,"depth":194,"text":171},{"id":362,"depth":194,"text":363},{"id":438,"depth":194,"text":439},{"id":458,"depth":194,"text":459},{"id":505,"depth":194,"text":506,"children":1321},[1322,1323],{"id":510,"depth":200,"text":511},{"id":853,"depth":200,"text":854},{"id":1145,"depth":194,"text":1146,"children":1325},[1326,1327,1328],{"id":1149,"depth":200,"text":1150},{"id":1167,"depth":200,"text":1168},{"id":1186,"depth":200,"text":1187},{"id":1203,"depth":194,"text":1204},[1331],"technical",null,"2021-08-16","Prototype (Prototip\u002FKlon) tasarım kalıbını, shallow\u002Fdeep copy farklarını, şablon klonlama senaryolarını ve PHP\u002FPython örneklerini öğrenin.",false,"md","\u002Fimages\u002Fposts\u002F2021\u002F08\u002Fprototype.avif",{},{"title":6,"description":1334},"prototype-tasarim-deseni-nedir","tr\u002Fprototype-tasarim-deseni-nedir",[1343,1344],"design-pattern","ipucu","6sDDG_LwKbsZ3xmfTinPIDGg0tBc5McSY1KF1IvZBKY",{"prev":1347,"next":1349,"others":1351,"lucky":1462,"readingTime":219},{"path":1227,"title":1348},"Singleton Tasarım Deseni Nedir?",{"path":1221,"title":1350},"Builder Tasarım Deseni Nedir?",[1352,1355,1358,1361,1364,1367,1370,1373,1376,1379,1381,1384,1386,1389,1392,1395,1397,1400,1403,1406,1408,1411,1414,1417,1418,1420,1422,1425,1428,1431,1433,1436,1438,1441,1444,1447,1450,1453,1456,1459],{"path":1353,"title":1354},"\u002Ftr\u002Fgraylog-nedir-docker-ile-nasil-kurulur","Graylog Nedir? Docker Compose ile Adım Adım Kurulum Rehberi",{"path":1356,"title":1357},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":1359,"title":1360},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu",{"path":1362,"title":1363},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri",{"path":1365,"title":1366},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir","ES13 nedir? ECMAScript 2022 nedir?",{"path":1368,"title":1369},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":1371,"title":1372},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?",{"path":1374,"title":1375},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map",{"path":1377,"title":1378},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler",{"path":1241,"title":1380},"Bridge Tasarım Deseni Nedir?",{"path":1382,"title":1383},"\u002Ftr\u002Fdocker-ile-redis-kurulumu","Docker ile Redis Kurulumu",{"path":1286,"title":1385},"Memento Tasarım Deseni Nedir?",{"path":1387,"title":1388},"\u002Ftr\u002Faws-ec2-uzerinde-docker-ve-full-stack-web-performansi","AWS EC2 Üzerinde Docker ve Full Stack Web Performansı",{"path":1390,"title":1391},"\u002Ftr\u002Fjwt-guvenli-mi-guvenlik-acigi-olusturmayin","JWT Güvenli Derken Güvenlik Açığı Oluşturmayın",{"path":1393,"title":1394},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",{"path":1274,"title":1396},"Command Tasarım Deseni Nedir?",{"path":1398,"title":1399},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":1401,"title":1402},"\u002Ftr\u002Fgo-ve-degiskenler","Go ve Değişkenler",{"path":1404,"title":1405},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":1278,"title":1407},"Iterator Tasarım Deseni Nedir?",{"path":1409,"title":1410},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1412,"title":1413},"\u002Ftr\u002Frest-api-tasarimi","REST API Tasarım İncelikleri",{"path":1415,"title":1416},"\u002Ftr\u002Fes7-nedir-ecmascript-2016-nedir","ES7 Nedir? ECMAScript 2016 Nedir?",{"path":1227,"title":1348},{"path":1237,"title":1419},"Adapter Tasarım Deseni Nedir?",{"path":1251,"title":1421},"Facade Tasarım Deseni Nedir?",{"path":1423,"title":1424},"\u002Ftr\u002Fdigital-oceanda-vps-kurulumu","DigitalOcean'da VPS (Droplet) Kurulumu: Adım Adım Rehber",{"path":1426,"title":1427},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1429,"title":1430},"\u002Ftr\u002Frest-api-kimlik-dogrulama-nasil-yapilir","REST API Kimlik Doğrulama Nasıl Yapılır?",{"path":1305,"title":1432},"Visitor Tasarım Deseni Nedir?",{"path":1434,"title":1435},"\u002Ftr\u002Fyeni-tema-honeywind","Yeni WordPress Temam Honeywind: Tailwind CSS ve Minimalizm",{"path":1255,"title":1437},"Flyweight Tasarım Deseni Nedir?",{"path":1439,"title":1440},"\u002Ftr\u002Fmerhaba-gluster","Merhaba Gluster: Dağıtık Dosya Sistemi Nedir?",{"path":1442,"title":1443},"\u002Ftr\u002Frest-api-hata-yonetimi","REST Api Hata Yönetimi",{"path":1445,"title":1446},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?",{"path":1448,"title":1449},"\u002Ftr\u002Fself-hosted-api-gateway-nasil-kurulur-kapsamli-rehber","Self-Hosted API Gateway Nasıl Kurulur? Kapsamlı Rehber",{"path":1451,"title":1452},"\u002Ftr\u002Fmerhaba-tailwind-css","Merhaba Tailwind CSS",{"path":1454,"title":1455},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu",{"path":1457,"title":1458},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","RestApi ve HATEOAS Kavramı",{"path":1460,"title":1461},"\u002Ftr\u002Fmerhaba-phalcon-framework","Merhaba Phalcon Framework",{"path":1463,"title":1464},"\u002Ftr\u002Fnext-js-on-bellegi-nasil-yenilenir-on-demand-cache-regeneration","Next.js Önbelleği Nasıl Yenilenir? \"On-Demand Cache Regeneration\"",[1466,1468,1471,1474],{"path":1305,"title":1432,"date":1467},"2021-10-09",{"path":1301,"title":1469,"date":1470},"Template Method Tasarım Deseni Nedir?","2021-10-08",{"path":1297,"title":1472,"date":1473},"Strategy Tasarım Deseni Nedir?","2021-10-07",{"path":1293,"title":1475,"date":1476},"State Tasarım Deseni Nedir?","2021-10-06",[1478,1482,1486],{"path":1479,"title":1480,"date":1481},"\u002Ftr\u002Fmerhabadunya","Merhaba Dünya","2020-12-07",{"path":1483,"title":1484,"date":1485},"\u002Ftr\u002Fjavascriptde-moduller","JavaScript'te Modüller","2020-12-11",{"path":1487,"title":1488,"date":1489},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?","2026-06-20",1782142067076]