[{"data":1,"prerenderedAt":1560},["ShallowReactive",2],{"post-\u002Ftr\u002Fiterator-tasarim-deseni-nedir":3},{"page":4,"translation":1410,"nav":1424,"related":1540,"random":1551},{"id":5,"title":6,"body":7,"categories":1408,"category":1410,"date":1411,"description":1412,"draft":1413,"extension":1414,"image":1415,"kind":1410,"lang":413,"meta":1416,"navigation":216,"path":1357,"readingTime":220,"seo":1417,"slug":1418,"stem":1419,"tags":1420,"translationKey":1410,"type":1409,"updated":1410,"__hash__":1423},"postsTr\u002Ftr\u002Fiterator-tasarim-deseni-nedir.md","Iterator Tasarım Deseni Nedir?",{"type":8,"value":9,"toc":1388},"minimark",[10,20,33,36,90,93,98,103,105,109,112,119,122,128,131,133,137,143,149,156,167,169,173,176,400,402,406,468,470,474,494,496,500,525,527,531,536,965,969,1212,1214,1218,1222,1233,1241,1251,1255,1273,1275,1279,1284,1306,1311,1340,1345,1384],[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,79],"ul",{},[50,51,52,55],"li",{},[43,53,54],{},"Amaç:"," Bir koleksiyonun (list, tree, graph vb.) iç yapısını ve elemanları nasıl sakladığını ifşa etmeden, elemanları üzerinde sırayla dolaşmayı sağlar.",[50,57,58,61,62,66,67,70,71,74,75,78],{},[43,59,60],{},"Kilit Yapılar:"," Iterator Arayüzü (",[63,64,65],"code",{},"Iterator","), Somut Iterator (",[63,68,69],{},"ConcreteIterator","), Koleksiyon Arayüzü (",[63,72,73],{},"IterableCollection","), Somut Koleksiyon (",[63,76,77],{},"ConcreteCollection",").",[50,80,81,84,85,89],{},[43,82,83],{},"Motto:"," ",[86,87,88],"em",{},"Access elements sequentially without exposing representation"," (Yapıyı ifşa etmeden sırayla eriş).",[91,92],"hr",{},[94,95,97],"h2",{"id":96},"iterator-tasarım-deseninin-amacı","Iterator Tasarım Deseninin Amacı",[11,99,100,102],{},[43,101,65],{}," (Yineleyici), bir koleksiyonun (koleksiyon yapısının detaylarını bilmeden) öğelerini sırayla gezebilmenizi sağlayan davranışsal (behavioral) bir tasarım desenidir.",[91,104],{},[94,106,108],{"id":107},"sorun","Sorun",[11,110,111],{},"Koleksiyonlar yazılımda en sık kullanılan veri yapılarıdır. Birçoğu elemanları basit bir listede (array) tutarken; bazıları yığın (stack), ağaç (tree) veya karmaşık grafik (graph) yapılarında saklayabilir.",[11,113,114],{},[115,116],"img",{"alt":117,"src":118},"Programlamada koleksiyonlar","\u002Fimages\u002Fiterator-tasarim-deseni-nedir\u002Fprogramlamada-koleksiyonlar.avif",[11,120,121],{},"Koleksiyonun yapısı ne olursa olsun, istemci kodun (client code) bu elemanlara erişebilmesi gerekir. Ancak karmaşık yapılarda elemanların üzerinden nasıl geçileceği büyük bir sorudur. Örneğin bir departman ağacında dolaşırken önce dikey mi (DFS - Depth-First Search) yoksa yatay mı (BFS - Breadth-First Search) ilerlemeliyiz?",[11,123,124],{},[115,125],{"alt":126,"src":127},"Iterator deseni örneği","\u002Fimages\u002Fiterator-tasarim-deseni-nedir\u002Fiterator-deseni-ornegi.avif",[11,129,130],{},"Bu dolaşım algoritmalarını doğrudan koleksiyon sınıfının içine eklemek, koleksiyonun asıl görevi olan \"veri depolama\" sorumluluğunun dışına çıkmasına (Single Responsibility ihlali) ve sınıfın şişmesine yol açar. Ayrıca istemci kod, koleksiyonun iç yapısına sıkı sıkıya bağımlı (tightly coupled) hale gelir.",[91,132],{},[94,134,136],{"id":135},"çözüm","Çözüm",[11,138,139,140,142],{},"Iterator deseni, koleksiyonun dolaşımla ilgili davranışlarını alarak ",[43,141,65],{}," adı verilen ayrı bir nesneye yüklemeyi önerir.",[11,144,145],{},[115,146],{"alt":147,"src":148},"Iterator deseni nedir","\u002Fimages\u002Fiterator-tasarim-deseni-nedir\u002Fiterator-deseni-nasil-calisir.avif",[11,150,151,152,155],{},"Iterator nesnesi sadece dolaşım algoritmasını içermekle kalmaz; o anki pozisyon, kalan eleman sayısı gibi durum (state) bilgilerini de kendi üzerinde saklar. Bu sayede, aynı koleksiyon üzerinde ",[43,153,154],{},"birden fazla iterator bağımsız olarak"," ve aynı anda dolaşım yapabilir.",[11,157,158,159,162,163,166],{},"Genellikle tüm iteratorler ",[63,160,161],{},"next()"," (sonraki elemanı ver) ve ",[63,164,165],{},"hasMore()"," (başka eleman kaldı mı) gibi ortak bir arayüzü uygular. Böylece istemci kod, dolaştığı koleksiyonun ağaç mı, liste mi yoksa grafik mi olduğunu bilmek zorunda kalmaz.",[91,168],{},[94,170,172],{"id":171},"gerçek-hayat-senaryosu-departman-ve-çalışan-ağacı-dolaşımı","Gerçek Hayat Senaryosu: Departman ve Çalışan Ağacı Dolaşımı",[11,174,175],{},"Bir şirketin departman hiyerarşisinde derinlemesine (dikey) çalışan araması yapan basit bir PHP iterasyon kurgusu:",[177,178,183],"pre",{"className":179,"code":180,"language":181,"meta":182,"style":182},"language-php shiki shiki-themes github-light github-dark","\u002F\u002F 1. Employee ve Collection Yapısı\nclass Employee {\n    public string $name;\n    public string $role;\n\n    public function __construct(string $name, string $role) {\n        $this->name = $name;\n        $this->role = $role;\n    }\n}\n\n\u002F\u002F 2. Iterator Arayüzü\ninterface EmployeeIterator {\n    public function getNext(): ?Employee;\n    public function hasMore(): bool;\n}\n\n\u002F\u002F 3. Somut Iterator\nclass DepartmentIterator implements EmployeeIterator {\n    private array $employees;\n    private int $position = 0;\n\n    public function __construct(array $employees) {\n        $this->employees = $employees;\n    }\n\n    public function getNext(): ?Employee {\n        if ($this->hasMore()) {\n            return $this->employees[$this->position++];\n        }\n        return null;\n    }\n\n    public function hasMore(): bool {\n        return $this->position \u003C count($this->employees);\n    }\n}\n","php","",[63,184,185,193,199,205,211,218,224,230,236,242,248,253,259,265,271,277,282,287,293,299,305,311,316,322,328,333,338,344,350,356,362,368,373,378,384,390,395],{"__ignoreMap":182},[186,187,190],"span",{"class":188,"line":189},"line",1,[186,191,192],{},"\u002F\u002F 1. Employee ve Collection Yapısı\n",[186,194,196],{"class":188,"line":195},2,[186,197,198],{},"class Employee {\n",[186,200,202],{"class":188,"line":201},3,[186,203,204],{},"    public string $name;\n",[186,206,208],{"class":188,"line":207},4,[186,209,210],{},"    public string $role;\n",[186,212,214],{"class":188,"line":213},5,[186,215,217],{"emptyLinePlaceholder":216},true,"\n",[186,219,221],{"class":188,"line":220},6,[186,222,223],{},"    public function __construct(string $name, string $role) {\n",[186,225,227],{"class":188,"line":226},7,[186,228,229],{},"        $this->name = $name;\n",[186,231,233],{"class":188,"line":232},8,[186,234,235],{},"        $this->role = $role;\n",[186,237,239],{"class":188,"line":238},9,[186,240,241],{},"    }\n",[186,243,245],{"class":188,"line":244},10,[186,246,247],{},"}\n",[186,249,251],{"class":188,"line":250},11,[186,252,217],{"emptyLinePlaceholder":216},[186,254,256],{"class":188,"line":255},12,[186,257,258],{},"\u002F\u002F 2. Iterator Arayüzü\n",[186,260,262],{"class":188,"line":261},13,[186,263,264],{},"interface EmployeeIterator {\n",[186,266,268],{"class":188,"line":267},14,[186,269,270],{},"    public function getNext(): ?Employee;\n",[186,272,274],{"class":188,"line":273},15,[186,275,276],{},"    public function hasMore(): bool;\n",[186,278,280],{"class":188,"line":279},16,[186,281,247],{},[186,283,285],{"class":188,"line":284},17,[186,286,217],{"emptyLinePlaceholder":216},[186,288,290],{"class":188,"line":289},18,[186,291,292],{},"\u002F\u002F 3. Somut Iterator\n",[186,294,296],{"class":188,"line":295},19,[186,297,298],{},"class DepartmentIterator implements EmployeeIterator {\n",[186,300,302],{"class":188,"line":301},20,[186,303,304],{},"    private array $employees;\n",[186,306,308],{"class":188,"line":307},21,[186,309,310],{},"    private int $position = 0;\n",[186,312,314],{"class":188,"line":313},22,[186,315,217],{"emptyLinePlaceholder":216},[186,317,319],{"class":188,"line":318},23,[186,320,321],{},"    public function __construct(array $employees) {\n",[186,323,325],{"class":188,"line":324},24,[186,326,327],{},"        $this->employees = $employees;\n",[186,329,331],{"class":188,"line":330},25,[186,332,241],{},[186,334,336],{"class":188,"line":335},26,[186,337,217],{"emptyLinePlaceholder":216},[186,339,341],{"class":188,"line":340},27,[186,342,343],{},"    public function getNext(): ?Employee {\n",[186,345,347],{"class":188,"line":346},28,[186,348,349],{},"        if ($this->hasMore()) {\n",[186,351,353],{"class":188,"line":352},29,[186,354,355],{},"            return $this->employees[$this->position++];\n",[186,357,359],{"class":188,"line":358},30,[186,360,361],{},"        }\n",[186,363,365],{"class":188,"line":364},31,[186,366,367],{},"        return null;\n",[186,369,371],{"class":188,"line":370},32,[186,372,241],{},[186,374,376],{"class":188,"line":375},33,[186,377,217],{"emptyLinePlaceholder":216},[186,379,381],{"class":188,"line":380},34,[186,382,383],{},"    public function hasMore(): bool {\n",[186,385,387],{"class":188,"line":386},35,[186,388,389],{},"        return $this->position \u003C count($this->employees);\n",[186,391,393],{"class":188,"line":392},36,[186,394,241],{},[186,396,398],{"class":188,"line":397},37,[186,399,247],{},[91,401],{},[94,403,405],{"id":404},"iterator-vs-visitor","Iterator vs Visitor",[407,408,409,425],"table",{},[410,411,412],"thead",{},[413,414,415,420,422],"tr",{},[416,417,419],"th",{"align":418},"left","Kriter",[416,421,65],{"align":418},[416,423,424],{"align":418},"Visitor",[426,427,428,442,455],"tbody",{},[413,429,430,436,439],{},[431,432,433],"td",{"align":418},[43,434,435],{},"Ana Amaç",[431,437,438],{"align":418},"Koleksiyon elemanları üzerinde sırayla geçiş (traversal) sağlamak.",[431,440,441],{"align":418},"Nesne yapısını değiştirmeden elemanlar üzerinde yeni işlemler gerçekleştirmek.",[413,443,444,449,452],{},[431,445,446],{"align":418},[43,447,448],{},"Durum Yönetimi",[431,450,451],{"align":418},"Dolaşım durumunu (pozisyon vb.) kendi içinde saklar.",[431,453,454],{"align":418},"Durum saklamaz, sadece elemanları ziyaret edip işlem tetikler.",[413,456,457,462,465],{},[431,458,459],{"align":418},[43,460,461],{},"Uygulama Alanı",[431,463,464],{"align":418},"Benzer tipten oluşan veri koleksiyonlarında yaygındır.",[431,466,467],{"align":418},"Farklı sınıflardan oluşan heterojen nesne yapılarında kullanılır.",[91,469],{},[94,471,473],{"id":472},"uygulanabilirlik","Uygulanabilirlik",[47,475,476,482,488],{},[50,477,478,481],{},[43,479,480],{},"Karmaşık İç Yapıyı Gizlemek:"," Koleksiyonunuzun karmaşık bir veri yapısı varsa (ağaçlar, grafikler) ve bunu istemci koda yansıtmak istemiyorsanız kullanın.",[50,483,484,487],{},[43,485,486],{},"Kod Tekrarını Önlemek:"," Farklı yerlerde tekrarlanan dolaşım (traversal) kodlarını tek bir sınıfta toplamak için kullanın.",[50,489,490,493],{},[43,491,492],{},"Polimorfik Dolaşım:"," İstemci kodun farklı veri yapıları (listeler, kuyruklar, ağaçlar) üzerinde aynı arayüz ile dolaşabilmesini istediğinizde kullanın.",[91,495],{},[94,497,499],{"id":498},"diğer-tasarım-desenleri-ile-i̇lişkisi","Diğer Tasarım Desenleri ile İlişkisi",[47,501,502,511,518],{},[50,503,504,507,508,510],{},[43,505,506],{},"Composite"," ağaç yapılarında dolaşmak için ",[43,509,65],{}," deseni kullanılır.",[50,512,513,514,517],{},"Koleksiyonların kendi tiplerine uygun iteratörler üretebilmesi için ",[43,515,516],{},"Factory Method"," deseninden yararlanılabilir.",[50,519,520,521,524],{},"Dolaşım durumunu kaydedip gerektiğinde o ana geri dönebilmek (rollback) için ",[43,522,523],{},"Memento"," ve Iterator birlikte kurgulanabilir.",[91,526],{},[94,528,530],{"id":529},"iterator-tasarım-deseni-kod-örnekleri","Iterator Tasarım Deseni Kod Örnekleri",[532,533,535],"h3",{"id":534},"örnek-php-kodu","Örnek PHP Kodu",[177,537,539],{"className":179,"code":538,"language":181,"meta":182,"style":182},"\u003C?php\n\nnamespace RefactoringGuru\\Iterator\\Conceptual;\n\nclass AlphabeticalOrderIterator implements \\Iterator\n{\n    private WordsCollection $collection;\n    private int $position = 0;\n    private bool $reverse = false;\n\n    public function __construct(WordsCollection $collection, bool $reverse = false)\n    {\n        $this->collection = $collection;\n        $this->reverse = $reverse;\n    }\n\n    public function rewind(): void\n    {\n        $this->position = $this->reverse ?\n            count($this->collection->getItems()) - 1 : 0;\n    }\n\n    #[\\ReturnTypeWillChange]\n    public function current()\n    {\n        return $this->collection->getItems()[$this->position];\n    }\n\n    #[\\ReturnTypeWillChange]\n    public function key()\n    {\n        return $this->position;\n    }\n\n    public function next(): void\n    {\n        $this->position = $this->position + ($this->reverse ? -1 : 1);\n    }\n\n    public function valid(): bool\n    {\n        return isset($this->collection->getItems()[$this->position]);\n    }\n}\n\nclass WordsCollection implements \\IteratorAggregate\n{\n    private array $items = [];\n\n    public function getItems(): array\n    {\n        return $this->items;\n    }\n\n    public function addItem(string $item): void\n    {\n        $this->items[] = $item;\n    }\n\n    public function getIterator(): \\Iterator\n    {\n        return new AlphabeticalOrderIterator($this);\n    }\n\n    public function getReverseIterator(): \\Iterator\n    {\n        return new AlphabeticalOrderIterator($this, true);\n    }\n}\n\n$collection = new WordsCollection();\n$collection->addItem(\"Birinci\");\n$collection->addItem(\"İkinci\");\n$collection->addItem(\"Üçüncü\");\n\necho \"Düz Dolaşım:\\n\";\nforeach ($collection->getIterator() as $item) {\n    echo $item . \"\\n\";\n}\n\necho \"\\nTers Dolaşım:\\n\";\nforeach ($collection->getReverseIterator() as $item) {\n    echo $item . \"\\n\";\n}\n",[63,540,541,546,550,555,559,564,569,574,578,583,587,592,597,602,607,611,615,620,624,629,634,638,642,647,652,656,661,665,669,673,678,682,687,691,695,700,704,709,714,719,725,730,736,741,746,751,757,762,768,773,779,784,790,795,800,806,811,817,822,827,833,838,844,849,854,860,865,871,876,881,886,892,898,904,910,915,921,927,933,938,943,949,955,960],{"__ignoreMap":182},[186,542,543],{"class":188,"line":189},[186,544,545],{},"\u003C?php\n",[186,547,548],{"class":188,"line":195},[186,549,217],{"emptyLinePlaceholder":216},[186,551,552],{"class":188,"line":201},[186,553,554],{},"namespace RefactoringGuru\\Iterator\\Conceptual;\n",[186,556,557],{"class":188,"line":207},[186,558,217],{"emptyLinePlaceholder":216},[186,560,561],{"class":188,"line":213},[186,562,563],{},"class AlphabeticalOrderIterator implements \\Iterator\n",[186,565,566],{"class":188,"line":220},[186,567,568],{},"{\n",[186,570,571],{"class":188,"line":226},[186,572,573],{},"    private WordsCollection $collection;\n",[186,575,576],{"class":188,"line":232},[186,577,310],{},[186,579,580],{"class":188,"line":238},[186,581,582],{},"    private bool $reverse = false;\n",[186,584,585],{"class":188,"line":244},[186,586,217],{"emptyLinePlaceholder":216},[186,588,589],{"class":188,"line":250},[186,590,591],{},"    public function __construct(WordsCollection $collection, bool $reverse = false)\n",[186,593,594],{"class":188,"line":255},[186,595,596],{},"    {\n",[186,598,599],{"class":188,"line":261},[186,600,601],{},"        $this->collection = $collection;\n",[186,603,604],{"class":188,"line":267},[186,605,606],{},"        $this->reverse = $reverse;\n",[186,608,609],{"class":188,"line":273},[186,610,241],{},[186,612,613],{"class":188,"line":279},[186,614,217],{"emptyLinePlaceholder":216},[186,616,617],{"class":188,"line":284},[186,618,619],{},"    public function rewind(): void\n",[186,621,622],{"class":188,"line":289},[186,623,596],{},[186,625,626],{"class":188,"line":295},[186,627,628],{},"        $this->position = $this->reverse ?\n",[186,630,631],{"class":188,"line":301},[186,632,633],{},"            count($this->collection->getItems()) - 1 : 0;\n",[186,635,636],{"class":188,"line":307},[186,637,241],{},[186,639,640],{"class":188,"line":313},[186,641,217],{"emptyLinePlaceholder":216},[186,643,644],{"class":188,"line":318},[186,645,646],{},"    #[\\ReturnTypeWillChange]\n",[186,648,649],{"class":188,"line":324},[186,650,651],{},"    public function current()\n",[186,653,654],{"class":188,"line":330},[186,655,596],{},[186,657,658],{"class":188,"line":335},[186,659,660],{},"        return $this->collection->getItems()[$this->position];\n",[186,662,663],{"class":188,"line":340},[186,664,241],{},[186,666,667],{"class":188,"line":346},[186,668,217],{"emptyLinePlaceholder":216},[186,670,671],{"class":188,"line":352},[186,672,646],{},[186,674,675],{"class":188,"line":358},[186,676,677],{},"    public function key()\n",[186,679,680],{"class":188,"line":364},[186,681,596],{},[186,683,684],{"class":188,"line":370},[186,685,686],{},"        return $this->position;\n",[186,688,689],{"class":188,"line":375},[186,690,241],{},[186,692,693],{"class":188,"line":380},[186,694,217],{"emptyLinePlaceholder":216},[186,696,697],{"class":188,"line":386},[186,698,699],{},"    public function next(): void\n",[186,701,702],{"class":188,"line":392},[186,703,596],{},[186,705,706],{"class":188,"line":397},[186,707,708],{},"        $this->position = $this->position + ($this->reverse ? -1 : 1);\n",[186,710,712],{"class":188,"line":711},38,[186,713,241],{},[186,715,717],{"class":188,"line":716},39,[186,718,217],{"emptyLinePlaceholder":216},[186,720,722],{"class":188,"line":721},40,[186,723,724],{},"    public function valid(): bool\n",[186,726,728],{"class":188,"line":727},41,[186,729,596],{},[186,731,733],{"class":188,"line":732},42,[186,734,735],{},"        return isset($this->collection->getItems()[$this->position]);\n",[186,737,739],{"class":188,"line":738},43,[186,740,241],{},[186,742,744],{"class":188,"line":743},44,[186,745,247],{},[186,747,749],{"class":188,"line":748},45,[186,750,217],{"emptyLinePlaceholder":216},[186,752,754],{"class":188,"line":753},46,[186,755,756],{},"class WordsCollection implements \\IteratorAggregate\n",[186,758,760],{"class":188,"line":759},47,[186,761,568],{},[186,763,765],{"class":188,"line":764},48,[186,766,767],{},"    private array $items = [];\n",[186,769,771],{"class":188,"line":770},49,[186,772,217],{"emptyLinePlaceholder":216},[186,774,776],{"class":188,"line":775},50,[186,777,778],{},"    public function getItems(): array\n",[186,780,782],{"class":188,"line":781},51,[186,783,596],{},[186,785,787],{"class":188,"line":786},52,[186,788,789],{},"        return $this->items;\n",[186,791,793],{"class":188,"line":792},53,[186,794,241],{},[186,796,798],{"class":188,"line":797},54,[186,799,217],{"emptyLinePlaceholder":216},[186,801,803],{"class":188,"line":802},55,[186,804,805],{},"    public function addItem(string $item): void\n",[186,807,809],{"class":188,"line":808},56,[186,810,596],{},[186,812,814],{"class":188,"line":813},57,[186,815,816],{},"        $this->items[] = $item;\n",[186,818,820],{"class":188,"line":819},58,[186,821,241],{},[186,823,825],{"class":188,"line":824},59,[186,826,217],{"emptyLinePlaceholder":216},[186,828,830],{"class":188,"line":829},60,[186,831,832],{},"    public function getIterator(): \\Iterator\n",[186,834,836],{"class":188,"line":835},61,[186,837,596],{},[186,839,841],{"class":188,"line":840},62,[186,842,843],{},"        return new AlphabeticalOrderIterator($this);\n",[186,845,847],{"class":188,"line":846},63,[186,848,241],{},[186,850,852],{"class":188,"line":851},64,[186,853,217],{"emptyLinePlaceholder":216},[186,855,857],{"class":188,"line":856},65,[186,858,859],{},"    public function getReverseIterator(): \\Iterator\n",[186,861,863],{"class":188,"line":862},66,[186,864,596],{},[186,866,868],{"class":188,"line":867},67,[186,869,870],{},"        return new AlphabeticalOrderIterator($this, true);\n",[186,872,874],{"class":188,"line":873},68,[186,875,241],{},[186,877,879],{"class":188,"line":878},69,[186,880,247],{},[186,882,884],{"class":188,"line":883},70,[186,885,217],{"emptyLinePlaceholder":216},[186,887,889],{"class":188,"line":888},71,[186,890,891],{},"$collection = new WordsCollection();\n",[186,893,895],{"class":188,"line":894},72,[186,896,897],{},"$collection->addItem(\"Birinci\");\n",[186,899,901],{"class":188,"line":900},73,[186,902,903],{},"$collection->addItem(\"İkinci\");\n",[186,905,907],{"class":188,"line":906},74,[186,908,909],{},"$collection->addItem(\"Üçüncü\");\n",[186,911,913],{"class":188,"line":912},75,[186,914,217],{"emptyLinePlaceholder":216},[186,916,918],{"class":188,"line":917},76,[186,919,920],{},"echo \"Düz Dolaşım:\\n\";\n",[186,922,924],{"class":188,"line":923},77,[186,925,926],{},"foreach ($collection->getIterator() as $item) {\n",[186,928,930],{"class":188,"line":929},78,[186,931,932],{},"    echo $item . \"\\n\";\n",[186,934,936],{"class":188,"line":935},79,[186,937,247],{},[186,939,941],{"class":188,"line":940},80,[186,942,217],{"emptyLinePlaceholder":216},[186,944,946],{"class":188,"line":945},81,[186,947,948],{},"echo \"\\nTers Dolaşım:\\n\";\n",[186,950,952],{"class":188,"line":951},82,[186,953,954],{},"foreach ($collection->getReverseIterator() as $item) {\n",[186,956,958],{"class":188,"line":957},83,[186,959,932],{},[186,961,963],{"class":188,"line":962},84,[186,964,247],{},[532,966,968],{"id":967},"örnek-python-kodu","Örnek Python Kodu",[177,970,974],{"className":971,"code":972,"language":973,"meta":182,"style":182},"language-python shiki shiki-themes github-light github-dark","from __future__ import annotations\nfrom collections.abc import Iterable, Iterator\nfrom typing import Any, List\n\nclass AlphabeticalOrderIterator(Iterator):\n    _position: int = None\n    _reverse: bool = False\n\n    def __init__(self, collection: WordsCollection, reverse: bool = False) -> None:\n        self._collection = collection\n        self._reverse = reverse\n        self._position = -1 if reverse else 0\n\n    def __next__(self) -> Any:\n        try:\n            value = self._collection[self._position]\n            self._position += -1 if self._reverse else 1\n        except IndexError:\n            raise StopIteration()\n        return value\n\n\nclass WordsCollection(Iterable):\n    def __init__(self, collection: List[Any] = []) -> None:\n        self._collection = collection\n\n    def __iter__(self) -> AlphabeticalOrderIterator:\n        return AlphabeticalOrderIterator(self._collection)\n\n    def get_reverse_iterator(self) -> AlphabeticalOrderIterator:\n        return AlphabeticalOrderIterator(self._collection, True)\n\n    def add_item(self, item: Any) -> None:\n        self._collection.append(item)\n\n\nif __name__ == \"__main__\":\n    collection = WordsCollection()\n    collection.add_item(\"İlk\")\n    collection.add_item(\"İkinci\")\n    collection.add_item(\"Üçüncü\")\n\n    print(\"Düz Dolaşım:\")\n    for item in collection:\n        print(item)\n    print(\"\")\n\n    print(\"Ters Dolaşım:\")\n    for item in collection.get_reverse_iterator():\n        print(item)\n","python",[63,975,976,981,986,991,995,1000,1005,1010,1014,1019,1024,1029,1034,1038,1043,1048,1053,1058,1063,1068,1073,1077,1081,1086,1091,1095,1099,1104,1109,1113,1118,1123,1127,1132,1137,1141,1145,1150,1155,1160,1165,1170,1174,1179,1184,1189,1194,1198,1203,1208],{"__ignoreMap":182},[186,977,978],{"class":188,"line":189},[186,979,980],{},"from __future__ import annotations\n",[186,982,983],{"class":188,"line":195},[186,984,985],{},"from collections.abc import Iterable, Iterator\n",[186,987,988],{"class":188,"line":201},[186,989,990],{},"from typing import Any, List\n",[186,992,993],{"class":188,"line":207},[186,994,217],{"emptyLinePlaceholder":216},[186,996,997],{"class":188,"line":213},[186,998,999],{},"class AlphabeticalOrderIterator(Iterator):\n",[186,1001,1002],{"class":188,"line":220},[186,1003,1004],{},"    _position: int = None\n",[186,1006,1007],{"class":188,"line":226},[186,1008,1009],{},"    _reverse: bool = False\n",[186,1011,1012],{"class":188,"line":232},[186,1013,217],{"emptyLinePlaceholder":216},[186,1015,1016],{"class":188,"line":238},[186,1017,1018],{},"    def __init__(self, collection: WordsCollection, reverse: bool = False) -> None:\n",[186,1020,1021],{"class":188,"line":244},[186,1022,1023],{},"        self._collection = collection\n",[186,1025,1026],{"class":188,"line":250},[186,1027,1028],{},"        self._reverse = reverse\n",[186,1030,1031],{"class":188,"line":255},[186,1032,1033],{},"        self._position = -1 if reverse else 0\n",[186,1035,1036],{"class":188,"line":261},[186,1037,217],{"emptyLinePlaceholder":216},[186,1039,1040],{"class":188,"line":267},[186,1041,1042],{},"    def __next__(self) -> Any:\n",[186,1044,1045],{"class":188,"line":273},[186,1046,1047],{},"        try:\n",[186,1049,1050],{"class":188,"line":279},[186,1051,1052],{},"            value = self._collection[self._position]\n",[186,1054,1055],{"class":188,"line":284},[186,1056,1057],{},"            self._position += -1 if self._reverse else 1\n",[186,1059,1060],{"class":188,"line":289},[186,1061,1062],{},"        except IndexError:\n",[186,1064,1065],{"class":188,"line":295},[186,1066,1067],{},"            raise StopIteration()\n",[186,1069,1070],{"class":188,"line":301},[186,1071,1072],{},"        return value\n",[186,1074,1075],{"class":188,"line":307},[186,1076,217],{"emptyLinePlaceholder":216},[186,1078,1079],{"class":188,"line":313},[186,1080,217],{"emptyLinePlaceholder":216},[186,1082,1083],{"class":188,"line":318},[186,1084,1085],{},"class WordsCollection(Iterable):\n",[186,1087,1088],{"class":188,"line":324},[186,1089,1090],{},"    def __init__(self, collection: List[Any] = []) -> None:\n",[186,1092,1093],{"class":188,"line":330},[186,1094,1023],{},[186,1096,1097],{"class":188,"line":335},[186,1098,217],{"emptyLinePlaceholder":216},[186,1100,1101],{"class":188,"line":340},[186,1102,1103],{},"    def __iter__(self) -> AlphabeticalOrderIterator:\n",[186,1105,1106],{"class":188,"line":346},[186,1107,1108],{},"        return AlphabeticalOrderIterator(self._collection)\n",[186,1110,1111],{"class":188,"line":352},[186,1112,217],{"emptyLinePlaceholder":216},[186,1114,1115],{"class":188,"line":358},[186,1116,1117],{},"    def get_reverse_iterator(self) -> AlphabeticalOrderIterator:\n",[186,1119,1120],{"class":188,"line":364},[186,1121,1122],{},"        return AlphabeticalOrderIterator(self._collection, True)\n",[186,1124,1125],{"class":188,"line":370},[186,1126,217],{"emptyLinePlaceholder":216},[186,1128,1129],{"class":188,"line":375},[186,1130,1131],{},"    def add_item(self, item: Any) -> None:\n",[186,1133,1134],{"class":188,"line":380},[186,1135,1136],{},"        self._collection.append(item)\n",[186,1138,1139],{"class":188,"line":386},[186,1140,217],{"emptyLinePlaceholder":216},[186,1142,1143],{"class":188,"line":392},[186,1144,217],{"emptyLinePlaceholder":216},[186,1146,1147],{"class":188,"line":397},[186,1148,1149],{},"if __name__ == \"__main__\":\n",[186,1151,1152],{"class":188,"line":711},[186,1153,1154],{},"    collection = WordsCollection()\n",[186,1156,1157],{"class":188,"line":716},[186,1158,1159],{},"    collection.add_item(\"İlk\")\n",[186,1161,1162],{"class":188,"line":721},[186,1163,1164],{},"    collection.add_item(\"İkinci\")\n",[186,1166,1167],{"class":188,"line":727},[186,1168,1169],{},"    collection.add_item(\"Üçüncü\")\n",[186,1171,1172],{"class":188,"line":732},[186,1173,217],{"emptyLinePlaceholder":216},[186,1175,1176],{"class":188,"line":738},[186,1177,1178],{},"    print(\"Düz Dolaşım:\")\n",[186,1180,1181],{"class":188,"line":743},[186,1182,1183],{},"    for item in collection:\n",[186,1185,1186],{"class":188,"line":748},[186,1187,1188],{},"        print(item)\n",[186,1190,1191],{"class":188,"line":753},[186,1192,1193],{},"    print(\"\")\n",[186,1195,1196],{"class":188,"line":759},[186,1197,217],{"emptyLinePlaceholder":216},[186,1199,1200],{"class":188,"line":764},[186,1201,1202],{},"    print(\"Ters Dolaşım:\")\n",[186,1204,1205],{"class":188,"line":770},[186,1206,1207],{},"    for item in collection.get_reverse_iterator():\n",[186,1209,1210],{"class":188,"line":775},[186,1211,1188],{},[91,1213],{},[94,1215,1217],{"id":1216},"sıkça-sorulan-sorular-faq","Sıkça Sorulan Sorular (FAQ)",[532,1219,1221],{"id":1220},"büyük-veri-kümelerinde-iterator-kullanmak-bellek-tüketimini-nasıl-etkiler","Büyük veri kümelerinde Iterator kullanmak bellek tüketimini nasıl etkiler?",[11,1223,1224,1225,1228,1229,1232],{},"Bellek tüketimi açısından olağanüstü faydalıdır. Tüm veriyi tek seferde belleğe (RAM) yüklemek yerine, ",[43,1226,1227],{},"Lazy Loading"," (Tembel Yükleme) veya ",[43,1230,1231],{},"Generators"," (Üreticiler) kullanarak verileri ihtiyaç duyuldukça tek tek çekebilirsiniz. Bu sayede milyonlarca satırlık veriler bile minimum RAM tüketimiyle işlenebilir.",[532,1234,1236,1237,1240],{"id":1235},"pythonjavascriptteki-yield-anahtar-kelimesi-iterator-deseniyle-mi-ilişkilidir","Python\u002FJavaScript'teki ",[63,1238,1239],{},"yield"," anahtar kelimesi Iterator deseniyle mi ilişkilidir?",[11,1242,1243,1244,1246,1247,1250],{},"Evet, doğrudan dil seviyesindeki entegrasyonudur. ",[63,1245,1239],{}," anahtar kelimesi kullanan fonksiyonlar birer ",[43,1248,1249],{},"Generator"," döndürür. Bu generator'lar, fonksiyonun çalışma durumunu dondurup her adımda sıradaki değeri üreterek geri dönen hazır iteratörlerdir.",[532,1252,1254],{"id":1253},"fail-fast-vs-fail-safe-iterator-nedir","Fail-Fast vs Fail-Safe Iterator nedir?",[47,1256,1257,1267],{},[50,1258,1259,1262,1263,1266],{},[43,1260,1261],{},"Fail-Fast:"," Iterasyon sırasında koleksiyon üzerinde (başka bir iş parçacığı tarafından) yapısal bir değişiklik (ekleme\u002Fsilme) algılandığı anda doğrudan ",[63,1264,1265],{},"ConcurrentModificationException"," hatası fırlatır. Hızlıca çökmeyi hedefler.",[50,1268,1269,1272],{},[43,1270,1271],{},"Fail-Safe:"," Koleksiyonun orijinali yerine, o anki bir kopyası (clone) üzerinde iterasyon yapar. Bu yüzden iterasyon sırasında koleksiyonda değişiklik yapılsa bile hata fırlatmaz ancak yapılan değişiklikler iterasyon esnasında görünmez.",[91,1274],{},[94,1276,1278],{"id":1277},"diğer-tasarım-kalıplarıdesign-patterns","Diğer Tasarım Kalıpları\u002FDesign Patterns",[11,1280,1281],{},[43,1282,1283],{},"Oluşumsal Kalıplar (Creational Patterns)",[11,1285,1286,1289,1290,1289,1294,1289,1298,1289,1302],{},[15,1287,516],{"href":1288},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir",",\n",[15,1291,1293],{"href":1292},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir","Abstract Factory",[15,1295,1297],{"href":1296},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder",[15,1299,1301],{"href":1300},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype",[15,1303,1305],{"href":1304},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton",[11,1307,1308],{},[43,1309,1310],{},"Yapısal Kalıplar (Structural Patterns)",[11,1312,1313,1289,1317,1289,1321,1289,1324,1289,1328,1289,1332,1289,1336],{},[15,1314,1316],{"href":1315},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter",[15,1318,1320],{"href":1319},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge",[15,1322,506],{"href":1323},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir",[15,1325,1327],{"href":1326},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator",[15,1329,1331],{"href":1330},"\u002Ftr\u002Ffacade-tasarim-deseni-nedir","Facade",[15,1333,1335],{"href":1334},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight",[15,1337,1339],{"href":1338},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy",[11,1341,1342],{},[43,1343,1344],{},"Davranışsal Kalıplar (Behavioral Patterns)",[11,1346,1347,1289,1351,1289,1355,1289,1358,1289,1362,1289,1365,1289,1369,1289,1373,1289,1377,1289,1381],{},[15,1348,1350],{"href":1349},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility",[15,1352,1354],{"href":1353},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command",[15,1356,65],{"href":1357},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir",[15,1359,1361],{"href":1360},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator",[15,1363,523],{"href":1364},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir",[15,1366,1368],{"href":1367},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer",[15,1370,1372],{"href":1371},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State",[15,1374,1376],{"href":1375},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy",[15,1378,1380],{"href":1379},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir","Template Method",[15,1382,424],{"href":1383},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir",[1385,1386,1387],"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":182,"searchDepth":195,"depth":195,"links":1389},[1390,1391,1392,1393,1394,1395,1396,1397,1401,1407],{"id":96,"depth":195,"text":97},{"id":107,"depth":195,"text":108},{"id":135,"depth":195,"text":136},{"id":171,"depth":195,"text":172},{"id":404,"depth":195,"text":405},{"id":472,"depth":195,"text":473},{"id":498,"depth":195,"text":499},{"id":529,"depth":195,"text":530,"children":1398},[1399,1400],{"id":534,"depth":201,"text":535},{"id":967,"depth":201,"text":968},{"id":1216,"depth":195,"text":1217,"children":1402},[1403,1404,1406],{"id":1220,"depth":201,"text":1221},{"id":1235,"depth":201,"text":1405},"Python\u002FJavaScript'teki yield anahtar kelimesi Iterator deseniyle mi ilişkilidir?",{"id":1253,"depth":201,"text":1254},{"id":1277,"depth":195,"text":1278},[1409],"technical",null,"2021-10-02","Iterator (Yineleyici) tasarım kalıbını, lazy loading ve generator yapılarını, organizasyon şeması dolaşım örneklerini ve PHP\u002FPython uygulamalarını öğrenin.",false,"md","\u002Fimages\u002Fposts\u002F2021\u002F10\u002Fiterator-deseni-nedir.avif",{},{"title":6,"description":1412},"iterator-tasarim-deseni-nedir","tr\u002Fiterator-tasarim-deseni-nedir",[1421,1422],"design-pattern","ipucu","7V7WvAYZCedXVljOhvVYSkIheW0dFrFqTDCsP_wDims",{"prev":1425,"next":1427,"others":1430,"lucky":1539,"readingTime":220},{"path":1360,"title":1426},"Mediator Tasarım Deseni Nedir?",{"path":1428,"title":1429},"\u002Ftr\u002Fopenlitespeed-ve-litespeed-enterprisei-reverse-proxy-olarak-kullanmak","OpenLiteSpeed ve LiteSpeed Enterprise Sunucularını Reverse Proxy Olarak Kullanmak",[1431,1434,1436,1439,1442,1445,1448,1450,1453,1455,1458,1461,1464,1466,1469,1471,1474,1476,1478,1480,1482,1485,1488,1491,1494,1497,1500,1503,1506,1509,1512,1515,1518,1521,1523,1525,1527,1530,1533,1536],{"path":1432,"title":1433},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1334,"title":1435},"Flyweight Tasarım Deseni Nedir?",{"path":1437,"title":1438},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",{"path":1440,"title":1441},"\u002Ftr\u002Fdocker-ile-rabbitmq-kurulumu","Docker ile RabbitMQ Kurulumu",{"path":1443,"title":1444},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":1446,"title":1447},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1292,"title":1449},"Abstract Factory Tasarım Deseni Nedir?",{"path":1451,"title":1452},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":1353,"title":1454},"Command Tasarım Deseni Nedir?",{"path":1456,"title":1457},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":1459,"title":1460},"\u002Ftr\u002Ffull-stack-proje-agaci","Full-Stack Proje Yol Haritası ve İçindekiler",{"path":1462,"title":1463},"\u002Ftr\u002Fes12-nedir-ecmascript-2021-nedir","ES12 Nedir? ECMAScript 2021 Nedir?",{"path":1323,"title":1465},"Composite Tasarım Deseni Nedir?",{"path":1467,"title":1468},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAScript Nedir? Bilinmesi Gerekenler...",{"path":1315,"title":1470},"Adapter Tasarım Deseni Nedir?",{"path":1472,"title":1473},"\u002Ftr\u002Fes10-nedir-ecmascript-2019-nedir","ES10 Nedir? ECMAScript 2019 Nedir?",{"path":1288,"title":1475},"Factory Method Tasarım Deseni Nedir?",{"path":1367,"title":1477},"Observer Tasarım Deseni Nedir?",{"path":1371,"title":1479},"State Tasarım Deseni Nedir?",{"path":1319,"title":1481},"Bridge Tasarım Deseni Nedir?",{"path":1483,"title":1484},"\u002Ftr\u002Frest-api-hata-yonetimi","REST Api Hata Yönetimi",{"path":1486,"title":1487},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","RestApi ve HATEOAS Kavramı",{"path":1489,"title":1490},"\u002Ftr\u002Frestful-api-bilesenleri","RESTful API Bileşenleri",{"path":1492,"title":1493},"\u002Ftr\u002Fgo-ve-degiskenler","Go ve Değişkenler",{"path":1495,"title":1496},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":1498,"title":1499},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri",{"path":1501,"title":1502},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu",{"path":1504,"title":1505},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı",{"path":1507,"title":1508},"\u002Ftr\u002Frabbitmq-nedir","RabbitMQ Nedir?",{"path":1510,"title":1511},"\u002Ftr\u002Fmerhaba-phalcon-framework","Merhaba Phalcon Framework",{"path":1513,"title":1514},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":1516,"title":1517},"\u002Ftr\u002Fapi-gateway-nedir","API Gateway Nedir? Ne İşe Yarar?",{"path":1519,"title":1520},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":1330,"title":1522},"Facade Tasarım Deseni Nedir?",{"path":1375,"title":1524},"Strategy Tasarım Deseni Nedir?",{"path":17,"title":1526},"Design Patterns \u002F Tasarım Desenleri nedir?",{"path":1528,"title":1529},"\u002Ftr\u002Fjavascriptde-moduller","JavaScript'te Modüller",{"path":1531,"title":1532},"\u002Ftr\u002Fubuntu-guncellemesi-sonrasi-cyberpanele-ulasilamama-sorunlarini-giderme","Ubuntu Güncellemesi Sonrası CyberPanel'e Ulaşılamama Sorunlarını Giderme",{"path":1534,"title":1535},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":1537,"title":1538},"\u002Ftr\u002Fcodeserver-nedir-codeserver-nasil-kurulur","Code-Server Nedir? Bulutta VS Code Geliştirme Ortamı Kurulumu",{"path":1330,"title":1522},[1541,1544,1547,1549],{"path":1383,"title":1542,"date":1543},"Visitor Tasarım Deseni Nedir?","2021-10-09",{"path":1379,"title":1545,"date":1546},"Template Method Tasarım Deseni Nedir?","2021-10-08",{"path":1375,"title":1524,"date":1548},"2021-10-07",{"path":1371,"title":1479,"date":1550},"2021-10-06",[1552,1554,1556],{"path":1510,"title":1511,"date":1553},"2020-12-07",{"path":1323,"title":1465,"date":1555},"2021-09-11",{"path":1557,"title":1558,"date":1559},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?","2026-06-20",1782142005185]