[{"data":1,"prerenderedAt":1791},["ShallowReactive",2],{"post-\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir":3},{"page":4,"translation":1624,"nav":1640,"related":1771,"random":1778},{"id":5,"title":6,"body":7,"categories":1622,"category":1624,"date":1625,"description":1626,"draft":1627,"extension":1628,"image":1629,"kind":1624,"lang":1630,"meta":1631,"navigation":220,"path":1632,"readingTime":178,"seo":1633,"slug":1634,"stem":1635,"tags":1636,"translationKey":1624,"type":1623,"updated":1624,"__hash__":1639},"postsTr\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir.md","ES13 nedir? ECMAScript 2022 nedir?",{"type":8,"value":9,"toc":1609},"minimark",[10,19,25,30,33,92,96,110,275,279,290,495,499,505,748,752,759,916,920,927,1062,1066,1076,1216,1219,1233,1349,1353,1363,1503,1507,1517,1605],[11,12,13,18],"p",{},[14,15,17],"a",{"href":16},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAscript",", kısa adıyla ES, Ecma-International tarafından ECMA-262 dokümanında yayınlanan ve her yıl yenilenen JavaScript standardıdır. Bu yazıda ECMAScript 2022 (ES13) sürümüyle gelen yenilikleri inceliyoruz.",[11,20,21],{},[22,23,24],"strong",{},"ES13 (ECMAScript 2022), 2022 yılında yayınlanan 13. ECMAScript sürümüdür.",[26,27,29],"h2",{"id":28},"es13-ile-gelen-yenilikler","ES13 ile gelen yenilikler",[11,31,32],{},"ES13 ile birlikte tanımlanan yeni özellikler şunlar;",[34,35,36,44,47,54,60,66,72,78,85],"ul",{},[37,38,39,43],"li",{},[40,41,42],"code",{},"Top-level await"," (Modüllerde await kullanımı)",[37,45,46],{},"Class fields (Sınıflarda private, public ve static alanlar)",[37,48,49,50,53],{},"Private metotlar ve accessor'lar (",[40,51,52],{},"#method",")",[37,55,56,57,53],{},"Static class blocks (",[40,58,59],{},"static { ... }",[37,61,62,63,53],{},"Ergonomik brand check (",[40,64,65],{},"#field in obj",[37,67,68,71],{},[40,69,70],{},".at()"," (Array, String, TypedArray için negatif indeksleme)",[37,73,74,77],{},[40,75,76],{},"Object.hasOwn()"," (Güvenli nesne özelliği kontrolü)",[37,79,80,81,84],{},"Error cause (",[40,82,83],{},"{ cause }"," parametresi ile hata izleme)",[37,86,87,88,91],{},"RegExp match indices (",[40,89,90],{},"\u002Fd"," bayrağı ile eşleşme indeksleri)",[93,94,42],"h3",{"id":95},"top-level-await",[11,97,98,99,102,103,106,107,109],{},"ES13 öncesinde, ",[40,100,101],{},"await"," anahtar kelimesini sadece ",[40,104,105],{},"async"," olarak tanımlanmış fonksiyonların içerisinde kullanabiliyorduk. Modüllerin en üst seviyesinde (top-level) asenkron işlemler gerçekleştirmek istediğimizde, kodumuzu geçici asenkron fonksiyonlarla (IIFE) sarmalamak zorunda kalıyorduk. ES13 ile birlikte artık JavaScript modüllerinin en üst seviyesinde doğrudan ",[40,108,101],{}," kullanabiliyoruz.",[111,112,117],"pre",{"className":113,"code":114,"language":115,"meta":116,"style":116},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F ES13 öncesi\n(async () => {\n    const response = await fetch('https:\u002F\u002Fapi.example.com\u002Fdata');\n    const data = await response.json();\n    console.log(data);\n})();\n\n\u002F\u002F ES13 sonrası (Modül dosyası içerisinde)\nconst response = await fetch('https:\u002F\u002Fapi.example.com\u002Fdata');\nconst data = await response.json();\nconsole.log(data);\n","javascript","",[40,118,119,128,147,176,197,209,215,222,228,248,265],{"__ignoreMap":116},[120,121,124],"span",{"class":122,"line":123},"line",1,[120,125,127],{"class":126},"sJ8bj","\u002F\u002F ES13 öncesi\n",[120,129,131,135,138,141,144],{"class":122,"line":130},2,[120,132,134],{"class":133},"sVt8B","(",[120,136,105],{"class":137},"szBVR",[120,139,140],{"class":133}," () ",[120,142,143],{"class":137},"=>",[120,145,146],{"class":133}," {\n",[120,148,150,153,157,160,163,167,169,173],{"class":122,"line":149},3,[120,151,152],{"class":137},"    const",[120,154,156],{"class":155},"sj4cs"," response",[120,158,159],{"class":137}," =",[120,161,162],{"class":137}," await",[120,164,166],{"class":165},"sScJk"," fetch",[120,168,134],{"class":133},[120,170,172],{"class":171},"sZZnC","'https:\u002F\u002Fapi.example.com\u002Fdata'",[120,174,175],{"class":133},");\n",[120,177,179,181,184,186,188,191,194],{"class":122,"line":178},4,[120,180,152],{"class":137},[120,182,183],{"class":155}," data",[120,185,159],{"class":137},[120,187,162],{"class":137},[120,189,190],{"class":133}," response.",[120,192,193],{"class":165},"json",[120,195,196],{"class":133},"();\n",[120,198,200,203,206],{"class":122,"line":199},5,[120,201,202],{"class":133},"    console.",[120,204,205],{"class":165},"log",[120,207,208],{"class":133},"(data);\n",[120,210,212],{"class":122,"line":211},6,[120,213,214],{"class":133},"})();\n",[120,216,218],{"class":122,"line":217},7,[120,219,221],{"emptyLinePlaceholder":220},true,"\n",[120,223,225],{"class":122,"line":224},8,[120,226,227],{"class":126},"\u002F\u002F ES13 sonrası (Modül dosyası içerisinde)\n",[120,229,231,234,236,238,240,242,244,246],{"class":122,"line":230},9,[120,232,233],{"class":137},"const",[120,235,156],{"class":155},[120,237,159],{"class":137},[120,239,162],{"class":137},[120,241,166],{"class":165},[120,243,134],{"class":133},[120,245,172],{"class":171},[120,247,175],{"class":133},[120,249,251,253,255,257,259,261,263],{"class":122,"line":250},10,[120,252,233],{"class":137},[120,254,183],{"class":155},[120,256,159],{"class":137},[120,258,162],{"class":137},[120,260,190],{"class":133},[120,262,193],{"class":165},[120,264,196],{"class":133},[120,266,268,271,273],{"class":122,"line":267},11,[120,269,270],{"class":133},"console.",[120,272,205],{"class":165},[120,274,208],{"class":133},[93,276,278],{"id":277},"class-fields-sınıf-alanları","Class Fields (Sınıf Alanları)",[11,280,281,282,285,286,289],{},"Sınıf tanımlarında (class declarations) constructor fonksiyonu dışında doğrudan sınıf alanları (property'leri) tanımlayabiliyoruz. Üstelik bir alanın başına hash ",[40,283,284],{},"#"," işareti koyarak o alanı doğrudan ",[22,287,288],{},"private"," (dışarıdan erişilemez) hale getirebiliyoruz.",[111,291,293],{"className":113,"code":292,"language":115,"meta":116,"style":116},"class Counter {\n    \u002F\u002F Public alan\n    count = 0;\n\n    \u002F\u002F Private alan (Sınıf dışından erişilemez)\n    #privateCount = 0;\n\n    increment() {\n        this.count++;\n        this.#privateCount++;\n    }\n    \n    getPrivateValue() {\n        return this.#privateCount;\n    }\n}\n\nconst myCounter = new Counter();\nmyCounter.increment();\nconsole.log(myCounter.count); \u002F\u002F 1\n\u002F\u002F console.log(myCounter.#privateCount); \u002F\u002F Hata fırlatır!\nconsole.log(myCounter.getPrivateValue()); \u002F\u002F 1\n",[40,294,295,305,310,324,328,333,344,348,356,369,380,385,391,399,411,416,422,427,444,455,468,477],{"__ignoreMap":116},[120,296,297,300,303],{"class":122,"line":123},[120,298,299],{"class":137},"class",[120,301,302],{"class":165}," Counter",[120,304,146],{"class":133},[120,306,307],{"class":122,"line":130},[120,308,309],{"class":126},"    \u002F\u002F Public alan\n",[120,311,312,316,318,321],{"class":122,"line":149},[120,313,315],{"class":314},"s4XuR","    count",[120,317,159],{"class":137},[120,319,320],{"class":155}," 0",[120,322,323],{"class":133},";\n",[120,325,326],{"class":122,"line":178},[120,327,221],{"emptyLinePlaceholder":220},[120,329,330],{"class":122,"line":199},[120,331,332],{"class":126},"    \u002F\u002F Private alan (Sınıf dışından erişilemez)\n",[120,334,335,338,340,342],{"class":122,"line":211},[120,336,337],{"class":314},"    #privateCount",[120,339,159],{"class":137},[120,341,320],{"class":155},[120,343,323],{"class":133},[120,345,346],{"class":122,"line":217},[120,347,221],{"emptyLinePlaceholder":220},[120,349,350,353],{"class":122,"line":224},[120,351,352],{"class":165},"    increment",[120,354,355],{"class":133},"() {\n",[120,357,358,361,364,367],{"class":122,"line":230},[120,359,360],{"class":155},"        this",[120,362,363],{"class":133},".count",[120,365,366],{"class":137},"++",[120,368,323],{"class":133},[120,370,371,373,376,378],{"class":122,"line":250},[120,372,360],{"class":155},[120,374,375],{"class":133},".#privateCount",[120,377,366],{"class":137},[120,379,323],{"class":133},[120,381,382],{"class":122,"line":267},[120,383,384],{"class":133},"    }\n",[120,386,388],{"class":122,"line":387},12,[120,389,390],{"class":133},"    \n",[120,392,394,397],{"class":122,"line":393},13,[120,395,396],{"class":165},"    getPrivateValue",[120,398,355],{"class":133},[120,400,402,405,408],{"class":122,"line":401},14,[120,403,404],{"class":137},"        return",[120,406,407],{"class":155}," this",[120,409,410],{"class":133},".#privateCount;\n",[120,412,414],{"class":122,"line":413},15,[120,415,384],{"class":133},[120,417,419],{"class":122,"line":418},16,[120,420,421],{"class":133},"}\n",[120,423,425],{"class":122,"line":424},17,[120,426,221],{"emptyLinePlaceholder":220},[120,428,430,432,435,437,440,442],{"class":122,"line":429},18,[120,431,233],{"class":137},[120,433,434],{"class":155}," myCounter",[120,436,159],{"class":137},[120,438,439],{"class":137}," new",[120,441,302],{"class":165},[120,443,196],{"class":133},[120,445,447,450,453],{"class":122,"line":446},19,[120,448,449],{"class":133},"myCounter.",[120,451,452],{"class":165},"increment",[120,454,196],{"class":133},[120,456,458,460,462,465],{"class":122,"line":457},20,[120,459,270],{"class":133},[120,461,205],{"class":165},[120,463,464],{"class":133},"(myCounter.count); ",[120,466,467],{"class":126},"\u002F\u002F 1\n",[120,469,471,474],{"class":122,"line":470},21,[120,472,473],{"class":126},"\u002F\u002F console.log(myCounter.#privateCount);",[120,475,476],{"class":126}," \u002F\u002F Hata fırlatır!\n",[120,478,480,482,484,487,490,493],{"class":122,"line":479},22,[120,481,270],{"class":133},[120,483,205],{"class":165},[120,485,486],{"class":133},"(myCounter.",[120,488,489],{"class":165},"getPrivateValue",[120,491,492],{"class":133},"()); ",[120,494,467],{"class":126},[93,496,498],{"id":497},"private-metotlar-ve-accessorlar","Private Metotlar ve Accessor'lar",[11,500,501,502,504],{},"Private alan tanımlarını metotlara, getter ve setter fonksiyonlarına da uygulayabiliyoruz. Bir metodun veya getter\u002Fsetter'ın başına ",[40,503,284],{}," getirdiğimizde, o metot sadece sınıf içinden çağrılabilir hale geliyor.",[111,506,508],{"className":113,"code":507,"language":115,"meta":116,"style":116},"class User {\n    name = \"Evren\";\n\n    \u002F\u002F Private metot\n    #validateName(name) {\n        return name.length > 0;\n    }\n\n    \u002F\u002F Private getter\n    get #fullName() {\n        return `${this.name} Bal`;\n    }\n\n    updateName(newName) {\n        if (this.#validateName(newName)) {\n            this.name = newName;\n            console.log(this.#fullName); \u002F\u002F Sınıf içi erişim serbest\n        }\n    }\n}\n\nconst user = new User();\nuser.updateName(\"Soruman\"); \u002F\u002F \"Soruman Bal\" çıktısını verir\n\u002F\u002F user.#validateName(\"Test\"); \u002F\u002F Hata fırlatır!\n",[40,509,510,519,531,535,540,556,573,577,581,586,599,619,623,627,639,657,671,688,693,697,701,705,720,740],{"__ignoreMap":116},[120,511,512,514,517],{"class":122,"line":123},[120,513,299],{"class":137},[120,515,516],{"class":165}," User",[120,518,146],{"class":133},[120,520,521,524,526,529],{"class":122,"line":130},[120,522,523],{"class":314},"    name",[120,525,159],{"class":137},[120,527,528],{"class":171}," \"Evren\"",[120,530,323],{"class":133},[120,532,533],{"class":122,"line":149},[120,534,221],{"emptyLinePlaceholder":220},[120,536,537],{"class":122,"line":178},[120,538,539],{"class":126},"    \u002F\u002F Private metot\n",[120,541,542,545,548,550,553],{"class":122,"line":199},[120,543,544],{"class":133},"    #",[120,546,547],{"class":165},"validateName",[120,549,134],{"class":133},[120,551,552],{"class":314},"name",[120,554,555],{"class":133},") {\n",[120,557,558,560,563,566,569,571],{"class":122,"line":211},[120,559,404],{"class":137},[120,561,562],{"class":133}," name.",[120,564,565],{"class":155},"length",[120,567,568],{"class":137}," >",[120,570,320],{"class":155},[120,572,323],{"class":133},[120,574,575],{"class":122,"line":217},[120,576,384],{"class":133},[120,578,579],{"class":122,"line":224},[120,580,221],{"emptyLinePlaceholder":220},[120,582,583],{"class":122,"line":230},[120,584,585],{"class":126},"    \u002F\u002F Private getter\n",[120,587,588,591,594,597],{"class":122,"line":250},[120,589,590],{"class":137},"    get",[120,592,593],{"class":133}," #",[120,595,596],{"class":165},"fullName",[120,598,355],{"class":133},[120,600,601,603,606,609,612,614,617],{"class":122,"line":267},[120,602,404],{"class":137},[120,604,605],{"class":171}," `${",[120,607,608],{"class":155},"this",[120,610,611],{"class":171},".",[120,613,552],{"class":133},[120,615,616],{"class":171},"} Bal`",[120,618,323],{"class":133},[120,620,621],{"class":122,"line":387},[120,622,384],{"class":133},[120,624,625],{"class":122,"line":393},[120,626,221],{"emptyLinePlaceholder":220},[120,628,629,632,634,637],{"class":122,"line":401},[120,630,631],{"class":165},"    updateName",[120,633,134],{"class":133},[120,635,636],{"class":314},"newName",[120,638,555],{"class":133},[120,640,641,644,647,649,651,654],{"class":122,"line":413},[120,642,643],{"class":137},"        if",[120,645,646],{"class":133}," (",[120,648,608],{"class":155},[120,650,611],{"class":133},[120,652,653],{"class":165},"#validateName",[120,655,656],{"class":133},"(newName)) {\n",[120,658,659,662,665,668],{"class":122,"line":418},[120,660,661],{"class":155},"            this",[120,663,664],{"class":133},".name ",[120,666,667],{"class":137},"=",[120,669,670],{"class":133}," newName;\n",[120,672,673,676,678,680,682,685],{"class":122,"line":424},[120,674,675],{"class":133},"            console.",[120,677,205],{"class":165},[120,679,134],{"class":133},[120,681,608],{"class":155},[120,683,684],{"class":133},".#fullName); ",[120,686,687],{"class":126},"\u002F\u002F Sınıf içi erişim serbest\n",[120,689,690],{"class":122,"line":429},[120,691,692],{"class":133},"        }\n",[120,694,695],{"class":122,"line":446},[120,696,384],{"class":133},[120,698,699],{"class":122,"line":457},[120,700,421],{"class":133},[120,702,703],{"class":122,"line":470},[120,704,221],{"emptyLinePlaceholder":220},[120,706,707,709,712,714,716,718],{"class":122,"line":479},[120,708,233],{"class":137},[120,710,711],{"class":155}," user",[120,713,159],{"class":137},[120,715,439],{"class":137},[120,717,516],{"class":165},[120,719,196],{"class":133},[120,721,723,726,729,731,734,737],{"class":122,"line":722},23,[120,724,725],{"class":133},"user.",[120,727,728],{"class":165},"updateName",[120,730,134],{"class":133},[120,732,733],{"class":171},"\"Soruman\"",[120,735,736],{"class":133},"); ",[120,738,739],{"class":126},"\u002F\u002F \"Soruman Bal\" çıktısını verir\n",[120,741,743,746],{"class":122,"line":742},24,[120,744,745],{"class":126},"\u002F\u002F user.#validateName(\"Test\");",[120,747,476],{"class":126},[93,749,751],{"id":750},"static-class-blocks-statik-sınıf-blokları","Static Class Blocks (Statik Sınıf Blokları)",[11,753,754,755,758],{},"Sınıfların statik alanlarını ilklendirmek (initialize) ve karmaşık konfigürasyonlar yapmak için ",[40,756,757],{},"static"," bloklar kullanabiliyoruz. Bu bloklar, sınıf ilk kez yüklendiğinde bir kez çalışır ve private alanlara da erişim yetkisine sahiptir.",[111,760,762],{"className":113,"code":761,"language":115,"meta":116,"style":116},"class Configuration {\n    static dbUrl;\n    static #port = 5432;\n\n    static {\n        \u002F\u002F Sınıf yüklenirken çalışacak karmaşık lojistik\n        const env = \"PRODUCTION\";\n        if (env === \"PRODUCTION\") {\n            this.dbUrl = `mongodb:\u002F\u002Fprod:${this.#port}`;\n        } else {\n            this.dbUrl = \"mongodb:\u002F\u002Flocalhost:27017\";\n        }\n    }\n}\n\nconsole.log(Configuration.dbUrl); \u002F\u002F \"mongodb:\u002F\u002Fprod:5432\"\n",[40,763,764,773,783,797,801,807,812,827,841,865,875,888,892,896,900,904],{"__ignoreMap":116},[120,765,766,768,771],{"class":122,"line":123},[120,767,299],{"class":137},[120,769,770],{"class":165}," Configuration",[120,772,146],{"class":133},[120,774,775,778,781],{"class":122,"line":130},[120,776,777],{"class":137},"    static",[120,779,780],{"class":314}," dbUrl",[120,782,323],{"class":133},[120,784,785,787,790,792,795],{"class":122,"line":149},[120,786,777],{"class":137},[120,788,789],{"class":314}," #port",[120,791,159],{"class":137},[120,793,794],{"class":155}," 5432",[120,796,323],{"class":133},[120,798,799],{"class":122,"line":178},[120,800,221],{"emptyLinePlaceholder":220},[120,802,803,805],{"class":122,"line":199},[120,804,777],{"class":137},[120,806,146],{"class":133},[120,808,809],{"class":122,"line":211},[120,810,811],{"class":126},"        \u002F\u002F Sınıf yüklenirken çalışacak karmaşık lojistik\n",[120,813,814,817,820,822,825],{"class":122,"line":217},[120,815,816],{"class":137},"        const",[120,818,819],{"class":155}," env",[120,821,159],{"class":137},[120,823,824],{"class":171}," \"PRODUCTION\"",[120,826,323],{"class":133},[120,828,829,831,834,837,839],{"class":122,"line":224},[120,830,643],{"class":137},[120,832,833],{"class":133}," (env ",[120,835,836],{"class":137},"===",[120,838,824],{"class":171},[120,840,555],{"class":133},[120,842,843,845,848,850,853,855,857,860,863],{"class":122,"line":230},[120,844,661],{"class":155},[120,846,847],{"class":133},".dbUrl ",[120,849,667],{"class":137},[120,851,852],{"class":171}," `mongodb:\u002F\u002Fprod:${",[120,854,608],{"class":155},[120,856,611],{"class":171},[120,858,859],{"class":133},"#port",[120,861,862],{"class":171},"}`",[120,864,323],{"class":133},[120,866,867,870,873],{"class":122,"line":250},[120,868,869],{"class":133},"        } ",[120,871,872],{"class":137},"else",[120,874,146],{"class":133},[120,876,877,879,881,883,886],{"class":122,"line":267},[120,878,661],{"class":155},[120,880,847],{"class":133},[120,882,667],{"class":137},[120,884,885],{"class":171}," \"mongodb:\u002F\u002Flocalhost:27017\"",[120,887,323],{"class":133},[120,889,890],{"class":122,"line":387},[120,891,692],{"class":133},[120,893,894],{"class":122,"line":393},[120,895,384],{"class":133},[120,897,898],{"class":122,"line":401},[120,899,421],{"class":133},[120,901,902],{"class":122,"line":413},[120,903,221],{"emptyLinePlaceholder":220},[120,905,906,908,910,913],{"class":122,"line":418},[120,907,270],{"class":133},[120,909,205],{"class":165},[120,911,912],{"class":133},"(Configuration.dbUrl); ",[120,914,915],{"class":126},"\u002F\u002F \"mongodb:\u002F\u002Fprod:5432\"\n",[93,917,919],{"id":918},"ergonomik-brand-check","Ergonomik Brand Check",[11,921,922,923,926],{},"Sınıf içinde veya metotlarında, bir nesnenin belirli bir private alana sahip olup olmadığını güvenli bir şekilde kontrol etmek için ",[40,924,925],{},"in"," operatörünü kullanabiliyoruz. Buna \"ergonomik brand check\" deniyor.",[111,928,930],{"className":113,"code":929,"language":115,"meta":116,"style":116},"class CacheReader {\n    #cache = {};\n\n    static isCacheReader(obj) {\n        \u002F\u002F obj nesnesinin içinde #cache private alanı var mı kontrolü\n        return #cache in obj;\n    }\n}\n\nconst reader = new CacheReader();\nconst plainObject = {};\n\nconsole.log(CacheReader.isCacheReader(reader)); \u002F\u002F true\nconsole.log(CacheReader.isCacheReader(plainObject)); \u002F\u002F false\n",[40,931,932,941,951,955,969,974,986,990,994,998,1013,1024,1028,1046],{"__ignoreMap":116},[120,933,934,936,939],{"class":122,"line":123},[120,935,299],{"class":137},[120,937,938],{"class":165}," CacheReader",[120,940,146],{"class":133},[120,942,943,946,948],{"class":122,"line":130},[120,944,945],{"class":314},"    #cache",[120,947,159],{"class":137},[120,949,950],{"class":133}," {};\n",[120,952,953],{"class":122,"line":149},[120,954,221],{"emptyLinePlaceholder":220},[120,956,957,959,962,964,967],{"class":122,"line":178},[120,958,777],{"class":137},[120,960,961],{"class":165}," isCacheReader",[120,963,134],{"class":133},[120,965,966],{"class":314},"obj",[120,968,555],{"class":133},[120,970,971],{"class":122,"line":199},[120,972,973],{"class":126},"        \u002F\u002F obj nesnesinin içinde #cache private alanı var mı kontrolü\n",[120,975,976,978,981,983],{"class":122,"line":211},[120,977,404],{"class":137},[120,979,980],{"class":133}," #cache ",[120,982,925],{"class":137},[120,984,985],{"class":133}," obj;\n",[120,987,988],{"class":122,"line":217},[120,989,384],{"class":133},[120,991,992],{"class":122,"line":224},[120,993,421],{"class":133},[120,995,996],{"class":122,"line":230},[120,997,221],{"emptyLinePlaceholder":220},[120,999,1000,1002,1005,1007,1009,1011],{"class":122,"line":250},[120,1001,233],{"class":137},[120,1003,1004],{"class":155}," reader",[120,1006,159],{"class":137},[120,1008,439],{"class":137},[120,1010,938],{"class":165},[120,1012,196],{"class":133},[120,1014,1015,1017,1020,1022],{"class":122,"line":267},[120,1016,233],{"class":137},[120,1018,1019],{"class":155}," plainObject",[120,1021,159],{"class":137},[120,1023,950],{"class":133},[120,1025,1026],{"class":122,"line":387},[120,1027,221],{"emptyLinePlaceholder":220},[120,1029,1030,1032,1034,1037,1040,1043],{"class":122,"line":393},[120,1031,270],{"class":133},[120,1033,205],{"class":165},[120,1035,1036],{"class":133},"(CacheReader.",[120,1038,1039],{"class":165},"isCacheReader",[120,1041,1042],{"class":133},"(reader)); ",[120,1044,1045],{"class":126},"\u002F\u002F true\n",[120,1047,1048,1050,1052,1054,1056,1059],{"class":122,"line":401},[120,1049,270],{"class":133},[120,1051,205],{"class":165},[120,1053,1036],{"class":133},[120,1055,1039],{"class":165},[120,1057,1058],{"class":133},"(plainObject)); ",[120,1060,1061],{"class":126},"\u002F\u002F false\n",[93,1063,1065],{"id":1064},"at-metodu",".at() Metodu",[11,1067,1068,1069,1072,1073,1075],{},"Dizilerin (Array), metinlerin (String) ve TypedArray'lerin son elemanına veya sondan geriye doğru elemanlarına erişmek her zaman can sıkıcıydı. Klasik yöntemle ",[40,1070,1071],{},"arr[arr.length - 1]"," yazmak yerine, ES13 ile gelen ",[40,1074,70],{}," metodu sayesinde doğrudan negatif indeksler kullanabiliyoruz.",[111,1077,1079],{"className":113,"code":1078,"language":115,"meta":116,"style":116},"const colors = ['red', 'green', 'blue'];\n\n\u002F\u002F Son elemanı almak için\nconsole.log(colors.at(-1)); \u002F\u002F \"blue\"\n\n\u002F\u002F Sondan ikinci eleman için\nconsole.log(colors.at(-2)); \u002F\u002F \"green\"\n\nconst str = \"evrenbal\";\nconsole.log(str.at(-1)); \u002F\u002F \"l\"\n",[40,1080,1081,1110,1114,1119,1145,1149,1154,1176,1180,1194],{"__ignoreMap":116},[120,1082,1083,1085,1088,1090,1093,1096,1099,1102,1104,1107],{"class":122,"line":123},[120,1084,233],{"class":137},[120,1086,1087],{"class":155}," colors",[120,1089,159],{"class":137},[120,1091,1092],{"class":133}," [",[120,1094,1095],{"class":171},"'red'",[120,1097,1098],{"class":133},", ",[120,1100,1101],{"class":171},"'green'",[120,1103,1098],{"class":133},[120,1105,1106],{"class":171},"'blue'",[120,1108,1109],{"class":133},"];\n",[120,1111,1112],{"class":122,"line":130},[120,1113,221],{"emptyLinePlaceholder":220},[120,1115,1116],{"class":122,"line":149},[120,1117,1118],{"class":126},"\u002F\u002F Son elemanı almak için\n",[120,1120,1121,1123,1125,1128,1131,1133,1136,1139,1142],{"class":122,"line":178},[120,1122,270],{"class":133},[120,1124,205],{"class":165},[120,1126,1127],{"class":133},"(colors.",[120,1129,1130],{"class":165},"at",[120,1132,134],{"class":133},[120,1134,1135],{"class":137},"-",[120,1137,1138],{"class":155},"1",[120,1140,1141],{"class":133},")); ",[120,1143,1144],{"class":126},"\u002F\u002F \"blue\"\n",[120,1146,1147],{"class":122,"line":199},[120,1148,221],{"emptyLinePlaceholder":220},[120,1150,1151],{"class":122,"line":211},[120,1152,1153],{"class":126},"\u002F\u002F Sondan ikinci eleman için\n",[120,1155,1156,1158,1160,1162,1164,1166,1168,1171,1173],{"class":122,"line":217},[120,1157,270],{"class":133},[120,1159,205],{"class":165},[120,1161,1127],{"class":133},[120,1163,1130],{"class":165},[120,1165,134],{"class":133},[120,1167,1135],{"class":137},[120,1169,1170],{"class":155},"2",[120,1172,1141],{"class":133},[120,1174,1175],{"class":126},"\u002F\u002F \"green\"\n",[120,1177,1178],{"class":122,"line":224},[120,1179,221],{"emptyLinePlaceholder":220},[120,1181,1182,1184,1187,1189,1192],{"class":122,"line":230},[120,1183,233],{"class":137},[120,1185,1186],{"class":155}," str",[120,1188,159],{"class":137},[120,1190,1191],{"class":171}," \"evrenbal\"",[120,1193,323],{"class":133},[120,1195,1196,1198,1200,1203,1205,1207,1209,1211,1213],{"class":122,"line":250},[120,1197,270],{"class":133},[120,1199,205],{"class":165},[120,1201,1202],{"class":133},"(str.",[120,1204,1130],{"class":165},[120,1206,134],{"class":133},[120,1208,1135],{"class":137},[120,1210,1138],{"class":155},[120,1212,1141],{"class":133},[120,1214,1215],{"class":126},"\u002F\u002F \"l\"\n",[93,1217,76],{"id":1218},"objecthasown",[11,1220,1221,1222,1225,1226,1229,1230,1232],{},"Nesnelerin doğrudan kendisine ait bir özelliği (property) barındırıp barındırmadığını test etmek için geleneksel olarak ",[40,1223,1224],{},"hasOwnProperty"," metodunu kullanıyorduk. Ancak ",[40,1227,1228],{},"Object.create(null)"," ile oluşturulan nesnelerin prototipi olmadığından bu metot hata fırlatıyordu. ES13 ile gelen ",[40,1231,76],{}," statik metodu, bu kontrolü her nesne tipi için güvenli ve hatasız yapmamızı sağlar.",[111,1234,1236],{"className":113,"code":1235,"language":115,"meta":116,"style":116},"const user = Object.create(null);\nuser.age = 30;\n\n\u002F\u002F ES13 öncesi (Hata fırlatır)\n\u002F\u002F user.hasOwnProperty('age'); \n\n\u002F\u002F ES13 öncesi güvenli yöntem (Uzun ve çirkin)\nObject.prototype.hasOwnProperty.call(user, 'age'); \u002F\u002F true\n\n\u002F\u002F ES13 sonrası (Kısa ve güvenli)\nconsole.log(Object.hasOwn(user, 'age')); \u002F\u002F true\n",[40,1237,1238,1259,1271,1275,1280,1285,1289,1294,1320,1324,1329],{"__ignoreMap":116},[120,1239,1240,1242,1244,1246,1249,1252,1254,1257],{"class":122,"line":123},[120,1241,233],{"class":137},[120,1243,711],{"class":155},[120,1245,159],{"class":137},[120,1247,1248],{"class":133}," Object.",[120,1250,1251],{"class":165},"create",[120,1253,134],{"class":133},[120,1255,1256],{"class":155},"null",[120,1258,175],{"class":133},[120,1260,1261,1264,1266,1269],{"class":122,"line":130},[120,1262,1263],{"class":133},"user.age ",[120,1265,667],{"class":137},[120,1267,1268],{"class":155}," 30",[120,1270,323],{"class":133},[120,1272,1273],{"class":122,"line":149},[120,1274,221],{"emptyLinePlaceholder":220},[120,1276,1277],{"class":122,"line":178},[120,1278,1279],{"class":126},"\u002F\u002F ES13 öncesi (Hata fırlatır)\n",[120,1281,1282],{"class":122,"line":199},[120,1283,1284],{"class":126},"\u002F\u002F user.hasOwnProperty('age'); \n",[120,1286,1287],{"class":122,"line":211},[120,1288,221],{"emptyLinePlaceholder":220},[120,1290,1291],{"class":122,"line":217},[120,1292,1293],{"class":126},"\u002F\u002F ES13 öncesi güvenli yöntem (Uzun ve çirkin)\n",[120,1295,1296,1299,1301,1304,1307,1310,1313,1316,1318],{"class":122,"line":224},[120,1297,1298],{"class":155},"Object",[120,1300,611],{"class":133},[120,1302,1303],{"class":155},"prototype",[120,1305,1306],{"class":133},".hasOwnProperty.",[120,1308,1309],{"class":165},"call",[120,1311,1312],{"class":133},"(user, ",[120,1314,1315],{"class":171},"'age'",[120,1317,736],{"class":133},[120,1319,1045],{"class":126},[120,1321,1322],{"class":122,"line":230},[120,1323,221],{"emptyLinePlaceholder":220},[120,1325,1326],{"class":122,"line":250},[120,1327,1328],{"class":126},"\u002F\u002F ES13 sonrası (Kısa ve güvenli)\n",[120,1330,1331,1333,1335,1338,1341,1343,1345,1347],{"class":122,"line":267},[120,1332,270],{"class":133},[120,1334,205],{"class":165},[120,1336,1337],{"class":133},"(Object.",[120,1339,1340],{"class":165},"hasOwn",[120,1342,1312],{"class":133},[120,1344,1315],{"class":171},[120,1346,1141],{"class":133},[120,1348,1045],{"class":126},[93,1350,1352],{"id":1351},"error-cause","Error Cause",[11,1354,1355,1356,1359,1360,1362],{},"Bir hatayı yakalayıp (catch) başka bir hata fırlatırken, asıl hatanın kaynağını (tüm stack trace detaylarıyla birlikte) kaybetmemek için yeni ",[40,1357,1358],{},"Error"," nesnesine ",[40,1361,83],{}," seçeneğini ekleyebiliyoruz.",[111,1364,1366],{"className":113,"code":1365,"language":115,"meta":116,"style":116},"function connectDatabase() {\n    try {\n        \u002F\u002F Olmayan bir servise bağlanmayı deneyelim\n        throw new Error(\"Connection Timeout\");\n    } catch (err) {\n        \u002F\u002F Hatanın asıl sebebini (cause) yeni hataya aktarıyoruz\n        throw new Error(\"Database initialization failed\", { cause: err });\n    }\n}\n\ntry {\n    connectDatabase();\n} catch (error) {\n    console.log(error.message); \u002F\u002F \"Database initialization failed\"\n    console.log(error.cause.message); \u002F\u002F \"Connection Timeout\" (Asıl sebep)\n}\n",[40,1367,1368,1378,1385,1390,1407,1418,1423,1439,1443,1447,1451,1458,1465,1475,1487,1499],{"__ignoreMap":116},[120,1369,1370,1373,1376],{"class":122,"line":123},[120,1371,1372],{"class":137},"function",[120,1374,1375],{"class":165}," connectDatabase",[120,1377,355],{"class":133},[120,1379,1380,1383],{"class":122,"line":130},[120,1381,1382],{"class":137},"    try",[120,1384,146],{"class":133},[120,1386,1387],{"class":122,"line":149},[120,1388,1389],{"class":126},"        \u002F\u002F Olmayan bir servise bağlanmayı deneyelim\n",[120,1391,1392,1395,1397,1400,1402,1405],{"class":122,"line":178},[120,1393,1394],{"class":137},"        throw",[120,1396,439],{"class":137},[120,1398,1399],{"class":165}," Error",[120,1401,134],{"class":133},[120,1403,1404],{"class":171},"\"Connection Timeout\"",[120,1406,175],{"class":133},[120,1408,1409,1412,1415],{"class":122,"line":199},[120,1410,1411],{"class":133},"    } ",[120,1413,1414],{"class":137},"catch",[120,1416,1417],{"class":133}," (err) {\n",[120,1419,1420],{"class":122,"line":211},[120,1421,1422],{"class":126},"        \u002F\u002F Hatanın asıl sebebini (cause) yeni hataya aktarıyoruz\n",[120,1424,1425,1427,1429,1431,1433,1436],{"class":122,"line":217},[120,1426,1394],{"class":137},[120,1428,439],{"class":137},[120,1430,1399],{"class":165},[120,1432,134],{"class":133},[120,1434,1435],{"class":171},"\"Database initialization failed\"",[120,1437,1438],{"class":133},", { cause: err });\n",[120,1440,1441],{"class":122,"line":224},[120,1442,384],{"class":133},[120,1444,1445],{"class":122,"line":230},[120,1446,421],{"class":133},[120,1448,1449],{"class":122,"line":250},[120,1450,221],{"emptyLinePlaceholder":220},[120,1452,1453,1456],{"class":122,"line":267},[120,1454,1455],{"class":137},"try",[120,1457,146],{"class":133},[120,1459,1460,1463],{"class":122,"line":387},[120,1461,1462],{"class":165},"    connectDatabase",[120,1464,196],{"class":133},[120,1466,1467,1470,1472],{"class":122,"line":393},[120,1468,1469],{"class":133},"} ",[120,1471,1414],{"class":137},[120,1473,1474],{"class":133}," (error) {\n",[120,1476,1477,1479,1481,1484],{"class":122,"line":401},[120,1478,202],{"class":133},[120,1480,205],{"class":165},[120,1482,1483],{"class":133},"(error.message); ",[120,1485,1486],{"class":126},"\u002F\u002F \"Database initialization failed\"\n",[120,1488,1489,1491,1493,1496],{"class":122,"line":413},[120,1490,202],{"class":133},[120,1492,205],{"class":165},[120,1494,1495],{"class":133},"(error.cause.message); ",[120,1497,1498],{"class":126},"\u002F\u002F \"Connection Timeout\" (Asıl sebep)\n",[120,1500,1501],{"class":122,"line":418},[120,1502,421],{"class":133},[93,1504,1506],{"id":1505},"regexp-match-indices-d-bayrağı","RegExp Match Indices (\u002Fd Bayrağı)",[11,1508,1509,1510,1512,1513,1516],{},"Düzenli ifadelerde (RegExp) ",[40,1511,90],{}," bayrağını (flag) kullandığımızda, eşleşen grupların metin içerisindeki başlangıç ve bitiş indekslerini içeren ",[40,1514,1515],{},"indices"," isimli bir dizi elde ederiz. Bu, metin editörlerinde veya parse işlemlerinde konum tespiti yaparken büyük kolaylık sağlar.",[111,1518,1520],{"className":113,"code":1519,"language":115,"meta":116,"style":116},"const regex = \u002Fevren\u002Fd;\nconst text = \"Merhaba evrenbal\";\nconst match = regex.exec(text);\n\n\u002F\u002F Eşleşmenin başlangıç ve bitiş indeksleri\nconsole.log(match.indices[0]); \u002F\u002F [8, 13] (e ve n harfleri arası)\n",[40,1521,1522,1546,1560,1578,1582,1587],{"__ignoreMap":116},[120,1523,1524,1526,1529,1531,1534,1538,1541,1544],{"class":122,"line":123},[120,1525,233],{"class":137},[120,1527,1528],{"class":155}," regex",[120,1530,159],{"class":137},[120,1532,1533],{"class":171}," \u002F",[120,1535,1537],{"class":1536},"sA_wV","evren",[120,1539,1540],{"class":171},"\u002F",[120,1542,1543],{"class":137},"d",[120,1545,323],{"class":133},[120,1547,1548,1550,1553,1555,1558],{"class":122,"line":130},[120,1549,233],{"class":137},[120,1551,1552],{"class":155}," text",[120,1554,159],{"class":137},[120,1556,1557],{"class":171}," \"Merhaba evrenbal\"",[120,1559,323],{"class":133},[120,1561,1562,1564,1567,1569,1572,1575],{"class":122,"line":149},[120,1563,233],{"class":137},[120,1565,1566],{"class":155}," match",[120,1568,159],{"class":137},[120,1570,1571],{"class":133}," regex.",[120,1573,1574],{"class":165},"exec",[120,1576,1577],{"class":133},"(text);\n",[120,1579,1580],{"class":122,"line":178},[120,1581,221],{"emptyLinePlaceholder":220},[120,1583,1584],{"class":122,"line":199},[120,1585,1586],{"class":126},"\u002F\u002F Eşleşmenin başlangıç ve bitiş indeksleri\n",[120,1588,1589,1591,1593,1596,1599,1602],{"class":122,"line":211},[120,1590,270],{"class":133},[120,1592,205],{"class":165},[120,1594,1595],{"class":133},"(match.indices[",[120,1597,1598],{"class":155},"0",[120,1600,1601],{"class":133},"]); ",[120,1603,1604],{"class":126},"\u002F\u002F [8, 13] (e ve n harfleri arası)\n",[1606,1607,1608],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":116,"searchDepth":130,"depth":130,"links":1610},[1611],{"id":28,"depth":130,"text":29,"children":1612},[1613,1614,1615,1616,1617,1618,1619,1620,1621],{"id":95,"depth":149,"text":42},{"id":277,"depth":149,"text":278},{"id":497,"depth":149,"text":498},{"id":750,"depth":149,"text":751},{"id":918,"depth":149,"text":919},{"id":1064,"depth":149,"text":1065},{"id":1218,"depth":149,"text":76},{"id":1351,"depth":149,"text":1352},{"id":1505,"depth":149,"text":1506},[1623],"technical",null,"2026-06-20","ECMAScript 2022 (ES13) ile gelen yenilikler. (İçerik hazırlanıyor.)",false,"md","\u002Fimages\u002Fhero\u002Fes13.avif","tr",{},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir",{"title":6,"description":1626},"es13-nedir-ecmascript-2022-nedir","tr\u002Fes13-nedir-ecmascript-2022-nedir",[1637,1638,115],"ecma","ecmascript","cvu8Ce2ORjOjrZ31lgo1YD1N85dc7w7kn5INoMjMR-k",{"prev":1641,"next":1644,"others":1647,"lucky":1768,"readingTime":178},{"path":1642,"title":1643},"\u002Ftr\u002Fvite-nedir","Vite Nedir? Modern Web Geliştirme ve Paketleme Aracı",{"path":1645,"title":1646},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",[1648,1651,1654,1657,1660,1663,1666,1669,1672,1675,1678,1681,1684,1687,1690,1693,1696,1699,1702,1705,1708,1711,1714,1717,1720,1723,1726,1729,1732,1735,1738,1741,1744,1747,1750,1753,1756,1759,1762,1765],{"path":1649,"title":1650},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight Tasarım Deseni Nedir?",{"path":1652,"title":1653},"\u002Ftr\u002Fself-hosted-api-gateway-nasil-kurulur-kapsamli-rehber","Self-Hosted API Gateway Nasıl Kurulur? Kapsamlı Rehber",{"path":1655,"title":1656},"\u002Ftr\u002Fgraylog-nedir-docker-ile-nasil-kurulur","Graylog Nedir? Docker Compose ile Adım Adım Kurulum Rehberi",{"path":1658,"title":1659},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator Tasarım Deseni Nedir?",{"path":1661,"title":1662},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge Tasarım Deseni Nedir?",{"path":1664,"title":1665},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer Tasarım Deseni Nedir?",{"path":1667,"title":1668},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":1670,"title":1671},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":1673,"title":1674},"\u002Ftr\u002Fopenlitespeed-ve-litespeed-enterprisei-reverse-proxy-olarak-kullanmak","OpenLiteSpeed ve LiteSpeed Enterprise Sunucularını Reverse Proxy Olarak Kullanmak",{"path":1676,"title":1677},"\u002Ftr\u002Ftailwind-css-nerede-kullanilir-tailwind-css-nerede-kullanilmaz","Tailwind CSS Nerede Kullanılır? Tailwind CSS Nerede Kullanılmaz?",{"path":1679,"title":1680},"\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir","ES15 nedir? ECMAScript 2024 nedir?",{"path":1682,"title":1683},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy Tasarım Deseni Nedir?",{"path":1685,"title":1686},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu",{"path":1688,"title":1689},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility Deseni Nedir?",{"path":1691,"title":1692},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command Tasarım Deseni Nedir?",{"path":1694,"title":1695},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":1697,"title":1698},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter Tasarım Deseni Nedir?",{"path":1700,"title":1701},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder Tasarım Deseni Nedir?",{"path":1703,"title":1704},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir","Memento Tasarım Deseni Nedir?",{"path":1706,"title":1707},"\u002Ftr\u002Fes6-nedir-ecmascript-2015-nedir","ES6 Nedir? ECMAScript 2015 Nedir?",{"path":1709,"title":1710},"\u002Ftr\u002Fvue-js-nedir","Vue.js Nedir? Yeni Başlayanlar İçin Rehber",{"path":1712,"title":1713},"\u002Ftr\u002Fes10-nedir-ecmascript-2019-nedir","ES10 Nedir? ECMAScript 2019 Nedir?",{"path":1715,"title":1716},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite Tasarım Deseni Nedir?",{"path":1718,"title":1719},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı",{"path":1721,"title":1722},"\u002Ftr\u002Fgo-ve-degiskenler","Go ve Değişkenler",{"path":1724,"title":1725},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor Tasarım Deseni Nedir?",{"path":1727,"title":1728},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",{"path":1730,"title":1731},"\u002Ftr\u002Frest-api-tasarimi","REST API Tasarım İncelikleri",{"path":1733,"title":1734},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu",{"path":1736,"title":1737},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1739,"title":1740},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State Tasarım Deseni Nedir?",{"path":1742,"title":1743},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler",{"path":1745,"title":1746},"\u002Ftr\u002Fphp-generator-ve-iterator-farki","PHP'de Generator ve Iterator Arasındaki Temel Farklar",{"path":1748,"title":1749},"\u002Ftr\u002Ftailwind-css-just-in-time-modu","Tailwind CSS Just-in-Time (JIT) Modu Nedir?",{"path":1751,"title":1752},"\u002Ftr\u002Frest-api-hata-yonetimi","REST Api Hata Yönetimi",{"path":1754,"title":1755},"\u002Ftr\u002Fmutable-ve-immutable-kavrami","Mutable ve Immutable Kavramları Nedir?",{"path":1757,"title":1758},"\u002Ftr\u002Fwindows-10-golang-kurulumu","Windows 10 ve 11'de Golang Kurulumu ve GOPATH Yapılandırması",{"path":1760,"title":1761},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",{"path":1763,"title":1764},"\u002Ftr\u002Fprogralama-ipucu-yoda-gosterimi","Yoda Koşulları (Yoda Conditions) Nedir? Programlama İpucu",{"path":1766,"title":1767},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":1769,"title":1770},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",[1772,1773,1774,1775],{"path":1645,"title":1646,"date":1625},{"path":1679,"title":1680,"date":1625},{"path":1727,"title":1728,"date":1625},{"path":1776,"title":1777,"date":1625},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?",[1779,1783,1787],{"path":1780,"title":1781,"date":1782},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri","2021-09-28",{"path":1784,"title":1785,"date":1786},"\u002Ftr\u002Frestful-api-bilesenleri","RESTful API Bileşenleri","2021-01-19",{"path":1788,"title":1789,"date":1790},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map","2021-10-13",1782141997520]