[{"data":1,"prerenderedAt":1573},["ShallowReactive",2],{"post-\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir":3},{"page":4,"translation":1410,"nav":1424,"related":1554,"random":1562},{"id":5,"title":6,"body":7,"categories":1408,"category":1410,"date":1411,"description":1412,"draft":1413,"extension":1414,"image":1415,"kind":1410,"lang":82,"meta":1416,"navigation":403,"path":1417,"readingTime":345,"seo":1418,"slug":1419,"stem":1420,"tags":1421,"translationKey":1419,"type":1409,"updated":1422,"__hash__":1423},"postsTr\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir.md","ES9 Nedir? ECMAScript 2018 Nedir?",{"type":8,"value":9,"toc":1394},"minimark",[10,56,67,70,75,174,176,181,184,199,201,205,212,219,234,240,244,247,523,527,530,538,577,590,598,633,639,643,646,786,799,801,805,808,877,880,959,961,965,968,1055,1068,1070,1074,1081,1088,1250,1262,1374,1379,1390],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Özet (TL;DR):",[22,23,24,31,50],"ul",{},[25,26,27,30],"li",{},[18,28,29],{},"ES9 (ES2018) Nedir?:"," Haziran 2018'de yayınlanan, JavaScript'e nesneler için rest\u002Fspread operatörleri, regex iyileştirmeleri ve asenkron iterasyon desteği kazandıran 9. ECMAScript sürümüdür.",[25,32,33,36,37,41,42,45,46,49],{},[18,34,35],{},"Kritik Yenilikler:"," RegExp isimlendirilmiş yakalama grupları, ",[38,39,40],"code",{},"Object Rest\u002FSpread",", ",[38,43,44],{},"Promise.prototype.finally()"," ve ",[38,47,48],{},"for await...of"," döngüsü.",[25,51,52,55],{},[18,53,54],{},"Önemi:"," Özellikle nesne kopyalama\u002Fseçme işlemlerini kolaylaştırmış ve asenkron veri akışlarının (stream) işlenmesini standart hale getirmiştir.",[14,57,58],{},[18,59,60,61,66],{},"ES9 (ECMAScript 2018), Haziran 2018'de yayınlanan 9. ",[62,63,65],"a",{"href":64},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAScript"," sürümüdür.",[68,69],"hr",{},[71,72,74],"h3",{"id":73},"es9-özellikleri-ve-karşılaştırmalı-kullanım","ES9 Özellikleri ve Karşılaştırmalı Kullanım",[76,77,78,95],"table",{},[79,80,81],"thead",{},[82,83,84,89,92],"tr",{},[85,86,88],"th",{"align":87},"left","Özellik",[85,90,91],{"align":87},"ES9 Öncesi Yöntem",[85,93,94],{"align":87},"ES9 Modern Yöntem",[96,97,98,119,140,159],"tbody",{},[82,99,100,105,114],{},[101,102,103],"td",{"align":87},[18,104,40],{},[101,106,107,110,111],{"align":87},[38,108,109],{},"Object.assign({}, obj)"," veya ",[38,112,113],{},"_.omit",[101,115,116],{"align":87},[38,117,118],{},"const { foo, ...rest } = obj;",[82,120,121,126,135],{},[101,122,123],{"align":87},[18,124,125],{},"Promise Kapanışı",[101,127,128,45,131,134],{"align":87},[38,129,130],{},"then",[38,132,133],{},"catch"," içinde tekrar eden kod",[101,136,137],{"align":87},[38,138,139],{},"promise.finally(() => { ... })",[82,141,142,147,153],{},[101,143,144],{"align":87},[18,145,146],{},"RegExp Yakalama Grubu",[101,148,149,152],{"align":87},[38,150,151],{},"results[1]"," (İndeks tabanlı ve kırılgan)",[101,154,155,158],{"align":87},[38,156,157],{},"results.groups.year"," (İsimlendirilmiş grup)",[82,160,161,166,169],{},[101,162,163],{"align":87},[18,164,165],{},"Asenkron İterasyon",[101,167,168],{"align":87},"Manuel promise zincirleri",[101,170,171],{"align":87},[38,172,173],{},"for await (const val of stream)",[68,175],{},[177,178,180],"h2",{"id":179},"es9-ile-yeni-neler-geldi","ES9 ile Yeni Neler Geldi?",[14,182,183],{},"ES9 ile birlikte JavaScript'e aşağıdaki yenilikler geldi:",[22,185,186,189,192,196],{},[25,187,188],{},"Regex değişiklikleri (İsimlendirilmiş gruplar, lookbehind aramalar)",[25,190,191],{},"Object Rest\u002FSpread nitelikleri",[25,193,194],{},[38,195,44],{},[25,197,198],{},"Asenkron oluşturucular ve iterasyon (Asynchronous Generators & Iteration)",[68,200],{},[177,202,204],{"id":203},"_1-regex-değişiklikleri","1. Regex Değişiklikleri",[71,206,208,209],{"id":207},"yeni-regex-parametresi-s","Yeni Regex Parametresi ",[38,210,211],{},"\u002Fs",[14,213,214,215,218],{},"Genel olarak ",[38,216,217],{},"."," (nokta) regex cümleleri içinde herhangi bir karakter anlamına gelir. ECMAScript buna iki istisna getiriyordu:",[22,220,221,231],{},[25,222,223,224,41,227,230],{},"Nokta satır sonu karakterlerini (",[38,225,226],{},"\\r",[38,228,229],{},"\\n"," gibi) kapsamıyordu.",[25,232,233],{},"Nokta astral, yani BMP olmayan karakterleri (emojiler vb.) desteklemiyordu.",[14,235,236,237,239],{},"ES9 ile birlikte eklenen ",[38,238,211],{}," parametresi sayesinde nokta karakterinin gerçek anlamda tüm karakterleri kapsaması sağlanabiliyor ve yukarıdaki iki kısıt ortadan kalkmış oluyor.",[71,241,243],{"id":242},"i̇sim-verilen-yakalama-grupları-named-capture-groups","İsim Verilen Yakalama Grupları (Named Capture Groups)",[14,245,246],{},"ES9'a kadar yakalama gruplarına bir isim veremiyor ve indeksleri ile kullanıyorduk. ES9 ile birlikte bu gruplara ait değerleri isimleri ile çağırmanız mümkündür:",[248,249,254],"pre",{"className":250,"code":251,"language":252,"meta":253,"style":253},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F ES9 Öncesi (İndeks tabanlı)\nconst REGEX_OLD = \u002F([0-9]{4})-([0-9]{2})-([0-9]{2})\u002F;\nconst resultsOld = REGEX_OLD.exec('2018-07-12');\nconsole.log(resultsOld[1]); \u002F\u002F 2018\nconsole.log(resultsOld[2]); \u002F\u002F 07\nconsole.log(resultsOld[3]); \u002F\u002F 12\n\n\u002F\u002F ES9 ve Sonrası (İsimlendirilmiş gruplar)\nconst REGEX_NEW = \u002F(?\u003Cyear>[0-9]{4})-(?\u003Cmonth>[0-9]{2})-(?\u003Cday>[0-9]{2})\u002F;\nconst resultsNew = REGEX_NEW.exec('2018-07-12');\nconsole.log(resultsNew.groups.year);  \u002F\u002F 2018\nconsole.log(resultsNew.groups.month); \u002F\u002F 07\nconsole.log(resultsNew.groups.day);   \u002F\u002F 12\n","javascript","",[38,255,256,265,317,343,364,381,398,405,411,465,487,499,511],{"__ignoreMap":253},[257,258,261],"span",{"class":259,"line":260},"line",1,[257,262,264],{"class":263},"sJ8bj","\u002F\u002F ES9 Öncesi (İndeks tabanlı)\n",[257,266,268,272,276,279,283,287,290,293,296,298,301,303,305,307,310,313],{"class":259,"line":267},2,[257,269,271],{"class":270},"szBVR","const",[257,273,275],{"class":274},"sj4cs"," REGEX_OLD",[257,277,278],{"class":270}," =",[257,280,282],{"class":281},"sZZnC"," \u002F",[257,284,286],{"class":285},"sA_wV","(",[257,288,289],{"class":274},"[0-9]",[257,291,292],{"class":270},"{4}",[257,294,295],{"class":285},")-(",[257,297,289],{"class":274},[257,299,300],{"class":270},"{2}",[257,302,295],{"class":285},[257,304,289],{"class":274},[257,306,300],{"class":270},[257,308,309],{"class":285},")",[257,311,312],{"class":281},"\u002F",[257,314,316],{"class":315},"sVt8B",";\n",[257,318,320,322,325,327,329,331,335,337,340],{"class":259,"line":319},3,[257,321,271],{"class":270},[257,323,324],{"class":274}," resultsOld",[257,326,278],{"class":270},[257,328,275],{"class":274},[257,330,217],{"class":315},[257,332,334],{"class":333},"sScJk","exec",[257,336,286],{"class":315},[257,338,339],{"class":281},"'2018-07-12'",[257,341,342],{"class":315},");\n",[257,344,346,349,352,355,358,361],{"class":259,"line":345},4,[257,347,348],{"class":315},"console.",[257,350,351],{"class":333},"log",[257,353,354],{"class":315},"(resultsOld[",[257,356,357],{"class":274},"1",[257,359,360],{"class":315},"]); ",[257,362,363],{"class":263},"\u002F\u002F 2018\n",[257,365,367,369,371,373,376,378],{"class":259,"line":366},5,[257,368,348],{"class":315},[257,370,351],{"class":333},[257,372,354],{"class":315},[257,374,375],{"class":274},"2",[257,377,360],{"class":315},[257,379,380],{"class":263},"\u002F\u002F 07\n",[257,382,384,386,388,390,393,395],{"class":259,"line":383},6,[257,385,348],{"class":315},[257,387,351],{"class":333},[257,389,354],{"class":315},[257,391,392],{"class":274},"3",[257,394,360],{"class":315},[257,396,397],{"class":263},"\u002F\u002F 12\n",[257,399,401],{"class":259,"line":400},7,[257,402,404],{"emptyLinePlaceholder":403},true,"\n",[257,406,408],{"class":259,"line":407},8,[257,409,410],{"class":263},"\u002F\u002F ES9 ve Sonrası (İsimlendirilmiş gruplar)\n",[257,412,414,416,419,421,423,426,429,432,434,436,439,442,444,446,448,450,453,455,457,459,461,463],{"class":259,"line":413},9,[257,415,271],{"class":270},[257,417,418],{"class":274}," REGEX_NEW",[257,420,278],{"class":270},[257,422,282],{"class":281},[257,424,425],{"class":285},"(?\u003C",[257,427,428],{"class":315},"year",[257,430,431],{"class":285},">",[257,433,289],{"class":274},[257,435,292],{"class":270},[257,437,438],{"class":285},")-(?\u003C",[257,440,441],{"class":315},"month",[257,443,431],{"class":285},[257,445,289],{"class":274},[257,447,300],{"class":270},[257,449,438],{"class":285},[257,451,452],{"class":315},"day",[257,454,431],{"class":285},[257,456,289],{"class":274},[257,458,300],{"class":270},[257,460,309],{"class":285},[257,462,312],{"class":281},[257,464,316],{"class":315},[257,466,468,470,473,475,477,479,481,483,485],{"class":259,"line":467},10,[257,469,271],{"class":270},[257,471,472],{"class":274}," resultsNew",[257,474,278],{"class":270},[257,476,418],{"class":274},[257,478,217],{"class":315},[257,480,334],{"class":333},[257,482,286],{"class":315},[257,484,339],{"class":281},[257,486,342],{"class":315},[257,488,490,492,494,497],{"class":259,"line":489},11,[257,491,348],{"class":315},[257,493,351],{"class":333},[257,495,496],{"class":315},"(resultsNew.groups.year);  ",[257,498,363],{"class":263},[257,500,502,504,506,509],{"class":259,"line":501},12,[257,503,348],{"class":315},[257,505,351],{"class":333},[257,507,508],{"class":315},"(resultsNew.groups.month); ",[257,510,380],{"class":263},[257,512,514,516,518,521],{"class":259,"line":513},13,[257,515,348],{"class":315},[257,517,351],{"class":333},[257,519,520],{"class":315},"(resultsNew.groups.day);   ",[257,522,397],{"class":263},[71,524,526],{"id":525},"regexp-lookbehind-assertions-geriye-dönük-arama","RegExp Lookbehind Assertions (Geriye Dönük Arama)",[14,528,529],{},"Bu arama türünün pozitif ve negatif olarak iki tipi vardır:",[14,531,532],{},[18,533,534,535,309],{},"1. Positive (",[38,536,537],{},"(?\u003C=...)",[248,539,541],{"className":250,"code":540,"language":252,"meta":253,"style":253},"'\u003Cdiv> #element \u003C\u002Fdiv>'.replace(\u002F(?\u003C=#)element\u002Fg, 'eleman');\n\u002F\u002F Bu regex sonucunda metnimiz \u003Cdiv> #eleman \u003C\u002Fdiv> şekline dönüşür.\n",[38,542,543,572],{"__ignoreMap":253},[257,544,545,548,550,553,555,557,560,562,565,567,570],{"class":259,"line":260},[257,546,547],{"class":281},"'\u003Cdiv> #element \u003C\u002Fdiv>'",[257,549,217],{"class":315},[257,551,552],{"class":333},"replace",[257,554,286],{"class":315},[257,556,312],{"class":281},[257,558,559],{"class":285},"(?\u003C=#)element",[257,561,312],{"class":281},[257,563,564],{"class":270},"g",[257,566,41],{"class":315},[257,568,569],{"class":281},"'eleman'",[257,571,342],{"class":315},[257,573,574],{"class":259,"line":267},[257,575,576],{"class":263},"\u002F\u002F Bu regex sonucunda metnimiz \u003Cdiv> #eleman \u003C\u002Fdiv> şekline dönüşür.\n",[14,578,579,582,583,586,587,589],{},[38,580,581],{},"(?\u003C=#)element\u002Fg"," şeklinde bir regex ile aranan metnin ",[38,584,585],{},"#"," karakteri ile başlaması gerekir, fakat ",[38,588,585],{}," karakteri sonuç olarak değiştirilmez.",[14,591,592],{},[18,593,594,595,309],{},"2. Negative (",[38,596,597],{},"(?\u003C!...)",[248,599,601],{"className":250,"code":600,"language":252,"meta":253,"style":253},"'\u003Cdiv> #element \u003C\u002Fdiv>'.replace(\u002F(?\u003C!#)element\u002Fg, 'eleman');\n\u002F\u002F Bu regex sonucunda metnimiz \u003Cdiv> #element \u003C\u002Fdiv> olarak kalır ve değiştirilmez.\n",[38,602,603,628],{"__ignoreMap":253},[257,604,605,607,609,611,613,615,618,620,622,624,626],{"class":259,"line":260},[257,606,547],{"class":281},[257,608,217],{"class":315},[257,610,552],{"class":333},[257,612,286],{"class":315},[257,614,312],{"class":281},[257,616,617],{"class":285},"(?\u003C!#)element",[257,619,312],{"class":281},[257,621,564],{"class":270},[257,623,41],{"class":315},[257,625,569],{"class":281},[257,627,342],{"class":315},[257,629,630],{"class":259,"line":267},[257,631,632],{"class":263},"\u002F\u002F Bu regex sonucunda metnimiz \u003Cdiv> #element \u003C\u002Fdiv> olarak kalır ve değiştirilmez.\n",[14,634,635,636,638],{},"Bu regex ile aranan metin ",[38,637,585],{}," karakteri ile başlarsa yakalanmamış olur.",[71,640,642],{"id":641},"regexp-unicode-property-escape-karakteri","RegExp Unicode Property Escape Karakteri",[14,644,645],{},"ES9 ile birlikte karakterleri Unicode betik tipini belirterek test edebiliyoruz:",[248,647,649],{"className":250,"code":648,"language":252,"meta":253,"style":253},"\u002F\\p{Script=Arabic}\u002Fu.test('أليف');  \u002F\u002F true\n\u002F\\p{Script=Greek}\u002Fu.test('μ');    \u002F\u002F true\n\u002F\\p{Script=Greek}\u002Fu.test('أليف');  \u002F\u002F false\n\u002F\\p{Script=Greek}\u002Fu.test('a');   \u002F\u002F false\n\u002F\\p{Script=Latin}\u002Fu.test('a');   \u002F\u002F true\n",[38,650,651,683,710,735,761],{"__ignoreMap":253},[257,652,653,655,659,662,664,667,669,672,674,677,680],{"class":259,"line":260},[257,654,312],{"class":281},[257,656,658],{"class":657},"snhLl","\\p",[257,660,661],{"class":285},"{Script=Arabic}",[257,663,312],{"class":281},[257,665,666],{"class":270},"u",[257,668,217],{"class":315},[257,670,671],{"class":333},"test",[257,673,286],{"class":315},[257,675,676],{"class":281},"'أليف'",[257,678,679],{"class":315},");  ",[257,681,682],{"class":263},"\u002F\u002F true\n",[257,684,685,687,689,692,694,696,698,700,702,705,708],{"class":259,"line":267},[257,686,312],{"class":281},[257,688,658],{"class":657},[257,690,691],{"class":285},"{Script=Greek}",[257,693,312],{"class":281},[257,695,666],{"class":270},[257,697,217],{"class":315},[257,699,671],{"class":333},[257,701,286],{"class":315},[257,703,704],{"class":281},"'μ'",[257,706,707],{"class":315},");    ",[257,709,682],{"class":263},[257,711,712,714,716,718,720,722,724,726,728,730,732],{"class":259,"line":319},[257,713,312],{"class":281},[257,715,658],{"class":657},[257,717,691],{"class":285},[257,719,312],{"class":281},[257,721,666],{"class":270},[257,723,217],{"class":315},[257,725,671],{"class":333},[257,727,286],{"class":315},[257,729,676],{"class":281},[257,731,679],{"class":315},[257,733,734],{"class":263},"\u002F\u002F false\n",[257,736,737,739,741,743,745,747,749,751,753,756,759],{"class":259,"line":345},[257,738,312],{"class":281},[257,740,658],{"class":657},[257,742,691],{"class":285},[257,744,312],{"class":281},[257,746,666],{"class":270},[257,748,217],{"class":315},[257,750,671],{"class":333},[257,752,286],{"class":315},[257,754,755],{"class":281},"'a'",[257,757,758],{"class":315},");   ",[257,760,734],{"class":263},[257,762,763,765,767,770,772,774,776,778,780,782,784],{"class":259,"line":366},[257,764,312],{"class":281},[257,766,658],{"class":657},[257,768,769],{"class":285},"{Script=Latin}",[257,771,312],{"class":281},[257,773,666],{"class":270},[257,775,217],{"class":315},[257,777,671],{"class":333},[257,779,286],{"class":315},[257,781,755],{"class":281},[257,783,758],{"class":315},[257,785,682],{"class":263},[14,787,788,789,798],{},"Unicode betik tiplerinin tam bir listesine ",[62,790,797],{"href":791,"rel":792,"target":796},"https:\u002F\u002Fwww.regular-expressions.info\u002Funicode.html",[793,794,795],"nofollow","noopener","noreferrer","_blank","ilgili Unicode dokümanından"," ulaşabilirsiniz.",[68,800],{},[177,802,804],{"id":803},"_2-object-restspread-nitelikleri-properties","2. Object Rest\u002FSpread Nitelikleri (Properties)",[14,806,807],{},"ES6 ile gelen rest\u002Fspread operatörü sadece dizilerle (arrays) çalışıyordu. Rest\u002Fspread operatörü ES9 ile beraber nesnelerle de (objects) çalışmaya başladı:",[248,809,811],{"className":250,"code":810,"language":252,"meta":253,"style":253},"const obj = {foo: 1, bar: 2, baz: 3};\nconst {foo, ...rest} = obj;\n\u002F\u002F foo = 1\n\u002F\u002F rest = {bar: 2, baz: 3}\n",[38,812,813,840,867,872],{"__ignoreMap":253},[257,814,815,817,820,822,825,827,830,832,835,837],{"class":259,"line":260},[257,816,271],{"class":270},[257,818,819],{"class":274}," obj",[257,821,278],{"class":270},[257,823,824],{"class":315}," {foo: ",[257,826,357],{"class":274},[257,828,829],{"class":315},", bar: ",[257,831,375],{"class":274},[257,833,834],{"class":315},", baz: ",[257,836,392],{"class":274},[257,838,839],{"class":315},"};\n",[257,841,842,844,847,850,852,855,858,861,864],{"class":259,"line":267},[257,843,271],{"class":270},[257,845,846],{"class":315}," {",[257,848,849],{"class":274},"foo",[257,851,41],{"class":315},[257,853,854],{"class":270},"...",[257,856,857],{"class":274},"rest",[257,859,860],{"class":315},"} ",[257,862,863],{"class":270},"=",[257,865,866],{"class":315}," obj;\n",[257,868,869],{"class":259,"line":319},[257,870,871],{"class":263},"\u002F\u002F foo = 1\n",[257,873,874],{"class":259,"line":345},[257,875,876],{"class":263},"\u002F\u002F rest = {bar: 2, baz: 3}\n",[14,878,879],{},"Benzer şekilde birden çok parametre alan bir fonksiyona spread operatörü kullanarak bir nesneyi parametre olarak gönderebiliriz:",[248,881,883],{"className":250,"code":882,"language":252,"meta":253,"style":253},"function func({param1, param2, ...rest}) { \u002F\u002F rest operator\n    console.log('Tüm parametreler: ', {param1, param2, ...rest}); \u002F\u002F spread operator\n    return param1 + param2;\n}\n",[38,884,885,917,940,954],{"__ignoreMap":253},[257,886,887,890,893,896,900,902,905,907,909,911,914],{"class":259,"line":260},[257,888,889],{"class":270},"function",[257,891,892],{"class":333}," func",[257,894,895],{"class":315},"({",[257,897,899],{"class":898},"s4XuR","param1",[257,901,41],{"class":315},[257,903,904],{"class":898},"param2",[257,906,41],{"class":315},[257,908,854],{"class":270},[257,910,857],{"class":898},[257,912,913],{"class":315},"}) { ",[257,915,916],{"class":263},"\u002F\u002F rest operator\n",[257,918,919,922,924,926,929,932,934,937],{"class":259,"line":267},[257,920,921],{"class":315},"    console.",[257,923,351],{"class":333},[257,925,286],{"class":315},[257,927,928],{"class":281},"'Tüm parametreler: '",[257,930,931],{"class":315},", {param1, param2, ",[257,933,854],{"class":270},[257,935,936],{"class":315},"rest}); ",[257,938,939],{"class":263},"\u002F\u002F spread operator\n",[257,941,942,945,948,951],{"class":259,"line":319},[257,943,944],{"class":270},"    return",[257,946,947],{"class":315}," param1 ",[257,949,950],{"class":270},"+",[257,952,953],{"class":315}," param2;\n",[257,955,956],{"class":259,"line":345},[257,957,958],{"class":315},"}\n",[68,960],{},[177,962,964],{"id":963},"_3-promiseprototypefinally","3. Promise.prototype.finally",[14,966,967],{},"Bu yeni callback tipi, promise türündeki çağrıların tümünden sonra (hata alınsın ya da alınmasın) çalıştırılır:",[248,969,971],{"className":250,"code":970,"language":252,"meta":253,"style":253},"aPromiseFunction()\n  .then(() => {\n    \u002F\u002F Tamamlandığında çalışacak kod\n  })\n  .catch(err => {\n    \u002F\u002F Hata durumunda çalışacak kod\n  })\n  .finally(() => {\n    \u002F\u002F Her durumda (en son) çalışacak kod\n  });\n",[38,972,973,981,997,1002,1007,1023,1028,1032,1045,1050],{"__ignoreMap":253},[257,974,975,978],{"class":259,"line":260},[257,976,977],{"class":333},"aPromiseFunction",[257,979,980],{"class":315},"()\n",[257,982,983,986,988,991,994],{"class":259,"line":267},[257,984,985],{"class":315},"  .",[257,987,130],{"class":333},[257,989,990],{"class":315},"(() ",[257,992,993],{"class":270},"=>",[257,995,996],{"class":315}," {\n",[257,998,999],{"class":259,"line":319},[257,1000,1001],{"class":263},"    \u002F\u002F Tamamlandığında çalışacak kod\n",[257,1003,1004],{"class":259,"line":345},[257,1005,1006],{"class":315},"  })\n",[257,1008,1009,1011,1013,1015,1018,1021],{"class":259,"line":366},[257,1010,985],{"class":315},[257,1012,133],{"class":333},[257,1014,286],{"class":315},[257,1016,1017],{"class":898},"err",[257,1019,1020],{"class":270}," =>",[257,1022,996],{"class":315},[257,1024,1025],{"class":259,"line":383},[257,1026,1027],{"class":263},"    \u002F\u002F Hata durumunda çalışacak kod\n",[257,1029,1030],{"class":259,"line":400},[257,1031,1006],{"class":315},[257,1033,1034,1036,1039,1041,1043],{"class":259,"line":407},[257,1035,985],{"class":315},[257,1037,1038],{"class":333},"finally",[257,1040,990],{"class":315},[257,1042,993],{"class":270},[257,1044,996],{"class":315},[257,1046,1047],{"class":259,"line":413},[257,1048,1049],{"class":263},"    \u002F\u002F Her durumda (en son) çalışacak kod\n",[257,1051,1052],{"class":259,"line":467},[257,1053,1054],{"class":315},"  });\n",[11,1056,1057],{},[14,1058,16,1059,1062,1063,1067],{},[18,1060,1061],{},"Not:"," ",[62,1064,1066],{"href":1065},"\u002Ftr\u002Fes10-nedir-ecmascript-2019-nedir","ES10"," ile birlikte catch çağrısına gönderilen error parametresi isteğe bağlı hale geldi.",[68,1069],{},[177,1071,1073],{"id":1072},"_4-asenkron-oluşturucular-ve-i̇terasyon","4. Asenkron Oluşturucular ve İterasyon",[14,1075,1076,1077,1080],{},"Generator fonksiyonlar, çalışma sırasında duraklatılabilen ve devam ettirilebilen fonksiyonlardır. ES9 ile birlikte ",[38,1078,1079],{},"async"," anahtar kelimesini kullanarak asenkron generator fonksiyonlar oluşturabiliyoruz.",[14,1082,1083,1084,1087],{},"Asenkron generatorlerin normal generatorlerden farkı, ",[38,1085,1086],{},"next()"," metotlarının bir değer yerine Promise döndürmesidir:",[248,1089,1091],{"className":250,"code":1090,"language":252,"meta":253,"style":253},"async function* load() {\n  yield await Promise.resolve(1);\n  yield await Promise.resolve(2);\n}\n   \nconst l = load();\nl.next().then(r => console.log(r)); \u002F\u002F {value: 1, done: false}\nl.next().then(r => console.log(r)); \u002F\u002F {value: 2, done: false}\nl.next().then(r => console.log(r)); \u002F\u002F {value: undefined, done: true}\n",[38,1092,1093,1106,1128,1146,1150,1155,1169,1200,1225],{"__ignoreMap":253},[257,1094,1095,1097,1100,1103],{"class":259,"line":260},[257,1096,1079],{"class":270},[257,1098,1099],{"class":270}," function*",[257,1101,1102],{"class":333}," load",[257,1104,1105],{"class":315},"() {\n",[257,1107,1108,1111,1114,1117,1119,1122,1124,1126],{"class":259,"line":267},[257,1109,1110],{"class":270},"  yield",[257,1112,1113],{"class":270}," await",[257,1115,1116],{"class":274}," Promise",[257,1118,217],{"class":315},[257,1120,1121],{"class":333},"resolve",[257,1123,286],{"class":315},[257,1125,357],{"class":274},[257,1127,342],{"class":315},[257,1129,1130,1132,1134,1136,1138,1140,1142,1144],{"class":259,"line":319},[257,1131,1110],{"class":270},[257,1133,1113],{"class":270},[257,1135,1116],{"class":274},[257,1137,217],{"class":315},[257,1139,1121],{"class":333},[257,1141,286],{"class":315},[257,1143,375],{"class":274},[257,1145,342],{"class":315},[257,1147,1148],{"class":259,"line":345},[257,1149,958],{"class":315},[257,1151,1152],{"class":259,"line":366},[257,1153,1154],{"class":315},"   \n",[257,1156,1157,1159,1162,1164,1166],{"class":259,"line":383},[257,1158,271],{"class":270},[257,1160,1161],{"class":274}," l",[257,1163,278],{"class":270},[257,1165,1102],{"class":333},[257,1167,1168],{"class":315},"();\n",[257,1170,1171,1174,1177,1180,1182,1184,1187,1189,1192,1194,1197],{"class":259,"line":400},[257,1172,1173],{"class":315},"l.",[257,1175,1176],{"class":333},"next",[257,1178,1179],{"class":315},"().",[257,1181,130],{"class":333},[257,1183,286],{"class":315},[257,1185,1186],{"class":898},"r",[257,1188,1020],{"class":270},[257,1190,1191],{"class":315}," console.",[257,1193,351],{"class":333},[257,1195,1196],{"class":315},"(r)); ",[257,1198,1199],{"class":263},"\u002F\u002F {value: 1, done: false}\n",[257,1201,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222],{"class":259,"line":407},[257,1203,1173],{"class":315},[257,1205,1176],{"class":333},[257,1207,1179],{"class":315},[257,1209,130],{"class":333},[257,1211,286],{"class":315},[257,1213,1186],{"class":898},[257,1215,1020],{"class":270},[257,1217,1191],{"class":315},[257,1219,351],{"class":333},[257,1221,1196],{"class":315},[257,1223,1224],{"class":263},"\u002F\u002F {value: 2, done: false}\n",[257,1226,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247],{"class":259,"line":413},[257,1228,1173],{"class":315},[257,1230,1176],{"class":333},[257,1232,1179],{"class":315},[257,1234,130],{"class":333},[257,1236,286],{"class":315},[257,1238,1186],{"class":898},[257,1240,1020],{"class":270},[257,1242,1191],{"class":315},[257,1244,351],{"class":333},[257,1246,1196],{"class":315},[257,1248,1249],{"class":263},"\u002F\u002F {value: undefined, done: true}\n",[14,1251,1252,1254,1255,1258,1259,1261],{},[38,1253,1079],{}," anahtar kelimesi ile tanımladığımız asenkron generatorleri klasik bir ",[38,1256,1257],{},"for"," döngüsü içinde asenkron olarak kullanamayız. Bunu sağlamak için ",[38,1260,48],{}," yapısını kullanmalıyız. Bu sayede fonksiyondan değer dönene kadar döngünün devam etmesini bekletebiliriz:",[248,1263,1265],{"className":250,"code":1264,"language":252,"meta":253,"style":253},"async function* load() {\n  yield await Promise.resolve(1);\n  yield await Promise.resolve(2);\n}\n   \nasync function test() {\n  for await (const val of load()) {\n    console.log(val);\n  }\n}\n",[38,1266,1267,1277,1295,1313,1317,1321,1333,1356,1365,1370],{"__ignoreMap":253},[257,1268,1269,1271,1273,1275],{"class":259,"line":260},[257,1270,1079],{"class":270},[257,1272,1099],{"class":270},[257,1274,1102],{"class":333},[257,1276,1105],{"class":315},[257,1278,1279,1281,1283,1285,1287,1289,1291,1293],{"class":259,"line":267},[257,1280,1110],{"class":270},[257,1282,1113],{"class":270},[257,1284,1116],{"class":274},[257,1286,217],{"class":315},[257,1288,1121],{"class":333},[257,1290,286],{"class":315},[257,1292,357],{"class":274},[257,1294,342],{"class":315},[257,1296,1297,1299,1301,1303,1305,1307,1309,1311],{"class":259,"line":319},[257,1298,1110],{"class":270},[257,1300,1113],{"class":270},[257,1302,1116],{"class":274},[257,1304,217],{"class":315},[257,1306,1121],{"class":333},[257,1308,286],{"class":315},[257,1310,375],{"class":274},[257,1312,342],{"class":315},[257,1314,1315],{"class":259,"line":345},[257,1316,958],{"class":315},[257,1318,1319],{"class":259,"line":366},[257,1320,1154],{"class":315},[257,1322,1323,1325,1328,1331],{"class":259,"line":383},[257,1324,1079],{"class":270},[257,1326,1327],{"class":270}," function",[257,1329,1330],{"class":333}," test",[257,1332,1105],{"class":315},[257,1334,1335,1338,1340,1343,1345,1348,1351,1353],{"class":259,"line":400},[257,1336,1337],{"class":270},"  for",[257,1339,1113],{"class":270},[257,1341,1342],{"class":315}," (",[257,1344,271],{"class":270},[257,1346,1347],{"class":274}," val",[257,1349,1350],{"class":270}," of",[257,1352,1102],{"class":333},[257,1354,1355],{"class":315},"()) {\n",[257,1357,1358,1360,1362],{"class":259,"line":407},[257,1359,921],{"class":315},[257,1361,351],{"class":333},[257,1363,1364],{"class":315},"(val);\n",[257,1366,1367],{"class":259,"line":413},[257,1368,1369],{"class":315},"  }\n",[257,1371,1372],{"class":259,"line":467},[257,1373,958],{"class":315},[1375,1376,1378],"h5",{"id":1377},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[22,1380,1381,1387],{},[25,1382,1383,1384,1386],{},"21.06.2026: RegExp tanımlarındaki eğik çizgi (",[38,1385,312],{},") eksiklikleri ve Promise zincirindeki kapanış parantezini yorum satırına alan sözdizimi (syntax) hataları düzeltildi. Kod bloklarına dil etiketleri eklendi. İmla ve marka yazımları düzeltildi. Karşılaştırma tablosu ve özet eklendi.",[25,1388,1389],{},"11.05.2022: Yazı özeti düzenlendi.",[1391,1392,1393],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":253,"searchDepth":267,"depth":267,"links":1395},[1396,1397,1398,1405,1406,1407],{"id":73,"depth":319,"text":74},{"id":179,"depth":267,"text":180},{"id":203,"depth":267,"text":204,"children":1399},[1400,1402,1403,1404],{"id":207,"depth":319,"text":1401},"Yeni Regex Parametresi \u002Fs",{"id":242,"depth":319,"text":243},{"id":525,"depth":319,"text":526},{"id":641,"depth":319,"text":642},{"id":803,"depth":267,"text":804},{"id":963,"depth":267,"text":964},{"id":1072,"depth":267,"text":1073},[1409],"technical",null,"2021-10-19","ES9 (ECMAScript 2018) özellikleri nelerdir? RegExp isimlendirilmiş yakalama grupları, Object Rest\u002FSpread ve Promise finally kullanımı.",false,"md","\u002Fimages\u002Fhero\u002Fes9.avif",{},"\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir",{"title":6,"description":1412},"es9-nedir-ecmascript-2018-nedir","tr\u002Fes9-nedir-ecmascript-2018-nedir",[252],"2026-06-21","qcoBJqdR2p2dJSgpMw_XArqAM5JvQGKIa7QmuyKLfDw",{"prev":1425,"next":1428,"others":1431,"lucky":1552,"readingTime":345},{"path":1426,"title":1427},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":1429,"title":1430},"\u002Ftr\u002Fes12-nedir-ecmascript-2021-nedir","ES12 Nedir? ECMAScript 2021 Nedir?",[1432,1435,1438,1441,1444,1447,1450,1453,1456,1459,1462,1465,1468,1471,1474,1477,1480,1483,1486,1489,1492,1495,1498,1501,1504,1507,1510,1513,1516,1519,1522,1525,1528,1531,1534,1537,1540,1543,1546,1549],{"path":1433,"title":1434},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":1436,"title":1437},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","RestApi ve HATEOAS Kavramı",{"path":1439,"title":1440},"\u002Ftr\u002Fyeni-tema-honeywind","Yeni WordPress Temam Honeywind: Tailwind CSS ve Minimalizm",{"path":1442,"title":1443},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI Yapısı Nasıl Olmalı?",{"path":1445,"title":1446},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu",{"path":1448,"title":1449},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":1451,"title":1452},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":1454,"title":1455},"\u002Ftr\u002Fnext-js-on-bellegi-nasil-yenilenir-on-demand-cache-regeneration","Next.js Önbelleği Nasıl Yenilenir? \"On-Demand Cache Regeneration\"",{"path":1457,"title":1458},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":1460,"title":1461},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter Tasarım Deseni Nedir?",{"path":1463,"title":1464},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?",{"path":1466,"title":1467},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",{"path":1469,"title":1470},"\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":1472,"title":1473},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1475,"title":1476},"\u002Ftr\u002Fdocker-ile-rabbitmq-kurulumu","Docker ile RabbitMQ Kurulumu",{"path":1478,"title":1479},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator Tasarım Deseni Nedir?",{"path":1481,"title":1482},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method Tasarım Deseni Nedir?",{"path":1484,"title":1485},"\u002Ftr\u002Fwordpress-yonetici-sifresini-wp-cli-kullanarak-sifirlama","WordPress Yönetici Şifresini WP-CLI Kullanarak Sıfırlama",{"path":1487,"title":1488},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":1490,"title":1491},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",{"path":1493,"title":1494},"\u002Ftr\u002Fdocker-ve-portainer-kurulumu","Docker ve Portainer Kurulumu",{"path":1496,"title":1497},"\u002Ftr\u002Fdocker-ile-litespeed-enterprise-kurulumu","Docker ile LiteSpeed Enterprise Kurulumu",{"path":1499,"title":1500},"\u002Ftr\u002Fmerhaba-tailwind-css","Merhaba Tailwind CSS",{"path":1502,"title":1503},"\u002Ftr\u002Fes7-nedir-ecmascript-2016-nedir","ES7 Nedir? ECMAScript 2016 Nedir?",{"path":1505,"title":1506},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir","ES13 nedir? ECMAScript 2022 nedir?",{"path":1508,"title":1509},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":1511,"title":1512},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":1514,"title":1515},"\u002Ftr\u002Fdocker-ile-redis-kurulumu","Docker ile Redis Kurulumu",{"path":1517,"title":1518},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map",{"path":1520,"title":1521},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?",{"path":1523,"title":1524},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge Tasarım Deseni Nedir?",{"path":1526,"title":1527},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir","Abstract Factory Tasarım Deseni Nedir?",{"path":1529,"title":1530},"\u002Ftr\u002Faws-ec2-uzerinde-docker-ve-full-stack-web-performansi","AWS EC2 Üzerinde Docker ve Full Stack Web Performansı",{"path":1532,"title":1533},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight Tasarım Deseni Nedir?",{"path":1535,"title":1536},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command Tasarım Deseni Nedir?",{"path":1538,"title":1539},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":1541,"title":1542},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir","Template Method Tasarım Deseni Nedir?",{"path":1544,"title":1545},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":1547,"title":1548},"\u002Ftr\u002Ffacade-tasarim-deseni-nedir","Facade Tasarım Deseni Nedir?",{"path":1550,"title":1551},"\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir","ES15 nedir? ECMAScript 2024 nedir?",{"path":64,"title":1553},"ECMAScript Nedir? Bilinmesi Gerekenler...",[1555,1558,1560,1561],{"path":1556,"title":1557,"date":1422},"\u002Ftr\u002Fvite-nedir","Vite Nedir? Modern Web Geliştirme ve Paketleme Aracı",{"path":1505,"title":1506,"date":1559},"2026-06-20",{"path":1433,"title":1434,"date":1559},{"path":1550,"title":1551,"date":1559},[1563,1565,1569],{"path":1532,"title":1533,"date":1564},"2021-09-14",{"path":1566,"title":1567,"date":1568},"\u002Ftr\u002Ffull-stack-proje-agaci","Full-Stack Proje Yol Haritası ve İçindekiler","2021-02-16",{"path":1570,"title":1571,"date":1572},"\u002Ftr\u002Fwindows-10-golang-kurulumu","Windows 10 ve 11'de Golang Kurulumu ve GOPATH Yapılandırması","2021-09-28",1782142002334]