[{"data":1,"prerenderedAt":1127},["ShallowReactive",2],{"post-\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir":3},{"page":4,"translation":965,"nav":981,"related":1111,"random":1118},{"id":5,"title":6,"body":7,"categories":963,"category":965,"date":966,"description":967,"draft":968,"extension":969,"image":970,"kind":965,"lang":971,"meta":972,"navigation":221,"path":973,"readingTime":153,"seo":974,"slug":975,"stem":976,"tags":977,"translationKey":965,"type":964,"updated":965,"__hash__":980},"postsTr\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir.md","ES15 nedir? ECMAScript 2024 nedir?",{"type":8,"value":9,"toc":953},"minimark",[10,19,25,30,33,80,85,97,347,350,369,557,561,572,651,655,669,736,740,751,836,839,845,949],[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 2024 (ES15) sürümüyle gelen yenilikleri inceliyoruz.",[11,20,21],{},[22,23,24],"strong",{},"ES15 (ECMAScript 2024), 2024 yılında yayınlanan 15. ECMAScript sürümüdür.",[26,27,29],"h2",{"id":28},"es15-ile-gelen-yenilikler","ES15 ile gelen yenilikler",[11,31,32],{},"ES15 ile birlikte tanımlanan yeni özellikler şunlar;",[34,35,36,48,54,57,67,74],"ul",{},[37,38,39,43,44,47],"li",{},[40,41,42],"code",{},"Object.groupBy()"," ve ",[40,45,46],{},"Map.groupBy()"," (Gruplama metotları)",[37,49,50,53],{},[40,51,52],{},"Promise.withResolvers()"," (Kestirme Promise oluşturucu)",[37,55,56],{},"ArrayBuffer resize ve transfer özellikleri",[37,58,59,62,63,66],{},[40,60,61],{},"String.prototype.isWellFormed()"," \u002F ",[40,64,65],{},"toWellFormed()"," (Unicode format kontrolleri)",[37,68,69,70,73],{},"RegExp ",[40,71,72],{},"v"," bayrağı (unicodeSets)",[37,75,76,79],{},[40,77,78],{},"Atomics.waitAsync()"," (Asenkron atomik bekletme)",[81,82,84],"h3",{"id":83},"objectgroupby-ve-mapgroupby","Object.groupBy() ve Map.groupBy()",[11,86,87,88,91,92,43,94,96],{},"Bir dizideki veya koleksiyondaki verileri belirli bir kritere göre gruplamak yazılımda çok sık ihtiyaç duyduğumuz bir işlemdir. Geleneksel olarak bunu ",[40,89,90],{},"reduce"," metotlarıyla veya dış kütüphanelerle (Lodash vb.) yapıyorduk. ES15 ile gelen ",[40,93,42],{},[40,95,46],{}," statik metotları sayesinde bunu artık yerleşik olarak yapabiliyoruz.",[98,99,104],"pre",{"className":100,"code":101,"language":102,"meta":103,"style":103},"language-javascript shiki shiki-themes github-light github-dark","const inventory = [\n  { name: \"Elma\", type: \"meyve\", quantity: 5 },\n  { name: \"Ispanak\", type: \"sebze\", quantity: 2 },\n  { name: \"Muz\", type: \"meyve\", quantity: 12 },\n  { name: \"Kiraz\", type: \"meyve\", quantity: 0 }\n];\n\n\u002F\u002F Meyve ve sebze tiplerine göre gruplayalım\nconst result = Object.groupBy(inventory, ({ type }) => type);\nconsole.log(result);\n\u002F* Çıktı:\n{\n  meyve: [\n    { name: \"Elma\", type: \"meyve\", quantity: 5 },\n    { name: \"Muz\", type: \"meyve\", quantity: 12 },\n    { name: \"Kiraz\", type: \"meyve\", quantity: 0 }\n  ],\n  sebze: [\n    { name: \"Ispanak\", type: \"sebze\", quantity: 2 }\n  ]\n}\n*\u002F\n","javascript","",[40,105,106,126,151,171,190,210,216,223,230,263,275,281,287,293,299,305,311,317,323,329,335,341],{"__ignoreMap":103},[107,108,111,115,119,122],"span",{"class":109,"line":110},"line",1,[107,112,114],{"class":113},"szBVR","const",[107,116,118],{"class":117},"sj4cs"," inventory",[107,120,121],{"class":113}," =",[107,123,125],{"class":124},"sVt8B"," [\n",[107,127,129,132,136,139,142,145,148],{"class":109,"line":128},2,[107,130,131],{"class":124},"  { name: ",[107,133,135],{"class":134},"sZZnC","\"Elma\"",[107,137,138],{"class":124},", type: ",[107,140,141],{"class":134},"\"meyve\"",[107,143,144],{"class":124},", quantity: ",[107,146,147],{"class":117},"5",[107,149,150],{"class":124}," },\n",[107,152,154,156,159,161,164,166,169],{"class":109,"line":153},3,[107,155,131],{"class":124},[107,157,158],{"class":134},"\"Ispanak\"",[107,160,138],{"class":124},[107,162,163],{"class":134},"\"sebze\"",[107,165,144],{"class":124},[107,167,168],{"class":117},"2",[107,170,150],{"class":124},[107,172,174,176,179,181,183,185,188],{"class":109,"line":173},4,[107,175,131],{"class":124},[107,177,178],{"class":134},"\"Muz\"",[107,180,138],{"class":124},[107,182,141],{"class":134},[107,184,144],{"class":124},[107,186,187],{"class":117},"12",[107,189,150],{"class":124},[107,191,193,195,198,200,202,204,207],{"class":109,"line":192},5,[107,194,131],{"class":124},[107,196,197],{"class":134},"\"Kiraz\"",[107,199,138],{"class":124},[107,201,141],{"class":134},[107,203,144],{"class":124},[107,205,206],{"class":117},"0",[107,208,209],{"class":124}," }\n",[107,211,213],{"class":109,"line":212},6,[107,214,215],{"class":124},"];\n",[107,217,219],{"class":109,"line":218},7,[107,220,222],{"emptyLinePlaceholder":221},true,"\n",[107,224,226],{"class":109,"line":225},8,[107,227,229],{"class":228},"sJ8bj","\u002F\u002F Meyve ve sebze tiplerine göre gruplayalım\n",[107,231,233,235,238,240,243,247,250,254,257,260],{"class":109,"line":232},9,[107,234,114],{"class":113},[107,236,237],{"class":117}," result",[107,239,121],{"class":113},[107,241,242],{"class":124}," Object.",[107,244,246],{"class":245},"sScJk","groupBy",[107,248,249],{"class":124},"(inventory, ({ ",[107,251,253],{"class":252},"s4XuR","type",[107,255,256],{"class":124}," }) ",[107,258,259],{"class":113},"=>",[107,261,262],{"class":124}," type);\n",[107,264,266,269,272],{"class":109,"line":265},10,[107,267,268],{"class":124},"console.",[107,270,271],{"class":245},"log",[107,273,274],{"class":124},"(result);\n",[107,276,278],{"class":109,"line":277},11,[107,279,280],{"class":228},"\u002F* Çıktı:\n",[107,282,284],{"class":109,"line":283},12,[107,285,286],{"class":228},"{\n",[107,288,290],{"class":109,"line":289},13,[107,291,292],{"class":228},"  meyve: [\n",[107,294,296],{"class":109,"line":295},14,[107,297,298],{"class":228},"    { name: \"Elma\", type: \"meyve\", quantity: 5 },\n",[107,300,302],{"class":109,"line":301},15,[107,303,304],{"class":228},"    { name: \"Muz\", type: \"meyve\", quantity: 12 },\n",[107,306,308],{"class":109,"line":307},16,[107,309,310],{"class":228},"    { name: \"Kiraz\", type: \"meyve\", quantity: 0 }\n",[107,312,314],{"class":109,"line":313},17,[107,315,316],{"class":228},"  ],\n",[107,318,320],{"class":109,"line":319},18,[107,321,322],{"class":228},"  sebze: [\n",[107,324,326],{"class":109,"line":325},19,[107,327,328],{"class":228},"    { name: \"Ispanak\", type: \"sebze\", quantity: 2 }\n",[107,330,332],{"class":109,"line":331},20,[107,333,334],{"class":228},"  ]\n",[107,336,338],{"class":109,"line":337},21,[107,339,340],{"class":228},"}\n",[107,342,344],{"class":109,"line":343},22,[107,345,346],{"class":228},"*\u002F\n",[81,348,52],{"id":349},"promisewithresolvers",[11,351,352,353,356,357,360,361,363,364,43,366,368],{},"Bazen bir Promise oluştururken, o Promise'in ",[40,354,355],{},"resolve"," veya ",[40,358,359],{},"reject"," fonksiyonlarını dışarıdan (Promise dışındaki bir kapsamdan\u002Fscope'tan) çağırmak isteriz. ES15 ile gelen ",[40,362,52],{}," metodu; bir Promise nesnesini, onun ",[40,365,355],{},[40,367,359],{}," tetikleyicileriyle birlikte tek bir nesne olarak bize döner.",[98,370,372],{"className":100,"code":371,"language":102,"meta":103,"style":103},"\u002F\u002F ES15 öncesi\nlet resolveFn, rejectFn;\nconst oldPromise = new Promise((resolve, reject) => {\n    resolveFn = resolve;\n    rejectFn = reject;\n});\n\n\u002F\u002F ES15 sonrası (Kısa ve temiz)\nconst { promise, resolve, reject } = Promise.withResolvers();\n\n\u002F\u002F Dışarıdan tetikleyebiliyoruz\nsetTimeout(() => resolve(\"İşlem başarıyla tamamlandı!\"), 1000);\n\nconst data = await promise;\nconsole.log(data); \u002F\u002F \"İşlem başarıyla tamamlandı!\"\n",[40,373,374,379,387,420,431,441,446,450,455,489,493,498,526,530,545],{"__ignoreMap":103},[107,375,376],{"class":109,"line":110},[107,377,378],{"class":228},"\u002F\u002F ES15 öncesi\n",[107,380,381,384],{"class":109,"line":128},[107,382,383],{"class":113},"let",[107,385,386],{"class":124}," resolveFn, rejectFn;\n",[107,388,389,391,394,396,399,402,405,407,410,412,415,417],{"class":109,"line":153},[107,390,114],{"class":113},[107,392,393],{"class":117}," oldPromise",[107,395,121],{"class":113},[107,397,398],{"class":113}," new",[107,400,401],{"class":117}," Promise",[107,403,404],{"class":124},"((",[107,406,355],{"class":252},[107,408,409],{"class":124},", ",[107,411,359],{"class":252},[107,413,414],{"class":124},") ",[107,416,259],{"class":113},[107,418,419],{"class":124}," {\n",[107,421,422,425,428],{"class":109,"line":173},[107,423,424],{"class":124},"    resolveFn ",[107,426,427],{"class":113},"=",[107,429,430],{"class":124}," resolve;\n",[107,432,433,436,438],{"class":109,"line":192},[107,434,435],{"class":124},"    rejectFn ",[107,437,427],{"class":113},[107,439,440],{"class":124}," reject;\n",[107,442,443],{"class":109,"line":212},[107,444,445],{"class":124},"});\n",[107,447,448],{"class":109,"line":218},[107,449,222],{"emptyLinePlaceholder":221},[107,451,452],{"class":109,"line":225},[107,453,454],{"class":228},"\u002F\u002F ES15 sonrası (Kısa ve temiz)\n",[107,456,457,459,462,465,467,469,471,473,476,478,480,483,486],{"class":109,"line":232},[107,458,114],{"class":113},[107,460,461],{"class":124}," { ",[107,463,464],{"class":117},"promise",[107,466,409],{"class":124},[107,468,355],{"class":117},[107,470,409],{"class":124},[107,472,359],{"class":117},[107,474,475],{"class":124}," } ",[107,477,427],{"class":113},[107,479,401],{"class":117},[107,481,482],{"class":124},".",[107,484,485],{"class":245},"withResolvers",[107,487,488],{"class":124},"();\n",[107,490,491],{"class":109,"line":265},[107,492,222],{"emptyLinePlaceholder":221},[107,494,495],{"class":109,"line":277},[107,496,497],{"class":228},"\u002F\u002F Dışarıdan tetikleyebiliyoruz\n",[107,499,500,503,506,508,511,514,517,520,523],{"class":109,"line":283},[107,501,502],{"class":245},"setTimeout",[107,504,505],{"class":124},"(() ",[107,507,259],{"class":113},[107,509,510],{"class":245}," resolve",[107,512,513],{"class":124},"(",[107,515,516],{"class":134},"\"İşlem başarıyla tamamlandı!\"",[107,518,519],{"class":124},"), ",[107,521,522],{"class":117},"1000",[107,524,525],{"class":124},");\n",[107,527,528],{"class":109,"line":289},[107,529,222],{"emptyLinePlaceholder":221},[107,531,532,534,537,539,542],{"class":109,"line":295},[107,533,114],{"class":113},[107,535,536],{"class":117}," data",[107,538,121],{"class":113},[107,540,541],{"class":113}," await",[107,543,544],{"class":124}," promise;\n",[107,546,547,549,551,554],{"class":109,"line":301},[107,548,268],{"class":124},[107,550,271],{"class":245},[107,552,553],{"class":124},"(data); ",[107,555,556],{"class":228},"\u002F\u002F \"İşlem başarıyla tamamlandı!\"\n",[81,558,560],{"id":559},"arraybuffer-yenilikleri-resize-ve-transfer","ArrayBuffer Yenilikleri (Resize ve Transfer)",[11,562,563,564,567,568,571],{},"Düşük seviyeli veri işlemleri (örneğin WebGL, WebAssembly veya ses\u002Fvideo buffer işlemleri) gerçekleştiren geliştiriciler için ArrayBuffer boyutlandırma yetenekleri eklendi. Artık bir ArrayBuffer nesnesinin maksimum boyutunu baştan belirleyerek çalışma zamanında boyutunu değiştirebiliyor (",[40,565,566],{},"resize()",") ya da veriyi kopyalamadan başka bir buffer'a aktarabiliyoruz (",[40,569,570],{},"transfer()",").",[98,573,575],{"className":100,"code":574,"language":102,"meta":103,"style":103},"const buffer = new ArrayBuffer(8, { maxByteLength: 16 });\nconsole.log(buffer.byteLength); \u002F\u002F 8\n\n\u002F\u002F Buffer'ı yeniden boyutlandıralım\nbuffer.resize(12);\nconsole.log(buffer.byteLength); \u002F\u002F 12\n",[40,576,577,605,617,621,626,640],{"__ignoreMap":103},[107,578,579,581,584,586,588,591,593,596,599,602],{"class":109,"line":110},[107,580,114],{"class":113},[107,582,583],{"class":117}," buffer",[107,585,121],{"class":113},[107,587,398],{"class":113},[107,589,590],{"class":245}," ArrayBuffer",[107,592,513],{"class":124},[107,594,595],{"class":117},"8",[107,597,598],{"class":124},", { maxByteLength: ",[107,600,601],{"class":117},"16",[107,603,604],{"class":124}," });\n",[107,606,607,609,611,614],{"class":109,"line":128},[107,608,268],{"class":124},[107,610,271],{"class":245},[107,612,613],{"class":124},"(buffer.byteLength); ",[107,615,616],{"class":228},"\u002F\u002F 8\n",[107,618,619],{"class":109,"line":153},[107,620,222],{"emptyLinePlaceholder":221},[107,622,623],{"class":109,"line":173},[107,624,625],{"class":228},"\u002F\u002F Buffer'ı yeniden boyutlandıralım\n",[107,627,628,631,634,636,638],{"class":109,"line":192},[107,629,630],{"class":124},"buffer.",[107,632,633],{"class":245},"resize",[107,635,513],{"class":124},[107,637,187],{"class":117},[107,639,525],{"class":124},[107,641,642,644,646,648],{"class":109,"line":212},[107,643,268],{"class":124},[107,645,271],{"class":245},[107,647,613],{"class":124},[107,649,650],{"class":228},"\u002F\u002F 12\n",[81,652,654],{"id":653},"iswellformed-ve-towellformed-metotları","isWellFormed() ve toWellFormed() Metotları",[11,656,657,658,661,662,664,665,668],{},"JavaScript, dize (string) karakterlerini UTF-16 kod üniteleri olarak temsil eder. Bazen düzgün oluşturulmamış (eksik veya hatalı eşleşen) surrogate çiftleri (surrogate pairs) içeren metinler hatalara neden olur. ",[40,659,660],{},"isWellFormed()"," metodu dizedeki UTF-16 surrogate çiftlerinin düzgün biçimlendirilip biçimlendirilmediğini kontrol eder. ",[40,663,65],{}," ise hatalı karakterleri güvenli Unicode yerine koyma karakteri (",[40,666,667],{},"U+FFFD",") ile değiştirerek temiz bir dize üretir.",[98,670,672],{"className":100,"code":671,"language":102,"meta":103,"style":103},"const invalidString = \"ab\\uD800c\"; \u002F\u002F Yarım kalmış surrogate karakter\n\nconsole.log(invalidString.isWellFormed()); \u002F\u002F false\nconsole.log(invalidString.toWellFormed()); \u002F\u002F \"abc\" (Temizlenmiş)\n",[40,673,674,698,702,720],{"__ignoreMap":103},[107,675,676,678,681,683,686,689,692,695],{"class":109,"line":110},[107,677,114],{"class":113},[107,679,680],{"class":117}," invalidString",[107,682,121],{"class":113},[107,684,685],{"class":134}," \"ab",[107,687,688],{"class":117},"\\uD800",[107,690,691],{"class":134},"c\"",[107,693,694],{"class":124},"; ",[107,696,697],{"class":228},"\u002F\u002F Yarım kalmış surrogate karakter\n",[107,699,700],{"class":109,"line":128},[107,701,222],{"emptyLinePlaceholder":221},[107,703,704,706,708,711,714,717],{"class":109,"line":153},[107,705,268],{"class":124},[107,707,271],{"class":245},[107,709,710],{"class":124},"(invalidString.",[107,712,713],{"class":245},"isWellFormed",[107,715,716],{"class":124},"()); ",[107,718,719],{"class":228},"\u002F\u002F false\n",[107,721,722,724,726,728,731,733],{"class":109,"line":173},[107,723,268],{"class":124},[107,725,271],{"class":245},[107,727,710],{"class":124},[107,729,730],{"class":245},"toWellFormed",[107,732,716],{"class":124},[107,734,735],{"class":228},"\u002F\u002F \"abc\" (Temizlenmiş)\n",[81,737,739],{"id":738},"regexp-v-bayrağı-unicodesets","RegExp v Bayrağı (unicodeSets)",[11,741,742,743,746,747,750],{},"Düzenli ifadelerdeki eski ",[40,744,745],{},"\u002Fu"," (unicode) bayrağının yerini alan ",[40,748,749],{},"\u002Fv"," (unicodeSets) bayrağı, Unicode karakter kümeleri üzerinde kesişim, çıkarma ve fark gibi küme işlemlerini doğrudan Regex içerisinde yapabilmemize olanak tanır.",[98,752,754],{"className":100,"code":753,"language":102,"meta":103,"style":103},"\u002F\u002F Sadece temel Latin alfabesi harflerini eşleştiren ancak sesli harfleri hariç tutan regex\n\u002F\u002F [a-z--[aeiou]]\nconst regex = \u002F[a-z--[aeiou]]\u002Fv;\nconsole.log(regex.test('b')); \u002F\u002F true\nconsole.log(regex.test('a')); \u002F\u002F false (Hariç tutuldu)\n",[40,755,756,761,766,793,816],{"__ignoreMap":103},[107,757,758],{"class":109,"line":110},[107,759,760],{"class":228},"\u002F\u002F Sadece temel Latin alfabesi harflerini eşleştiren ancak sesli harfleri hariç tutan regex\n",[107,762,763],{"class":109,"line":128},[107,764,765],{"class":228},"\u002F\u002F [a-z--[aeiou]]\n",[107,767,768,770,773,775,778,781,785,788,790],{"class":109,"line":153},[107,769,114],{"class":113},[107,771,772],{"class":117}," regex",[107,774,121],{"class":113},[107,776,777],{"class":134}," \u002F",[107,779,780],{"class":117},"[a-z--[aeiou]",[107,782,784],{"class":783},"sA_wV","]",[107,786,787],{"class":134},"\u002F",[107,789,72],{"class":113},[107,791,792],{"class":124},";\n",[107,794,795,797,799,802,805,807,810,813],{"class":109,"line":173},[107,796,268],{"class":124},[107,798,271],{"class":245},[107,800,801],{"class":124},"(regex.",[107,803,804],{"class":245},"test",[107,806,513],{"class":124},[107,808,809],{"class":134},"'b'",[107,811,812],{"class":124},")); ",[107,814,815],{"class":228},"\u002F\u002F true\n",[107,817,818,820,822,824,826,828,831,833],{"class":109,"line":192},[107,819,268],{"class":124},[107,821,271],{"class":245},[107,823,801],{"class":124},[107,825,804],{"class":245},[107,827,513],{"class":124},[107,829,830],{"class":134},"'a'",[107,832,812],{"class":124},[107,834,835],{"class":228},"\u002F\u002F false (Hariç tutuldu)\n",[81,837,78],{"id":838},"atomicswaitasync",[11,840,841,842,844],{},"Çoklu iş parçacıklı (multithreaded) yapılarda (Web Workers), paylaşımlı bellek (SharedArrayBuffer) üzerindeki verileri asenkron ve bloklamayan (non-blocking) bir şekilde beklemek için ",[40,843,78],{}," metodu eklenmiştir. Bu sayede ana iş parçacığı (main thread) bloke olmadan paylaşılan bellek güncellemelerini bekleyebilir.",[98,846,848],{"className":100,"code":847,"language":102,"meta":103,"style":103},"const sab = new SharedArrayBuffer(1024);\nconst int32 = new Int32Array(sab);\n\n\u002F\u002F int32 dizisinin 0. indeksinin değeri 0 olduğu sürece asenkron bekle\nAtomics.waitAsync(int32, 0, 0).value.then(result => {\n    console.log(\"Paylaşımlı bellek güncellendi!\", result);\n});\n",[40,849,850,871,888,892,897,930,945],{"__ignoreMap":103},[107,851,852,854,857,859,861,864,866,869],{"class":109,"line":110},[107,853,114],{"class":113},[107,855,856],{"class":117}," sab",[107,858,121],{"class":113},[107,860,398],{"class":113},[107,862,863],{"class":245}," SharedArrayBuffer",[107,865,513],{"class":124},[107,867,868],{"class":117},"1024",[107,870,525],{"class":124},[107,872,873,875,878,880,882,885],{"class":109,"line":128},[107,874,114],{"class":113},[107,876,877],{"class":117}," int32",[107,879,121],{"class":113},[107,881,398],{"class":113},[107,883,884],{"class":245}," Int32Array",[107,886,887],{"class":124},"(sab);\n",[107,889,890],{"class":109,"line":153},[107,891,222],{"emptyLinePlaceholder":221},[107,893,894],{"class":109,"line":173},[107,895,896],{"class":228},"\u002F\u002F int32 dizisinin 0. indeksinin değeri 0 olduğu sürece asenkron bekle\n",[107,898,899,902,905,908,910,912,914,917,920,922,925,928],{"class":109,"line":192},[107,900,901],{"class":124},"Atomics.",[107,903,904],{"class":245},"waitAsync",[107,906,907],{"class":124},"(int32, ",[107,909,206],{"class":117},[107,911,409],{"class":124},[107,913,206],{"class":117},[107,915,916],{"class":124},").value.",[107,918,919],{"class":245},"then",[107,921,513],{"class":124},[107,923,924],{"class":252},"result",[107,926,927],{"class":113}," =>",[107,929,419],{"class":124},[107,931,932,935,937,939,942],{"class":109,"line":212},[107,933,934],{"class":124},"    console.",[107,936,271],{"class":245},[107,938,513],{"class":124},[107,940,941],{"class":134},"\"Paylaşımlı bellek güncellendi!\"",[107,943,944],{"class":124},", result);\n",[107,946,947],{"class":109,"line":218},[107,948,445],{"class":124},[950,951,952],"style",{},"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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}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 .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":103,"searchDepth":128,"depth":128,"links":954},[955],{"id":28,"depth":128,"text":29,"children":956},[957,958,959,960,961,962],{"id":83,"depth":153,"text":84},{"id":349,"depth":153,"text":52},{"id":559,"depth":153,"text":560},{"id":653,"depth":153,"text":654},{"id":738,"depth":153,"text":739},{"id":838,"depth":153,"text":78},[964],"technical",null,"2026-06-20","ECMAScript 2024 (ES15) ile gelen yenilikler. (İçerik hazırlanıyor.)",false,"md","\u002Fimages\u002Fhero\u002Fes15.avif","tr",{},"\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir",{"title":6,"description":967},"es15-nedir-ecmascript-2024-nedir","tr\u002Fes15-nedir-ecmascript-2024-nedir",[978,979,102],"ecma","ecmascript","TrbqFM5nhhOfmCYWFtP0nAviCW8xH44N9_LGH7z-f4I",{"prev":982,"next":985,"others":988,"lucky":1108,"readingTime":153},{"path":983,"title":984},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":986,"title":987},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",[989,992,995,998,1001,1004,1007,1010,1013,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1055,1057,1060,1063,1066,1069,1072,1075,1078,1081,1084,1087,1090,1093,1096,1099,1102,1105],{"path":990,"title":991},"\u002Ftr\u002Fphp-generator-ve-iterator-farki","PHP'de Generator ve Iterator Arasındaki Temel Farklar",{"path":993,"title":994},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype Tasarım Deseni Nedir?",{"path":996,"title":997},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":999,"title":1000},"\u002Ftr\u002Fvue-js-nedir","Vue.js Nedir? Yeni Başlayanlar İçin Rehber",{"path":1002,"title":1003},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",{"path":1005,"title":1006},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":1008,"title":1009},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":1011,"title":1012},"\u002Ftr\u002Flitespeed-web-server-performans-artisi","Konfor Alanından Çıkıp, Konforlu Bir VPS'e Geçmek: LiteSpeed Web Server",{"path":1014,"title":1015},"\u002Ftr\u002Fwindows-10-golang-kurulumu","Windows 10 ve 11'de Golang Kurulumu ve GOPATH Yapılandırması",{"path":1017,"title":1018},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy Tasarım Deseni Nedir?",{"path":1020,"title":1021},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","RestApi ve HATEOAS Kavramı",{"path":1023,"title":1024},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1026,"title":1027},"\u002Ftr\u002Fyeni-tema-honeywind","Yeni WordPress Temam Honeywind: Tailwind CSS ve Minimalizm",{"path":1029,"title":1030},"\u002Ftr\u002Fwebpack-nedir","Webpack Nedir? Modern JavaScript Paketleyici Ekosistemi",{"path":1032,"title":1033},"\u002Ftr\u002Fdocker-swarm-nedir","Docker Swarm Nedir?",{"path":1035,"title":1036},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator Tasarım Deseni Nedir?",{"path":1038,"title":1039},"\u002Ftr\u002Fes10-nedir-ecmascript-2019-nedir","ES10 Nedir? ECMAScript 2019 Nedir?",{"path":1041,"title":1042},"\u002Ftr\u002Ftailwind-css-just-in-time-modu","Tailwind CSS Just-in-Time (JIT) Modu Nedir?",{"path":1044,"title":1045},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":1047,"title":1048},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":1050,"title":1051},"\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir","ES9 Nedir? ECMAScript 2018 Nedir?",{"path":1053,"title":1054},"\u002Ftr\u002Fwsl-2-kurulumu-6-kolay-adim","WSL 2 Kurulumu - 6 kolay adım",{"path":16,"title":1056},"ECMAScript Nedir? Bilinmesi Gerekenler...",{"path":1058,"title":1059},"\u002Ftr\u002Fwordpress-yonetici-sifresini-wp-cli-kullanarak-sifirlama","WordPress Yönetici Şifresini WP-CLI Kullanarak Sıfırlama",{"path":1061,"title":1062},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?",{"path":1064,"title":1065},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1067,"title":1068},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder Tasarım Deseni Nedir?",{"path":1070,"title":1071},"\u002Ftr\u002Fdocker-ile-rabbitmq-kurulumu","Docker ile RabbitMQ Kurulumu",{"path":1073,"title":1074},"\u002Ftr\u002Fnext-js-on-bellegi-nasil-yenilenir-on-demand-cache-regeneration","Next.js Önbelleği Nasıl Yenilenir? \"On-Demand Cache Regeneration\"",{"path":1076,"title":1077},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":1079,"title":1080},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI Yapısı Nasıl Olmalı?",{"path":1082,"title":1083},"\u002Ftr\u002Fgo-ve-degiskenler","Go ve Değişkenler",{"path":1085,"title":1086},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?",{"path":1088,"title":1089},"\u002Ftr\u002Faws-ec2-uzerinde-docker-ve-full-stack-web-performansi","AWS EC2 Üzerinde Docker ve Full Stack Web Performansı",{"path":1091,"title":1092},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator Tasarım Deseni Nedir?",{"path":1094,"title":1095},"\u002Ftr\u002Fmerhaba-phalcon-framework","Merhaba Phalcon Framework",{"path":1097,"title":1098},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":1100,"title":1101},"\u002Ftr\u002Froot-yetkisi-olmayan-kullanici-ssh-baglantisini-ssh-baglantisini-ssh-anahtari-ile-nasil-kurabilir","Root yetkisi olmayan kullanıcı, SSH bağlantısını, SSH anahtarı ile nasıl kurabilir?",{"path":1103,"title":1104},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command Tasarım Deseni Nedir?",{"path":1106,"title":1107},"\u002Ftr\u002Fdocker-nedir","Docker Nedir?",{"path":1109,"title":1110},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",[1112,1115,1116,1117],{"path":1113,"title":1114,"date":966},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir","ES13 nedir? ECMAScript 2022 nedir?",{"path":983,"title":984,"date":966},{"path":986,"title":987,"date":966},{"path":1061,"title":1062,"date":966},[1119,1121,1123],{"path":993,"title":994,"date":1120},"2021-08-16",{"path":1064,"title":1065,"date":1122},"2023-01-17",{"path":1124,"title":1125,"date":1126},"\u002Ftr\u002Fcodeserver-nedir-codeserver-nasil-kurulur","Code-Server Nedir? Bulutta VS Code Geliştirme Ortamı Kurulumu","2021-02-21",1782141997592]