{"id":35398,"date":"2025-11-29T07:01:10","date_gmt":"2025-11-29T04:01:10","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/"},"modified":"2025-11-29T07:01:10","modified_gmt":"2025-11-29T04:01:10","slug":"dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/","title":{"rendered":"Dart Enum&#8217;lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f"},"content":{"rendered":"<p><body><\/p>\n<p>Dart&#8217;ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum&#8217;lar\u0131n\u0131n temel kullan\u0131mlar\u0131ndan ba\u015flayarak, geli\u015fmi\u015f \u00f6zellikleriyle kodunuzu nas\u0131l daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Modern Dart geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan enum&#8217;lar\u0131 s\u00fcper g\u00fc\u00e7lerle donatmaya haz\u0131r olun.<\/p>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirmede, belirli bir veri k\u00fcmesinin yaln\u0131zca \u00f6nceden tan\u0131mlanm\u0131\u015f, sabit de\u011ferler i\u00e7ermesini istedi\u011fimiz durumlarla s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131r\u0131z. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n durumu (aktif, pasif, ask\u0131ya al\u0131nm\u0131\u015f), bir sipari\u015fin durumu (beklemede, i\u015fleniyor, tamamland\u0131, iptal edildi) veya bir uygulaman\u0131n tema modu (a\u00e7\u0131k, koyu, sistem) gibi senaryolar bu duruma g\u00fczel \u00f6rneklerdir. Bu t\u00fcr durumlar\u0131 geleneksel y\u00f6ntemlerle (\u00f6rne\u011fin, string veya integer sabitler kullanarak) y\u00f6netmek, beraberinde bir dizi sorun getirir: yaz\u0131m hatalar\u0131na a\u00e7\u0131k olma, IDE deste\u011finin zay\u0131fl\u0131\u011f\u0131, kodun okunabilirli\u011finin d\u00fc\u015fmesi ve bak\u0131m zorluklar\u0131. \u0130\u015fte tam bu noktada, Dart&#8217;\u0131n enum (enumeration) yap\u0131lar\u0131 devreye girerek bu sorunlara zarif ve g\u00fc\u00e7l\u00fc \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<p>Enum&#8217;lar, adland\u0131r\u0131lm\u0131\u015f sabitler k\u00fcmesi olu\u015fturmam\u0131z\u0131 sa\u011flayan \u00f6zel bir s\u0131n\u0131f t\u00fcr\u00fcd\u00fcr. Bu, kodumuzda belirli se\u00e7enekleri temsil etmek i\u00e7in string veya say\u0131sal sabitler yerine, anlaml\u0131 ve tip g\u00fcvenli bir yap\u0131 kullanmam\u0131z\u0131 sa\u011flar. Bir enum kullanmak, olas\u0131 de\u011ferleri a\u00e7\u0131k\u00e7a belirtir ve geli\u015ftiricilerin yanl\u0131\u015f bir de\u011fer atamas\u0131n\u0131 engeller. Bu sayede, derleme zaman\u0131nda hatalar\u0131 yakalama \u015fans\u0131m\u0131z artar ve uygulaman\u0131n \u00e7al\u0131\u015fma zaman\u0131ndaki beklenmedik davran\u0131\u015flar\u0131n \u00f6n\u00fcne ge\u00e7ilmi\u015f olur. Ayr\u0131ca, kod tamamlama (autocomplete) \u00f6zellikleri sayesinde, hangi de\u011ferlerin mevcut oldu\u011funu an\u0131nda g\u00f6rebiliriz, bu da geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r ve hatalar\u0131 azalt\u0131r.<\/p>\n<p>Dart 2.17 s\u00fcr\u00fcm\u00fcyle birlikte tan\u0131t\u0131lan &#8220;Enhanced Enums&#8221; (Geli\u015fmi\u015f Enum&#8217;lar) ise bu yap\u0131y\u0131 yepyeni bir boyuta ta\u015f\u0131d\u0131. \u00d6nceden sadece basit bir adland\u0131r\u0131lm\u0131\u015f sabit listesi olarak hizmet veren enum&#8217;lar, art\u0131k metodlar, alanlar (fields) ve hatta kurucular (constructors) i\u00e7erebilen, tam te\u015fekk\u00fcll\u00fc s\u0131n\u0131flar gibi davranabiliyor. Bu yenilik, enum&#8217;lar\u0131n yaln\u0131zca bir de\u011fer listesinden ibaret olmaktan \u00e7\u0131k\u0131p, bu de\u011ferlerle ili\u015fkili davran\u0131\u015flar\u0131 ve verileri de kapsayabilen, olduk\u00e7a g\u00fc\u00e7l\u00fc ve esnek bir yap\u0131ya d\u00f6n\u00fc\u015fmesini sa\u011flad\u0131. Bu sayede, daha \u00f6nce kompleks s\u0131n\u0131f hiyerar\u015fileri veya yard\u0131mc\u0131 fonksiyonlarla \u00e7\u00f6zmek zorunda kald\u0131\u011f\u0131m\u0131z bir\u00e7ok problemi, \u00e7ok daha temiz ve derli toplu bir \u015fekilde enum&#8217;lar arac\u0131l\u0131\u011f\u0131yla \u00e7\u00f6zebilir hale geldik. \u00d6rne\u011fin, her durum i\u00e7in farkl\u0131 bir i\u015flem yapmas\u0131 gereken bir uygulama bile\u015feni d\u00fc\u015f\u00fcn\u00fcn; Enhanced Enums ile her bir durum, kendi i\u00e7inde bu i\u015flemi bar\u0131nd\u0131rabilir ve b\u00f6ylece kod tekrar\u0131n\u0131 azalt\u0131rken, okunabilirli\u011fi ve bak\u0131m\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabiliriz. Bu geli\u015fme, Dart geli\u015ftiricilerinin kodlar\u0131n\u0131 daha mod\u00fcler, anla\u015f\u0131l\u0131r ve s\u00fcrd\u00fcr\u00fclebilir hale getirmeleri i\u00e7in b\u00fcy\u00fck bir f\u0131rsat sunmaktad\u0131r.<\/p>\n<h2 id=\"temel-kavramlar-dart-enumlarinin-abc-si-nasil-tanimlanir-ve-kullanilir\">Temel Kavramlar: Dart Enum&#8217;lar\u0131n\u0131n ABC&#8217;si \u2013 Nas\u0131l Tan\u0131mlan\u0131r ve Kullan\u0131l\u0131r?<\/h2>\n<p>Dart enum&#8217;lar\u0131, kodunuzu daha okunabilir ve hatas\u0131z hale getiren temel bir yap\u0131 ta\u015f\u0131d\u0131r. Hen\u00fcz bu kavramlara yabanc\u0131ysan\u0131z, endi\u015felenmeyin. En temelden ba\u015flayarak, bir enum&#8217;\u0131n nas\u0131l tan\u0131mland\u0131\u011f\u0131n\u0131 ve ilk ad\u0131mlarda nas\u0131l kullan\u0131labilece\u011fini birlikte inceleyece\u011fiz. \u00d6ncelikle, bir enum tan\u0131m\u0131, <code>enum<\/code> anahtar kelimesiyle ba\u015flar ve ard\u0131ndan enum&#8217;\u0131n ad\u0131 gelir. \u0130\u00e7erisinde ise, virg\u00fclle ayr\u0131lm\u0131\u015f bir \u015fekilde, bu enum&#8217;\u0131n alabilece\u011fi sabit de\u011ferler listelenir. Bu de\u011ferler, genellikle b\u00fcy\u00fck harflerle ve alt \u00e7izgi ile ayr\u0131lm\u0131\u015f kelimelerle yaz\u0131l\u0131r (<code>SNAKE_CASE<\/code>), bu bir Dart konvansiyonudur ve kodunuzun tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bir e-ticaret uygulamas\u0131nda sipari\u015f durumlar\u0131n\u0131 temsil etmek i\u00e7in basit bir enum \u00f6rne\u011fiyle ba\u015flayal\u0131m. Geleneksel olarak bu durumlar\u0131 &#8220;pending&#8221;, &#8220;processing&#8221;, &#8220;completed&#8221; gibi string&#8217;lerle temsil edebiliriz. Ancak bu, yaz\u0131m hatalar\u0131na ve dolay\u0131s\u0131yla \u00e7al\u0131\u015fma zaman\u0131 hatalar\u0131na davetiye \u00e7\u0131kar\u0131r. Enum kullanarak bu sorunu nas\u0131l a\u015fabilece\u011fimizi g\u00f6relim:<\/p>\n<pre><code class=\"language-dart\">\nenum OrderStatus {\n  pending,\n  processing,\n  completed,\n  cancelled,\n  returned,\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki kod blo\u011fu, <code>OrderStatus<\/code> ad\u0131nda bir enum tan\u0131mlar ve be\u015f farkl\u0131 sipari\u015f durumunu temsil eder. Art\u0131k sipari\u015flerin durumunu belirlerken, bu sabit de\u011ferleri kullanabiliriz. Bir enum de\u011ferine eri\u015fmek olduk\u00e7a basittir; enum ad\u0131n\u0131 ve ard\u0131ndan nokta operat\u00f6r\u00fcn\u00fc kullanarak istedi\u011finiz de\u011fere ula\u015fabilirsiniz. \u00d6rne\u011fin, <code>OrderStatus.pending<\/code> gibi. Bu, string sabitler yerine do\u011frudan ve g\u00fcvenli bir \u015fekilde de\u011ferlere eri\u015fmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-dart\">\nvoid main() {\n  OrderStatus currentStatus = OrderStatus.processing;\n\n  if (currentStatus == OrderStatus.completed) {\n    print(\"Sipari\u015f tamamland\u0131!\");\n  } else {\n    print(\"Sipari\u015f durumu: ${currentStatus.name}\");\n  }\n\n  \/\/ Enum de\u011ferlerini d\u00f6ng\u00fcyle gezmek de m\u00fcmk\u00fcnd\u00fcr.\n  print(\"\\nT\u00fcm sipari\u015f durumlar\u0131:\");\n  for (var status in OrderStatus.values) {\n    print(\"- ${status.name}\");\n  }\n\n  \/\/ Bir string'den enum de\u011ferine d\u00f6n\u00fc\u015ft\u00fcrmek (e\u011fer isim e\u015fle\u015fiyorsa)\n  String statusString = \"cancelled\";\n  try {\n    OrderStatus parsedStatus = OrderStatus.values.firstWhere(\n      (status) => status.name == statusString,\n      orElse: () => OrderStatus.pending, \/\/ E\u011fer e\u015fle\u015fen bulunamazsa varsay\u0131lan de\u011fer\n    );\n    print(\"D\u00f6n\u00fc\u015ft\u00fcr\u00fclen durum: ${parsedStatus.name}\");\n  } catch (e) {\n    print(\"Ge\u00e7ersiz durum string'i: $statusString\");\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>currentStatus<\/code> ad\u0131nda bir de\u011fi\u015fken tan\u0131mlayarak ona <code>OrderStatus.processing<\/code> de\u011ferini atad\u0131k. <code>if<\/code> ifadesiyle enum de\u011ferlerini kar\u015f\u0131la\u015ft\u0131rd\u0131k, bu da tip g\u00fcvenli\u011fi sayesinde \u00e7ok daha g\u00fcvenlidir. Ayr\u0131ca, <code>currentStatus.name<\/code> ile enum de\u011ferinin string kar\u015f\u0131l\u0131\u011f\u0131n\u0131 alabilece\u011fimizi g\u00f6rd\u00fck. <code>OrderStatus.values<\/code> \u00f6zelli\u011fi ise, enum'daki t\u00fcm de\u011ferlerin bir listesini d\u00f6nd\u00fcr\u00fcr, bu da \u00f6zellikle t\u00fcm olas\u0131 durumlar\u0131 UI'da g\u00f6stermek veya belirli kontroller yapmak istedi\u011fimizde \u00e7ok i\u015fimize yarar. Son olarak, bir string de\u011feri bir enum'a d\u00f6n\u00fc\u015ft\u00fcrme \u00f6rne\u011fi de g\u00f6sterdik, bu \u00f6zellikle API'lerden gelen verileri i\u015flerken veya kullan\u0131c\u0131 girdilerini valide ederken olduk\u00e7a yararl\u0131d\u0131r. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, Dart enum'lar\u0131 sadece bir de\u011fer listesi olmakla kalm\u0131yor, ayn\u0131 zamanda kodunuzu daha sa\u011flam ve y\u00f6netilebilir hale getirmek i\u00e7in \u00e7e\u015fitli pratik y\u00f6ntemler sunuyor.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Enum'lar\u0131n <code>.name<\/code> \u00f6zelli\u011fi, de\u011ferin string kar\u015f\u0131l\u0131\u011f\u0131n\u0131 verirken, <code>.index<\/code> \u00f6zelli\u011fi ise o de\u011ferin enum i\u00e7indeki s\u0131ras\u0131n\u0131 (0'dan ba\u015flayarak) verir. Ancak <code>.index<\/code>'i kullanarak i\u015f mant\u0131\u011f\u0131 olu\u015fturmaktan ka\u00e7\u0131n\u0131n; \u00e7\u00fcnk\u00fc enum'a yeni bir de\u011fer eklendi\u011finde s\u0131ralama de\u011fi\u015febilir ve bu da beklenmedik hatalara yol a\u00e7abilir.\n    <\/div>\n<h2 id=\"dart-enumlarini-nasil-daha-etkili-kullaniriz-vaka-analizleri-ve-pratik-ornekler\">Dart Enum'lar\u0131n\u0131 Nas\u0131l Daha Etkili Kullan\u0131r\u0131z? Vaka Analizleri ve Pratik \u00d6rnekler<\/h2>\n<p>Temel enum kullan\u0131m\u0131n\u0131 anlad\u0131ktan sonra, \u015fimdi Dart enum'lar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l daha etkili kullanabilece\u011fimize odaklanal\u0131m. Enum'lar, sadece sabit bir de\u011fer listesi sa\u011flamakla kalmaz, ayn\u0131 zamanda kodunuzun daha mod\u00fcler, okunabilir ve bak\u0131m\u0131 kolay olmas\u0131n\u0131 sa\u011flayarak \u00f6nemli avantajlar sunar. \u00d6zellikle UI bile\u015fenleri, durum y\u00f6netimi ve yap\u0131land\u0131rma ayarlar\u0131 gibi alanlarda enum'lar\u0131n g\u00fcc\u00fcnden faydalanabiliriz.<\/p>\n<h3 id=\"ui-bile\u015fenlerinde-enum-kullanimi\">UI Bile\u015fenlerinde Enum Kullan\u0131m\u0131: Tema Modlar\u0131<\/h3>\n<p>Bir mobil veya web uygulamas\u0131nda tema modlar\u0131 (a\u00e7\u0131k, koyu, sistem varsay\u0131lan\u0131) gibi se\u00e7enekler, enum kullanmak i\u00e7in m\u00fckemmel bir senaryodur. Bu, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcz\u00fcn davran\u0131\u015f\u0131n\u0131 ve g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc daha tutarl\u0131 bir \u015fekilde y\u00f6netmenize olanak tan\u0131r. A\u015fa\u011f\u0131daki \u00f6rnekte, <code>ThemeMode<\/code> enum'\u0131n\u0131 tan\u0131mlayarak, uygulama temas\u0131n\u0131 nas\u0131l dinamik olarak de\u011fi\u015ftirebilece\u011fimizi g\u00f6relim:<\/p>\n<pre><code class=\"language-dart\">\nenum ThemeMode {\n  light,\n  dark,\n  system,\n}\n\n\/\/ Uygulaman\u0131z\u0131n tema ayar\u0131n\u0131 depolayan bir servis veya s\u0131n\u0131f\u0131n\u0131z oldu\u011funu varsayal\u0131m.\nclass AppSettings {\n  ThemeMode _currentThemeMode = ThemeMode.system;\n\n  ThemeMode get currentThemeMode => _currentThemeMode;\n\n  void setThemeMode(ThemeMode newMode) {\n    _currentThemeMode = newMode;\n    print(\"Tema modu ${newMode.name} olarak ayarland\u0131.\");\n    \/\/ Burada UI'\u0131 g\u00fcncelleme veya bir bildirim g\u00f6nderme mant\u0131\u011f\u0131 olabilir.\n  }\n}\n\nvoid main() {\n  AppSettings settings = AppSettings();\n\n  \/\/ Kullan\u0131c\u0131 tercihlerine g\u00f6re temay\u0131 ayarla\n  settings.setThemeMode(ThemeMode.dark);\n\n  \/\/ Mevcut temay\u0131 kontrol et\n  if (settings.currentThemeMode == ThemeMode.dark) {\n    print(\"Koyu tema aktif.\");\n  } else if (settings.currentThemeMode == ThemeMode.light) {\n    print(\"A\u00e7\u0131k tema aktif.\");\n  } else {\n    print(\"Sistem temas\u0131 kullan\u0131l\u0131yor.\");\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>AppSettings<\/code> s\u0131n\u0131f\u0131, uygulaman\u0131n tema modunu y\u00f6netir. <code>setThemeMode<\/code> metodu, <code>ThemeMode<\/code> enum'\u0131n\u0131 bir parametre olarak al\u0131r, bu da sadece ge\u00e7erli tema modlar\u0131n\u0131n atanabilmesini garanti eder. B\u00f6ylece, string tabanl\u0131 hatalar\u0131n \u00f6n\u00fcne ge\u00e7ilir ve kodunuzun tip g\u00fcvenli\u011fi artar. Bu yakla\u015f\u0131m, sadece tema modlar\u0131 i\u00e7in de\u011fil, dil ayarlar\u0131, bildirim tercihleri gibi di\u011fer yap\u0131land\u0131rma se\u00e7enekleri i\u00e7in de uygulanabilir.<\/p>\n<h3 id=\"durum-yonetiminde-enum-kullanimi-form-dogrulama\">Durum Y\u00f6netiminde Enum Kullan\u0131m\u0131: Form Do\u011frulama<\/h3>\n<p>Form do\u011frulama, kullan\u0131c\u0131 giri\u015flerini i\u015flerken s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan bir g\u00f6revdir. Bir form alan\u0131n\u0131n farkl\u0131 do\u011frulama durumlar\u0131 (ge\u00e7erli, bo\u015f, ge\u00e7ersiz format) olabilir. Bu durumlar\u0131 enum'larla y\u00f6netmek, do\u011frulama mant\u0131\u011f\u0131n\u0131z\u0131 daha net ve y\u00f6netilebilir hale getirir.<\/p>\n<pre><code class=\"language-dart\">\nenum InputValidationState {\n  valid,\n  empty,\n  invalidFormat,\n  tooShort,\n}\n\nString validateEmail(String email) {\n  if (email.isEmpty) {\n    return InputValidationState.empty.name; \/\/ Sadece \u00f6rnek i\u00e7in .name kullan\u0131ld\u0131\n  }\n  if (!email.contains('@') || !email.contains('.')) {\n    return InputValidationState.invalidFormat.name;\n  }\n  return InputValidationState.valid.name;\n}\n\nvoid processForm(String emailInput) {\n  String validationResult = validateEmail(emailInput);\n\n  switch (validationResult) { \/\/ Genellikle enum direkt kullan\u0131l\u0131r, burada string d\u00f6nd\u00fcr\u00fcld\u00fc\n    case 'valid':\n      print(\"E-posta ge\u00e7erli: $emailInput\");\n      \/\/ Formu g\u00f6nderme mant\u0131\u011f\u0131\n      break;\n    case 'empty':\n      print(\"E-posta alan\u0131 bo\u015f b\u0131rak\u0131lamaz.\");\n      break;\n    case 'invalidFormat':\n      print(\"Ge\u00e7ersiz e-posta format\u0131.\");\n      break;\n    default:\n      print(\"Bilinmeyen hata.\");\n  }\n}\n\nvoid main() {\n  processForm(\"test@example.com\");\n  processForm(\"\");\n  processForm(\"invalid-email\");\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki <code>validateEmail<\/code> fonksiyonu, bir e-posta adresinin durumunu <code>InputValidationState<\/code> enum'\u0131 \u00fczerinden d\u00f6nd\u00fcr\u00fcr (\u00f6rnekte <code>.name<\/code> kullan\u0131larak string d\u00f6nd\u00fcr\u00fclm\u00fc\u015ft\u00fcr, ancak genellikle direkt enum de\u011ferini d\u00f6nd\u00fcrmek ve <code>switch<\/code> ifadesinde kullanmak daha iyidir). Bu sayede, UI'da do\u011frulama mesajlar\u0131n\u0131 g\u00f6stermek veya form g\u00f6nderme mant\u0131\u011f\u0131n\u0131 tetiklemek i\u00e7in temiz ve a\u00e7\u0131k bir yol elde etmi\u015f oluruz. <code>switch<\/code> ifadesi, enum de\u011ferlerine g\u00f6re farkl\u0131 eylemler ger\u00e7ekle\u015ftirmek i\u00e7in harika bir yoldur, \u00e7\u00fcnk\u00fc Dart'\u0131n <code>switch<\/code>'i enum'larla tam uyumludur ve olas\u0131 t\u00fcm durumlar\u0131 kapsamad\u0131\u011f\u0131n\u0131zda sizi uyarabilir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Enum'lar\u0131 <code>switch<\/code> ifadelerinde kullan\u0131rken, Dart'\u0131n <code>switch<\/code> kapsaml\u0131l\u0131k kontrol\u00fcnden faydalan\u0131n. E\u011fer t\u00fcm enum de\u011ferlerini kapsamazsan\u0131z, derleyici sizi uyarabilir (e\u011fer <code>exhaustive<\/code> anahtar kelimesi kullan\u0131rsan\u0131z veya lint kurallar\u0131n\u0131z varsa), bu da potansiyel hatalar\u0131 erken a\u015famada yakalaman\u0131z\u0131 sa\u011flar.\n    <\/div>\n<p>Bu pratik \u00f6rnekler, Dart enum'lar\u0131n\u0131n sadece bir de\u011fer listesinden \u00e7ok daha fazlas\u0131 oldu\u011funu ve kodunuzu daha g\u00fcvenli, okunabilir ve bak\u0131m\u0131 kolay hale getirme potansiyeli ta\u015f\u0131d\u0131\u011f\u0131n\u0131 g\u00f6stermektedir. Geli\u015fmi\u015f enum'lar sayesinde bu yetenekler \u00e7ok daha ileri seviyelere ta\u015f\u0131nacak, ancak temel kullan\u0131m bile kod kalitesini art\u0131rmak i\u00e7in yeterlidir.<\/p>\n<h2 id=\"enhanced-enums-ile-dartta-neler-yapilabilir-enumlarin-siniflara-donusumu\">Enhanced Enums ile Dart'ta Neler Yap\u0131labilir? Enum'lar\u0131n S\u0131n\u0131flara D\u00f6n\u00fc\u015f\u00fcm\u00fc<\/h2>\n<p>Dart 2.17 ile hayat\u0131m\u0131za giren Enhanced Enums, yani Geli\u015fmi\u015f Enum'lar, geleneksel enum kavram\u0131n\u0131 k\u00f6kten de\u011fi\u015ftirerek onlar\u0131 tam te\u015fekk\u00fcll\u00fc s\u0131n\u0131flar gibi davranabilen yap\u0131lara d\u00f6n\u00fc\u015ft\u00fcrd\u00fc. Bu, enum'lar\u0131n sadece sabit bir de\u011fer listesi olmaktan \u00e7\u0131k\u0131p, bu de\u011ferlerle ili\u015fkili veri ve davran\u0131\u015flar\u0131 da i\u00e7erebilmesini sa\u011flad\u0131. Art\u0131k bir enum de\u011feri, kendine ait alanlara (fields), metodlara ve hatta kuruculara (constructors) sahip olabilir. Bu, daha \u00f6nce string sabitlerle veya ayr\u0131 yard\u0131mc\u0131 s\u0131n\u0131flarla \u00e7\u00f6z\u00fclen bir\u00e7ok karma\u015f\u0131k senaryonun, \u00e7ok daha temiz, tip g\u00fcvenli ve Dart'\u0131n kendi dil \u00f6zellikleri i\u00e7inde \u00e7\u00f6z\u00fclmesine olanak tan\u0131r.<\/p>\n<h3 id=\"alanlar-metodlar-ve-kurucular-enumlara-ozellik-katma\">Alanlar, Metodlar ve Kurucular: Enum'lara \u00d6zellik Katma<\/h3>\n<p>Geli\u015fmi\u015f enum'lar\u0131n en b\u00fcy\u00fck yenili\u011fi, her bir enum de\u011ferine \u00f6zel alanlar ekleyebilme yetene\u011fidir. Bu alanlar, <code>final<\/code> olarak tan\u0131mlanmal\u0131 ve kurucu arac\u0131l\u0131\u011f\u0131yla ba\u015flat\u0131lmal\u0131d\u0131r. Ayr\u0131ca, enum'lara normal s\u0131n\u0131flarda oldu\u011fu gibi metodlar da ekleyebiliriz. Bu, her bir enum de\u011ferinin, temsil etti\u011fi duruma \u00f6zg\u00fc bir davran\u0131\u015fa sahip olabilece\u011fi anlam\u0131na gelir. A\u015fa\u011f\u0131daki \u00f6rne\u011fi inceleyelim:<\/p>\n<pre><code class=\"language-dart\">\nenum HttpStatus {\n  ok(200, 'OK'),\n  notFound(404, 'Bulunamad\u0131'),\n  internalServerError(500, '\u0130\u00e7 Sunucu Hatas\u0131'),\n  unauthorized(401, 'Yetkisiz'),\n  badRequest(400, 'K\u00f6t\u00fc \u0130stek');\n\n  final int code;\n  final String description;\n\n  const HttpStatus(this.code, this.description); \/\/ Kurucu metot\n\n  bool isSuccess() => code >= 200 && code < 300;\n  bool isClientError() => code >= 400 && code < 500;\n  bool isServerError() => code >= 500 && code < 600;\n\n  @override\n  String toString() => '$code: $description';\n}\n\nvoid main() {\n  HttpStatus status = HttpStatus.ok;\n  print(\"HTTP Durumu: ${status.code} - ${status.description}\");\n  print(\"Ba\u015far\u0131l\u0131 m\u0131? ${status.isSuccess()}\"); \/\/ Metodu \u00e7a\u011f\u0131r\n\n  status = HttpStatus.notFound;\n  print(status); \/\/ toString() metodu \u00e7al\u0131\u015f\u0131r\n  print(\"M\u00fc\u015fteri hatas\u0131 m\u0131? ${status.isClientError()}\");\n\n  HttpStatus errorStatus = HttpStatus.internalServerError;\n  print(\"Sunucu hatas\u0131 m\u0131? ${errorStatus.isServerError()}\");\n\n  \/\/ \u00d6rnek bir vaka: Bir API yan\u0131t\u0131n\u0131 i\u015fleme\n  int apiResponseCode = 404;\n  HttpStatus? responseStatus;\n\n  try {\n    responseStatus = HttpStatus.values.firstWhere(\n      (s) => s.code == apiResponseCode,\n      orElse: () => throw Exception(\"Bilinmeyen HTTP kodu: $apiResponseCode\"),\n    );\n  } catch (e) {\n    print(e);\n  }\n\n  if (responseStatus != null) {\n    print(\"API yan\u0131t durumu: $responseStatus.isClientError()\");\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>HttpStatus<\/code> enum'\u0131, her bir HTTP durum kodu i\u00e7in hem bir say\u0131sal kod (<code>code<\/code>) hem de bir a\u00e7\u0131klama (<code>description<\/code>) tutar. <code>const HttpStatus(this.code, this.description)<\/code> ifadesi, her bir enum de\u011ferinin nas\u0131l olu\u015fturuldu\u011funu g\u00f6steren \u00f6zel bir kurucudur. Ayr\u0131ca, <code>isSuccess()<\/code>, <code>isClientError()<\/code> ve <code>isServerError()<\/code> gibi metodlar ekleyerek, her bir durumun kendi mant\u0131\u011f\u0131n\u0131 i\u00e7ermesini sa\u011flad\u0131k. <code>toString()<\/code> metodunu override ederek, enum de\u011ferlerinin konsola yazd\u0131r\u0131ld\u0131\u011f\u0131nda daha anlaml\u0131 \u00e7\u0131kt\u0131lar vermesini sa\u011flad\u0131k. Bu yakla\u015f\u0131m, kod tekrar\u0131n\u0131 azalt\u0131r ve her bir durumla ilgili mant\u0131\u011f\u0131n tek bir yerde toplanmas\u0131n\u0131 sa\u011flar, bu da bak\u0131m\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3 id=\"arayuzler-ve-mixinler-ile-enum-yetkinliklerini-genisletme\">Aray\u00fczler ve Mixin'ler ile Enum Yetkinliklerini Geni\u015fletme<\/h3>\n<p>Geli\u015fmi\u015f enum'lar, Dart'\u0131n di\u011fer g\u00fc\u00e7l\u00fc \u00f6zellikleri olan aray\u00fczleri (<code>implements<\/code>) ve mixin'leri (<code>with<\/code>) de kullanabilir. Bu, enum'lar\u0131n daha esnek olmas\u0131n\u0131 ve belirli aray\u00fczleri uygulayarak polimorfik davran\u0131\u015flar sergilemesini sa\u011flar. Bu, \u00f6zellikle farkl\u0131 t\u00fcrdeki enum'lar\u0131 ayn\u0131 soyut tip alt\u0131nda i\u015flemek istedi\u011finizde \u00e7ok yararl\u0131d\u0131r. Diyelim ki, farkl\u0131 t\u00fcrdeki mesajlar\u0131 (bilgi, uyar\u0131, hata) i\u015fleyen bir sisteminiz var ve her mesaj t\u00fcr\u00fcn\u00fcn belirli bir \u015fekilde g\u00f6r\u00fcnt\u00fclenebilmesi gerekiyor:<\/p>\n<pre><code class=\"language-dart\">\nabstract interface class DisplayableMessage {\n  String get message;\n  String get icon;\n  void showNotification();\n}\n\nenum MessageType implements DisplayableMessage {\n  info('Bilgi mesaj\u0131.', '\u2139\ufe0f'),\n  warning('Uyar\u0131 mesaj\u0131!', '\u26a0\ufe0f'),\n  error('Hata olu\u015ftu!', '\u274c');\n\n  @override\n  final String message;\n  @override\n  final String icon;\n\n  const MessageType(this.message, this.icon);\n\n  @override\n  void showNotification() {\n    print('$icon ${message}');\n    \/\/ Burada ger\u00e7ek bir bildirim g\u00f6sterme mant\u0131\u011f\u0131 olabilir\n  }\n}\n\nvoid main() {\n  List<DisplayableMessage> messages = [\n    MessageType.info,\n    MessageType.error,\n    MessageType.warning,\n  ];\n\n  for (var msg in messages) {\n    msg.showNotification(); \/\/ Polimorfik \u00e7a\u011fr\u0131\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>MessageType<\/code> enum'\u0131 <code>DisplayableMessage<\/code> aray\u00fcz\u00fcn\u00fc uygular. Her enum de\u011feri, <code>message<\/code> ve <code>icon<\/code> gibi kendi alanlar\u0131na sahiptir ve <code>showNotification()<\/code> metodunu kendi i\u00e7inde uygular. Bu, farkl\u0131 mesaj t\u00fcrlerini ayn\u0131 aray\u00fcz \u00fczerinden i\u015fleyebilmemizi sa\u011flar, bu da kod esnekli\u011fini ve yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r. Geli\u015fmi\u015f enum'lar sayesinde, art\u0131k bu t\u00fcr karma\u015f\u0131k durumlar\u0131 tek bir temiz ve anlaml\u0131 yap\u0131da birle\u015ftirebiliriz, bu da kodunuzu hem okunabilir hem de y\u00f6netilebilir k\u0131lar.<\/p>\n<h2 id=\"gercek-dunya-senaryolarinda-gelismis-enum-uygulamalari-derinlemesine-ornekler\">Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda Geli\u015fmi\u015f Enum Uygulamalar\u0131: Derinlemesine \u00d6rnekler<\/h2>\n<p>Enhanced Enums'lar\u0131n teorik yeteneklerini ke\u015ffettik. \u015eimdi, bu g\u00fc\u00e7l\u00fc yap\u0131y\u0131 ger\u00e7ek d\u00fcnya problemlerini \u00e7\u00f6zmek i\u00e7in nas\u0131l kullanabilece\u011fimizi daha detayl\u0131 vaka analizleri ve pratik \u00f6rneklerle peki\u015ftirelim. Bu senaryolar, karma\u015f\u0131k durum y\u00f6netiminden kullan\u0131c\u0131 aray\u00fcz\u00fc adaptasyonuna, hatta veritaban\u0131 i\u015flemlerine kadar geni\u015f bir yelpazeyi kaps\u0131yor.<\/p>\n<h3 id=\"coklu-dil-destegi-ve-yerellestirme\">\u00c7oklu Dil Deste\u011fi ve Yerelle\u015ftirme (Localization)<\/h3>\n<p>Uygulamalar\u0131n globalle\u015fmesiyle birlikte \u00e7oklu dil deste\u011fi (localization) olmazsa olmaz bir \u00f6zellik haline geldi. Geli\u015fmi\u015f enum'lar, bu s\u00fcreci basitle\u015ftirmek i\u00e7in harika bir yol sunabilir. Her dil i\u00e7in ayr\u0131 bir enum tan\u0131mlamak yerine, tek bir enum \u00fczerinde birden fazla dil i\u00e7in metinleri tutabiliriz.<\/p>\n<pre><code class=\"language-dart\">\nenum AppMessage {\n  welcome(\n    {'en': 'Welcome!', 'tr': 'Ho\u015f geldiniz!'}\n  ),\n  logoutConfirm(\n    {'en': 'Are you sure you want to log out?', 'tr': '\u00c7\u0131k\u0131\u015f yapmak istedi\u011finize emin misiniz?'}\n  ),\n  saveSuccess(\n    {'en': 'Saved successfully.', 'tr': 'Ba\u015far\u0131yla kaydedildi.'}\n  );\n\n  final Map<String, String> translations;\n\n  const AppMessage(this.translations);\n\n  String get(String localeCode) {\n    return translations[localeCode] ?? translations['en'] ?? 'Translation missing';\n  }\n}\n\nvoid main() {\n  String currentLocale = 'tr'; \/\/ Kullan\u0131c\u0131n\u0131n dil tercihi\n\n  print(\"TR: ${AppMessage.welcome.get(currentLocale)}\");\n  print(\"EN: ${AppMessage.welcome.get('en')}\");\n  print(\"TR: ${AppMessage.logoutConfirm.get(currentLocale)}\");\n  print(\"EN: ${AppMessage.saveSuccess.get('en')}\");\n\n  \/\/ Olmayan bir dil kodu ile deneme\n  print(\"FR: ${AppMessage.welcome.get('fr')}\");\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>AppMessage<\/code> enum'\u0131, her bir mesaj i\u00e7in farkl\u0131 dillerdeki \u00e7evirileri bir <code>Map<\/code> i\u00e7inde tutar. <code>get(String localeCode)<\/code> metodu sayesinde, mevcut dil koduna g\u00f6re do\u011fru \u00e7eviriyi kolayca alabiliriz. Bu, uygulaman\u0131zdaki sabit metinlerin y\u00f6netimini merkezile\u015ftirir ve \u00e7evirilerin g\u00fcncellenmesini \u00e7ok daha kolay hale getirir. Yeni bir mesaj veya dil eklendi\u011finde, sadece enum tan\u0131m\u0131n\u0131 g\u00fcncellemek yeterlidir.<\/p>\n<h3 id=\"duruma-ozgu-ui-ve-davranis\">Duruma \u00d6zg\u00fc UI ve Davran\u0131\u015f<\/h3>\n<p>Bir uygulaman\u0131n farkl\u0131 ekranlar\u0131 veya widget'lar\u0131, belirli bir duruma g\u00f6re farkl\u0131 g\u00f6r\u00fcn\u00fcmler ve etkile\u015fimler sunabilir. \u00d6rne\u011fin, bir veri y\u00fckleme durumu (beklemede, y\u00fckl\u00fcyor, ba\u015far\u0131l\u0131, hata). Enhanced Enums ile her bir duruma, UI'da g\u00f6sterilecek bir metin, bir ikon veya hatta belirli bir eylem ili\u015fkilendirebiliriz.<\/p>\n<pre><code class=\"language-dart\">\nimport 'dart:io';\n\nenum DataState {\n  initial('Haz\u0131r', 'blue'),\n  loading('Y\u00fckleniyor...', 'orange'),\n  success('Ba\u015far\u0131l\u0131!', 'green'),\n  error('Hata olu\u015ftu.', 'red');\n\n  final String message;\n  final String color; \/\/ UI'da kullan\u0131lacak renk\n\n  const DataState(this.message, this.color);\n\n  \/\/ Duruma \u00f6zel bir eylem\n  void handleButtonPress() {\n    switch (this) {\n      case DataState.initial:\n        print(\"Veri y\u00fcklemeye ba\u015fla.\");\n        break;\n      case DataState.loading:\n        print(\"L\u00fctfen bekleyin, veri y\u00fckleniyor.\");\n        break;\n      case DataState.success:\n        print(\"Veri ba\u015far\u0131yla y\u00fcklendi, yeni i\u015flem ba\u015flat.\");\n        break;\n      case DataState.error:\n        print(\"Tekrar denemek i\u00e7in d\u00fc\u011fmeye bas.\");\n        break;\n    }\n  }\n\n  \/\/ UI bile\u015fenleri i\u00e7in g\u00f6rsel metot\n  String get displayIcon {\n    switch (this) {\n      case DataState.initial: return '\ud83d\ude80';\n      case DataState.loading: return '\u23f3';\n      case DataState.success: return '\u2705';\n      case DataState.error: return '\u274c';\n    }\n  }\n}\n\nvoid simulateDataFetch(DataState currentState) {\n  print(\"Mevcut durum: ${currentState.displayIcon} ${currentState.message}\");\n  currentState.handleButtonPress();\n  print(\"--------------------\");\n}\n\nvoid main() {\n  simulateDataFetch(DataState.initial);\n  simulateDataFetch(DataState.loading);\n  simulateDataFetch(DataState.success);\n  simulateDataFetch(DataState.error);\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>DataState<\/code> enum'\u0131, uygulaman\u0131n veri y\u00fckleme s\u00fcrecindeki farkl\u0131 a\u015famalar\u0131 temsil eder. Her bir durumun kendi <code>message<\/code> ve <code>color<\/code> \u00f6zelliklerinin yan\u0131 s\u0131ra, <code>handleButtonPress()<\/code> gibi duruma \u00f6zel davran\u0131\u015flar ve <code>displayIcon<\/code> gibi UI'a y\u00f6nelik yard\u0131mc\u0131 metodlar\u0131 vard\u0131r. Bu yap\u0131, Flutter gibi UI \u00e7er\u00e7evelerinde, widget'lar\u0131n mevcut <code>DataState<\/code>'e g\u00f6re dinamik olarak g\u00fcncellenmesini veya farkl\u0131 eylemler ger\u00e7ekle\u015ftirmesini son derece kolayla\u015ft\u0131r\u0131r. Art\u0131k <code>if\/else if<\/code> zincirleri veya karma\u015f\u0131k <code>switch<\/code> ifadeleri yerine, enum de\u011ferinin kendisi t\u00fcm gerekli bilgiyi ve davran\u0131\u015f\u0131 ta\u015f\u0131r.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Enhanced Enums ile karma\u015f\u0131k durum makineleri (state machines) olu\u015fturabilirsiniz. Her bir enum de\u011feri bir durumu temsil ederken, ge\u00e7i\u015f (transition) metodlar\u0131 tan\u0131mlayarak bir durumdan di\u011ferine g\u00fcvenli ve tip-g\u00fcvenli ge\u00e7i\u015fler yapabilirsiniz. Bu, \u00f6zellikle oyun geli\u015ftirme veya uzun s\u00fcreli arka plan i\u015flemleri i\u00e7in \u00e7ok g\u00fc\u00e7l\u00fc bir yakla\u015f\u0131md\u0131r.\n    <\/div>\n<p>Bu \u00f6rnekler, Enhanced Enums'\u0131n ne kadar esnek ve g\u00fc\u00e7l\u00fc oldu\u011funu g\u00f6stermektedir. Kodunuzdaki karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131rken, okunabilirli\u011fi ve bak\u0131m\u0131 art\u0131rarak daha sa\u011flam uygulamalar geli\u015ftirmenize olanak tan\u0131r. En basit sabit listelerinden, kendi davran\u0131\u015flar\u0131na sahip s\u00fcper g\u00fc\u00e7l\u00fc s\u0131n\u0131flara evrilen enum'lar, Dart geli\u015ftiricileri i\u00e7in ger\u00e7ekten oyunun kurallar\u0131n\u0131 de\u011fi\u015ftiren bir yeniliktir.<\/p>\n<h2 id=\"performans-ve-bakim-enum-kullaniminda-dikkat-edilmesi-gerekenler-nelerdir\">Performans ve Bak\u0131m: Enum Kullan\u0131m\u0131nda Dikkat Edilmesi Gerekenler Nelerdir?<\/h2>\n<p>Dart enum'lar\u0131, \u00f6zellikle Enhanced Enums ile birlikte, kod kalitesini ve geli\u015ftirici verimlili\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131ran g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. Ancak her ara\u00e7ta oldu\u011fu gibi, enum'lar\u0131 kullan\u0131rken de dikkat edilmesi gereken baz\u0131 noktalar vard\u0131r. Performans etkileri, bak\u0131m kolayl\u0131\u011f\u0131 ve do\u011fru kullan\u0131m senaryolar\u0131n\u0131 anlamak, uygulaman\u0131z\u0131n uzun vadede sa\u011fl\u0131kl\u0131 kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3 id=\"enum-mi-sinif-mi-dogru-secimi-yapmak\">Enum m\u0131, S\u0131n\u0131f m\u0131? Do\u011fru Se\u00e7imi Yapmak<\/h3>\n<p>Enhanced Enums'lar s\u0131n\u0131flara \u00e7ok benzemeye ba\u015flad\u0131, peki ne zaman bir enum ne zaman normal bir s\u0131n\u0131f kullanmal\u0131y\u0131z? Temel kural \u015fudur: E\u011fer sabit ve kapal\u0131 bir de\u011fer k\u00fcmesini temsil ediyorsan\u0131z (yani, de\u011ferlerin listesi \u00f6nceden biliniyor ve genellikle de\u011fi\u015fmeyecekse), enum kullanmak idealdir. E\u011fer de\u011ferler dinamik olarak olu\u015fturulabilir, farkl\u0131 parametrelerle ba\u015flat\u0131labilir veya \u00e7al\u0131\u015fma zaman\u0131nda yeni tipler eklenmesi gerekiyorsa, o zaman normal bir s\u0131n\u0131f veya sealed class'lar daha uygun bir se\u00e7enek olacakt\u0131r.<\/p>\n<ul>\n<li><strong>Enum Kullan\u0131n:<\/strong> HTTP durum kodlar\u0131, uygulama tema modlar\u0131, hata t\u00fcrleri, haftan\u0131n g\u00fcnleri, aylar\u0131n isimleri gibi sabit, bilinen ve de\u011fi\u015fmeyecek de\u011fer listeleri.<\/li>\n<li><strong>S\u0131n\u0131f Kullan\u0131n:<\/strong> Kullan\u0131c\u0131 profilleri, veritaban\u0131 kay\u0131tlar\u0131, a\u011fdan gelen dinamik veri yap\u0131lar\u0131 veya kullan\u0131c\u0131 taraf\u0131ndan olu\u015fturulabilen herhangi bir nesne gibi dinamik, geni\u015fleyebilir veya kompleks veri yap\u0131lar\u0131.<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin, bir <code>UserRole<\/code> (Admin, Editor, Viewer) i\u00e7in enum kullanmak mant\u0131kl\u0131d\u0131r, \u00e7\u00fcnk\u00fc roller sabittir. Ancak bir <code>User<\/code> nesnesi (ad\u0131, e-postas\u0131, ya\u015f\u0131 gibi \u00f6zelliklere sahip) i\u00e7in bir s\u0131n\u0131f kullanmal\u0131s\u0131n\u0131z, \u00e7\u00fcnk\u00fc kullan\u0131c\u0131 verileri dinamiktir ve her kullan\u0131c\u0131 i\u00e7in farkl\u0131l\u0131k g\u00f6sterir.<\/p>\n<h3 id=\"immutability-ve-enumlar\">Immutability ve Enum'lar<\/h3>\n<p>Dart'taki enum de\u011ferleri varsay\u0131lan olarak sabittir (immutable). Yani bir enum de\u011ferinin alanlar\u0131n\u0131 bir kez atad\u0131ktan sonra de\u011fi\u015ftiremezsiniz. Bu, kodunuzun \u00f6ng\u00f6r\u00fclebilirli\u011fini art\u0131r\u0131r ve e\u015fzamanl\u0131l\u0131k (concurrency) sorunlar\u0131n\u0131 azaltmaya yard\u0131mc\u0131 olur. Bu nedenle, enum'lara ekledi\u011finiz alanlar\u0131n da <code>final<\/code> olmas\u0131 \u00f6nemlidir. Bu, Dart'\u0131n sabitlik prensiplerine uygun bir yakla\u015f\u0131md\u0131r ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-dart\">\n\/\/ Do\u011fru kullan\u0131m: T\u00fcm alanlar final\nenum ProductType {\n  electronic(10),\n  clothing(20),\n  food(5);\n\n  final int taxRate;\n  const ProductType(this.taxRate);\n}\n\n\/\/ Yanl\u0131\u015f kullan\u0131m: De\u011fi\u015ftirilebilir alanlar potansiyel sorunlara yol a\u00e7ar\n\/\/ class MutableProductType { \/\/ Enum de\u011fil, normal s\u0131n\u0131f \u00f6rne\u011fi\n\/\/   int taxRate;\n\/\/   MutableProductType(this.taxRate);\n\/\/ }\n    <\/pre>\n<p><\/code><\/p>\n<h3 id=\"performans-etkisi\">Performans Etkisi<\/h3>\n<p>Enhanced Enums'lar, arka planda asl\u0131nda \u00f6zel bir s\u0131n\u0131f yap\u0131s\u0131d\u0131r. Dolay\u0131s\u0131yla, basit bir string veya integer sabite g\u00f6re hafif bir ek y\u00fck getirebilirler (\u00f6rne\u011fin, her bir enum de\u011ferinin bir nesne olarak bellekte yer almas\u0131). Ancak, modern Dart VM'leri ve derleyicileri bu t\u00fcr optimizasyonlar\u0131 olduk\u00e7a iyi yapar. \u00c7o\u011fu uygulamada, bu performans fark\u0131 ihmal edilebilir d\u00fczeydedir ve elde edilen tip g\u00fcvenli\u011fi, okunabilirlik ve bak\u0131m kolayl\u0131\u011f\u0131 gibi faydalar, bu k\u00fc\u00e7\u00fck ek y\u00fck\u00fc fazlas\u0131yla dengeler.<\/p>\n<p>Genel olarak, performans kayg\u0131lar\u0131 nedeniyle enum kullanmaktan \u00e7ekinmek yersizdir. B\u00fcy\u00fck miktarda ve \u00e7ok s\u0131k d\u00f6ng\u00fcde kullan\u0131lan kritik performans yollar\u0131nda (hot paths) ekstrem optimizasyonlar gerekiyorsa, o zaman daha d\u00fc\u015f\u00fck seviyeli sabitler d\u00fc\u015f\u00fcnebilirsiniz. Ancak bu t\u00fcr senaryolar olduk\u00e7a nadirdir.<\/p>\n<h3 id=\"bakim-ve-genisletilebilirlik\">Bak\u0131m ve Geni\u015fletilebilirlik<\/h3>\n<p>Enum'lar, kodun bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r \u00e7\u00fcnk\u00fc ilgili t\u00fcm mant\u0131\u011f\u0131 tek bir yerde toplarlar. Yeni bir durum ekledi\u011finizde, sadece enum tan\u0131m\u0131n\u0131 g\u00fcncellemeniz ve ilgili metodlar\u0131 veya alanlar\u0131 eklemeniz yeterlidir. Bu, kod tekrar\u0131n\u0131 azalt\u0131r ve gelecekteki de\u011fi\u015fikliklerin etkisini s\u0131n\u0131rlar.<\/p>\n<p>Ancak, enum'lar\u0131n geni\u015fletilebilirli\u011fi s\u0131n\u0131rl\u0131d\u0131r. Bir enum'a yeni de\u011ferler eklemek kolayd\u0131r, ancak d\u0131\u015far\u0131dan yeni tipler ekleyerek enum'\u0131 geni\u015fletemezsiniz. E\u011fer uygulaman\u0131z\u0131n mod\u00fcler bir yap\u0131s\u0131 varsa ve \u00fc\u00e7\u00fcnc\u00fc taraf eklentilerin kendi durumlar\u0131n\u0131 veya tiplerini eklemesini gerektiriyorsa, o zaman soyut s\u0131n\u0131flar, aray\u00fczler veya sealed class'lar gibi daha esnek yap\u0131lar daha uygun olabilir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Enum'lar\u0131 serialize (JSON'a d\u00f6n\u00fc\u015ft\u00fcrme) veya deserialize (JSON'dan d\u00f6n\u00fc\u015ft\u00fcrme) ederken <code>.name<\/code> \u00f6zelli\u011fini kullan\u0131n. Bu, hem platformlar aras\u0131 uyumlulu\u011fu sa\u011flar hem de gelecekte enum'a yeni de\u011ferler eklendi\u011finde geriye d\u00f6n\u00fck uyumlulu\u011fu korumak i\u00e7in daha kolay bir yol sunar.\n    <\/div>\n<p>Sonu\u00e7 olarak, Dart enum'lar\u0131 g\u00fc\u00e7l\u00fc ve kullan\u0131\u015fl\u0131 bir \u00f6zelliktir. Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda kodunuzu daha g\u00fcvenli, okunabilir ve y\u00f6netilebilir hale getirirler. Anahtar, her senaryo i\u00e7in en uygun arac\u0131 se\u00e7mektir. \u00c7o\u011fu durumda, enum'lar m\u00fckemmel bir se\u00e7im olacakt\u0131r.<\/p>\n<h2 id=\"mobil-uyumlu-html-ve-css-ipuclari-icerigin-sunumu\">Mobil Uyumlu HTML ve CSS \u0130pu\u00e7lar\u0131: \u0130\u00e7eri\u011fin Sunumu<\/h2>\n<p>Dart enum'lar\u0131n\u0131n g\u00fcc\u00fcn\u00fc anlad\u0131\u011f\u0131m\u0131za g\u00f6re, bu teknik makaleyi okuyuculara en iyi \u015fekilde sunman\u0131n yollar\u0131ndan biri de mobil uyumlu bir HTML yap\u0131s\u0131 kullanmakt\u0131r. Teknik i\u00e7eriklerin, kod bloklar\u0131n\u0131n ve tablolar\u0131n farkl\u0131 ekran boyutlar\u0131nda d\u00fczg\u00fcn g\u00f6r\u00fcnmesi, okuyucu deneyimi i\u00e7in kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcmde, makalenin g\u00f6rsel sunumunu mobil cihazlar i\u00e7in optimize etmek ad\u0131na baz\u0131 HTML ve CSS ipu\u00e7lar\u0131na de\u011finece\u011fiz, \u00f6zellikle kod bloklar\u0131 ve tablolar i\u00e7in.<\/p>\n<h3 id=\"responsive-kod-bloklari\">Responsive Kod Bloklar\u0131<\/h3>\n<p>Kod bloklar\u0131, teknik makalelerin temelini olu\u015fturur. Uzun kod sat\u0131rlar\u0131 mobil ekranlarda yatay kayd\u0131rma \u00e7ubuklar\u0131na neden olabilir, bu da kullan\u0131c\u0131 deneyimini olumsuz etkiler. Bunu engellemek i\u00e7in <code><\/p>\n<pre><code><\/pre>\n<p><\/code><\/code> etiketini bir sar\u0131c\u0131 (wrapper) i\u00e7ine alarak veya do\u011frudan <code><\/p>\n<pre><\/code> etiketine <code>overflow-x: auto;<\/code> uygulayarak yatay kayd\u0131rmay\u0131 kontrol edebiliriz.<\/p>\n    <pre><code class=\"language-css\">\n\/* Genel kod blo\u011fu stilizasyonu *\/\npre {\n  background-color: #f4f4f4;\n  padding: 15px;\n  border-radius: 5px;\n  overflow-x: auto; \/* Yatay kayd\u0131rmay\u0131 otomatikle\u015ftirir *\/\n  white-space: pre-wrap; \/* Uzun sat\u0131rlar\u0131 otomatik olarak alt sat\u0131ra b\u00f6ler *\/\n  word-wrap: break-word; \/* Kelimeleri k\u0131rarak alt sat\u0131ra ge\u00e7irir *\/\n  font-family: 'Fira Code', 'Cascadia Code', monospace;\n  font-size: 0.9em;\n  line-height: 1.4;\n}\n\n\/* K\u00fc\u00e7\u00fck ekranlar i\u00e7in medya sorgusu *\/\n@media (max-width: 768px) {\n  pre {\n    padding: 10px;\n    font-size: 0.85em;\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki CSS, kod bloklar\u0131n\u0131n hem geni\u015f ekranlarda okunabilir olmas\u0131n\u0131 hem de mobil cihazlarda ta\u015fma yapmadan d\u00fczg\u00fcn g\u00f6r\u00fcnt\u00fclenmesini sa\u011flar. <code>overflow-x: auto;<\/code> \u00f6zellikle \u00f6nemlidir; i\u00e7erik kapsay\u0131c\u0131s\u0131ndan ta\u015ft\u0131\u011f\u0131nda otomatik olarak bir kayd\u0131rma \u00e7ubu\u011fu ekler.<\/p>\n<h3 id=\"responsive-tablolar\">Responsive Tablolar<\/h3>\n<p>E\u011fer makalenizde veri tablolar\u0131 kullan\u0131yorsan\u0131z, bunlar\u0131n da mobil uyumlu olmas\u0131 gerekir. Standart HTML tablolar\u0131 geni\u015f ekranlar i\u00e7in iyi \u00e7al\u0131\u015fsa da, mobil cihazlarda genellikle ekran\u0131 a\u015farlar. Bunu \u00e7\u00f6zmek i\u00e7in tablolar\u0131 bir sar\u0131c\u0131 <code><\/p>\n<div><\/code> i\u00e7ine alabiliriz.<\/p>\n<pre><code class=\"language-css\">\n\/* Responsive tablo sar\u0131c\u0131s\u0131 *\/\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch; \/* iOS'ta daha ak\u0131c\u0131 kayd\u0131rma *\/\n}\n\ntable {\n  width: 100%; \/* Tablonun sar\u0131c\u0131s\u0131na g\u00f6re geni\u015fli\u011fini ayarlar *\/\n  border-collapse: collapse;\n  margin-bottom: 20px;\n}\n\nth, td {\n  border: 1px solid #ddd;\n  padding: 8px;\n  text-align: left;\n}\n\nth {\n  background-color: #f2f2f2;\n}\n\n\/* K\u00fc\u00e7\u00fck ekranlar i\u00e7in \u00f6zel tablo stilleri (iste\u011fe ba\u011fl\u0131) *\/\n@media (max-width: 600px) {\n  table, thead, tbody, th, td, tr {\n    display: block; \/* Her h\u00fccreyi blok element yapar *\/\n  }\n  thead tr {\n    position: absolute;\n    top: -9999px;\n    left: -9999px; \/* Ba\u015fl\u0131klar\u0131 gizler *\/\n  }\n  tr { border: 1px solid #ccc; margin-bottom: 10px; }\n  td {\n    border: none;\n    border-bottom: 1px solid #eee;\n    position: relative;\n    padding-left: 50%;\n    text-align: right;\n  }\n  td:before {\n    position: absolute;\n    top: 6px;\n    left: 6px;\n    width: 45%;\n    padding-right: 10px;\n    white-space: nowrap;\n    content: attr(data-label); \/* Her h\u00fccre i\u00e7in bir etiket g\u00f6sterir *\/\n    font-weight: bold;\n    text-align: left;\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki CSS, tabloyu <code>.table-responsive<\/code> s\u0131n\u0131f\u0131na sahip bir <code>div<\/code> i\u00e7ine sararak yatay kayd\u0131rma \u00e7ubu\u011fu ekler. Medya sorgusu i\u00e7inde, daha k\u00fc\u00e7\u00fck ekranlar i\u00e7in tablonun her h\u00fccresini bir blok elemente d\u00f6n\u00fc\u015ft\u00fcren ve ba\u015fl\u0131klar\u0131 gizleyip her h\u00fccreye <code>data-label<\/code> niteli\u011finden etiket ekleyen bir \"cards\" (kartlar) g\u00f6r\u00fcn\u00fcm\u00fc sunan ileri d\u00fczey bir teknik g\u00f6sterilmi\u015ftir. Bu, \u00f6zellikle veri yo\u011fun tablolar i\u00e7in harika bir mobil deneyim sa\u011flayabilir.<\/p>\n<h3 id=\"genel-font-boyutu-ayarlamasi\">Genel Font Boyutu Ayarlamas\u0131<\/h3>\n<p>Genel metinlerin de mobil cihazlarda rahat okunabilmesi i\u00e7in font boyutlar\u0131n\u0131 ayarlamak \u00f6nemlidir. Medya sorgular\u0131 ile farkl\u0131 ekran boyutlar\u0131na g\u00f6re font boyutlar\u0131n\u0131 de\u011fi\u015ftirebiliriz.<\/p>\n<pre><code class=\"language-css\">\nbody {\n  font-family: Arial, sans-serif;\n  line-height: 1.6;\n  color: #333;\n  font-size: 16px; \/* Varsay\u0131lan font boyutu *\/\n}\n\n@media (max-width: 768px) {\n  body {\n    font-size: 15px; \/* Tablet boyutlar\u0131 i\u00e7in *\/\n  }\n}\n\n@media (max-width: 480px) {\n  body {\n    font-size: 14px; \/* Telefon boyutlar\u0131 i\u00e7in *\/\n  }\n  h2 { font-size: 1.6em; }\n  h3 { font-size: 1.3em; }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu medya sorgular\u0131, ekran boyutu k\u00fc\u00e7\u00fcld\u00fck\u00e7e genel font boyutlar\u0131n\u0131 ve ba\u015fl\u0131k boyutlar\u0131n\u0131 biraz azaltarak metinlerin daha az kayd\u0131rma gerektirmesini ve daha iyi s\u0131\u011fmas\u0131n\u0131 sa\u011flar. Bu ipu\u00e7lar\u0131n\u0131 uygulayarak, Dart enum'lar\u0131 hakk\u0131ndaki bu teknik makaleyi t\u00fcm cihazlarda okunabilir ve eri\u015filebilir hale getirebiliriz.<\/p>\n<h2 id=\"sonuc-dart-enumlari-ile-kodunuzu-nasil-daha-guclu-hale-getirirsiniz\">Sonu\u00e7: Dart Enum'lar\u0131 ile Kodunuzu Nas\u0131l Daha G\u00fc\u00e7l\u00fc Hale Getirirsiniz?<\/h2>\n<p>Bu makale boyunca, Dart enum'lar\u0131n\u0131n basit bir sabit listesinden, Dart 2.17 ile gelen \"Enhanced Enums\" sayesinde kendi alanlar\u0131na, metodlar\u0131na ve hatta kurucular\u0131na sahip, tam te\u015fekk\u00fcll\u00fc s\u0131n\u0131flar gibi davranabilen s\u00fcper g\u00fc\u00e7l\u00fc yap\u0131lara nas\u0131l evrildi\u011fini detayl\u0131 bir \u015fekilde inceledik. Geleneksel yakla\u015f\u0131mlar\u0131n getirdi\u011fi tip g\u00fcvenli\u011fi eksikli\u011fi, okunabilirlik sorunlar\u0131 ve bak\u0131m zorluklar\u0131na kar\u015f\u0131 enum'lar\u0131n sundu\u011fu zarif \u00e7\u00f6z\u00fcmleri ke\u015ffettik. \u00d6zellikle ger\u00e7ek d\u00fcnya senaryolar\u0131nda, UI durumlar\u0131ndan \u00e7oklu dil deste\u011fine kadar geni\u015f bir yelpazede, enum'lar\u0131n kodumuzu nas\u0131l daha mod\u00fcler, temiz ve hatas\u0131z hale getirdi\u011fini \u00f6rneklerle g\u00f6sterdik.<\/p>\n<p>Enhanced Enums'lar, Dart geli\u015ftiricilerinin daha \u00f6nce karma\u015f\u0131k s\u0131n\u0131f hiyerar\u015fileri veya yard\u0131mc\u0131 fonksiyonlarla \u00e7\u00f6zmek zorunda kald\u0131\u011f\u0131 bir\u00e7ok problemi, dilin kendi i\u00e7inde \u00e7ok daha do\u011fal ve efektif bir \u015fekilde \u00e7\u00f6zmesine olanak tan\u0131yor. Bu sayede, kod tekrar\u0131 azal\u0131yor, mant\u0131ksal ba\u011flant\u0131lar daha \u015feffaf hale geliyor ve en \u00f6nemlisi, derleme zaman\u0131nda potansiyel hatalar\u0131 yakalama yetene\u011fimiz art\u0131yor. Performans a\u00e7\u0131s\u0131ndan endi\u015felenmeye gerek kalmadan, tip g\u00fcvenli\u011finin ve kod kalitesinin keyfini \u00e7\u0131karabiliriz.<\/p>\n<p>Unutmamal\u0131y\u0131z ki, her ara\u00e7 gibi enum'lar\u0131n da belirli kullan\u0131m durumlar\u0131 vard\u0131r. Sabit ve \u00f6nceden bilinen de\u011fer k\u00fcmelerini temsil etmek i\u00e7in en iyi se\u00e7enek olsalar da, dinamik ve geni\u015fleyebilir veri yap\u0131lar\u0131 i\u00e7in hala geleneksel s\u0131n\u0131flar daha uygun olabilir. Ancak, \u00e7o\u011fu senaryoda, Dart enum'lar\u0131, kodunuzu daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirmek i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bu bilgileri kullanarak projelerinizde Dart enum'lar\u0131n\u0131 daha bilin\u00e7li ve etkili bir \u015fekilde uygulamaya ba\u015flayabilirsiniz. Kodunuzun gelece\u011fini bug\u00fcnden \u015fekillendirin!<\/p>\n<h3 id=\"sikca-sorulan-sorular-sss\">S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<div class=\"faq\">\n<h4>1. Enum'lar ne zaman kullan\u0131lmamal\u0131?<\/h4>\n<p>Enum'lar, de\u011fer listesi dinamik olarak de\u011fi\u015febilecekse, \u00e7al\u0131\u015fma zaman\u0131nda yeni de\u011ferlerin eklenmesi gerekiyorsa veya her bir de\u011ferin \u00e7ok karma\u015f\u0131k, benzersiz ve farkl\u0131 davran\u0131\u015flara sahip olmas\u0131 gerekiyorsa kullan\u0131lmamal\u0131d\u0131r. Bu durumlarda, soyut s\u0131n\u0131flar, aray\u00fczler veya sealed class'lar gibi daha esnek yap\u0131lar daha uygun olabilir.<\/p>\n<h4>2. Enum'lar\u0131 bir veritaban\u0131nda saklamak m\u00fcmk\u00fcn m\u00fc?<\/h4>\n<p>Evet, m\u00fcmk\u00fcnd\u00fcr. Genellikle enum de\u011ferinin string kar\u015f\u0131l\u0131\u011f\u0131 (<code>enumValue.name<\/code>) veritaban\u0131nda saklan\u0131r. Veritaban\u0131ndan okurken ise bu string de\u011ferini tekrar ilgili enum de\u011ferine d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in <code>Enum.values.firstWhere((e) => e.name == storedString)<\/code> gibi bir y\u00f6ntem kullan\u0131l\u0131r.<\/p>\n<h4>3. Enhanced enum'lar performans etkisi yapar m\u0131?<\/h4>\n<p>Enhanced Enums, arka planda nesne olarak temsil edildi\u011fi i\u00e7in, \u00e7ok basit int veya string sabitlere g\u00f6re teorik olarak ihmal edilebilir d\u00fczeyde hafif bir bellek ve CPU ek y\u00fck\u00fc getirebilir. Ancak, modern Dart VM'leri ve derleyicileri bu t\u00fcr yap\u0131lar\u0131 olduk\u00e7a verimli bir \u015fekilde optimize eder. \u00c7o\u011fu uygulamada, bu performans fark\u0131 fark edilmez ve sa\u011flad\u0131\u011f\u0131 tip g\u00fcvenli\u011fi ile kod kalitesi faydalar\u0131 bu k\u00fc\u00e7\u00fck ek y\u00fck\u00fc fazlas\u0131yla kar\u015f\u0131lar.<\/p>\n<h4>4. Enum'lara uzant\u0131 metodlar\u0131 nas\u0131l eklenir?<\/h4>\n<p>Dart'ta uzant\u0131 metodlar\u0131 (extension methods) kullanarak mevcut enum'lara yeni metodlar ekleyebilirsiniz. Bu, \u00f6zellikle enhanced enum'lara ge\u00e7i\u015f yapmadan \u00f6nce eski enum'lara yeni davran\u0131\u015flar eklemek istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-dart\">\nextension OrderStatusExtension on OrderStatus {\n  String get displayString {\n    switch (this) {\n      case OrderStatus.pending: return 'Beklemede';\n      case OrderStatus.processing: return '\u0130\u015fleniyor';\n      case OrderStatus.completed: return 'Tamamland\u0131';\n      case OrderStatus.cancelled: return '\u0130ptal Edildi';\n      case OrderStatus.returned: return '\u0130ade Edildi';\n    }\n  }\n}\n\n\/\/ Kullan\u0131m: OrderStatus.pending.displayString\n        <\/pre>\n<p><\/code><\/p>\n<h4>5. Enum'lar ile sealed s\u0131n\u0131flar aras\u0131ndaki fark nedir?<\/h4>\n<p>Hem enum'lar hem de sealed s\u0131n\u0131flar (sealed classes) kapal\u0131 bir alt s\u0131n\u0131f k\u00fcmesini temsil etmek i\u00e7in kullan\u0131l\u0131r. Temel fark \u015fudur: Enum'lar, tek bir s\u0131n\u0131f\u0131n sabit, adland\u0131r\u0131lm\u0131\u015f ve \u00f6nceden tan\u0131mlanm\u0131\u015f \u00f6rnekleridir. Sealed s\u0131n\u0131flar ise, farkl\u0131 s\u0131n\u0131flar\u0131n bir hiyerar\u015fi i\u00e7inde, ancak s\u0131n\u0131rl\u0131 say\u0131da alt t\u00fcre sahip olabilece\u011fini belirtir. Sealed s\u0131n\u0131flar daha esnektir \u00e7\u00fcnk\u00fc her alt s\u0131n\u0131f\u0131n kendi benzersiz \u00f6zellikleri ve davran\u0131\u015flar\u0131 olabilir ve birbirlerinden farkl\u0131 t\u00fcrlerde olabilirler (\u00f6rne\u011fin, bir <code>Result<\/code> sealed s\u0131n\u0131f\u0131n\u0131n <code>Success<\/code> ve <code>Error<\/code> gibi farkl\u0131 alt s\u0131n\u0131flar\u0131 olabilir). Enum'lar ise her zaman tek bir t\u00fcr\u00fcn farkl\u0131 de\u011ferleri olarak kal\u0131r.<\/p>\n<\/p><\/div>\n<style>\n        \/* Responsive ve Mobil Uyumlu Stiller *\/\n        body {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            max-width: 900px;\n            margin: 0 auto;\n            padding: 20px;\n            background-color: #f9f9f9;\n        }<\/p>\n<p>        h2 {\n            color: #2c3e50;\n            border-bottom: 2px solid #3498db;\n            padding-bottom: 10px;\n            margin-top: 40px;\n            font-size: 2em;\n        }<\/p>\n<p>        h3 {\n            color: #34495e;\n            margin-top: 30px;\n            font-size: 1.5em;\n        }<\/p>\n<p>        p {\n            margin-bottom: 1em;\n            text-align: justify;\n        }<\/p>\n<p>        pre {\n            background-color: #e8f0f7;\n            padding: 15px;\n            border-radius: 8px;\n            overflow-x: auto;\n            white-space: pre-wrap;\n            word-wrap: break-word;\n            font-family: 'Roboto Mono', 'Courier New', monospace;\n            font-size: 0.95em;\n            line-height: 1.4;\n            margin-bottom: 1.5em;\n            box-shadow: 0 2px 5px rgba(0,0,0,0.1);\n        }<\/p>\n<p>        code {\n            font-family: 'Roboto Mono', 'Courier New', monospace;\n            background-color: #f0f0f0;\n            padding: 2px 4px;\n            border-radius: 3px;\n        }<\/p>\n<p>        ul {\n            list-style-type: disc;\n            margin-left: 20px;\n            margin-bottom: 1em;\n        }<\/p>\n<p>        ol {\n            list-style-type: decimal;\n            margin-left: 20px;\n            margin-bottom: 1em;\n        }<\/p>\n<p>        li {\n            margin-bottom: 0.5em;\n        }<\/p>\n<p>        table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-bottom: 20px;\n            box-shadow: 0 2px 5px rgba(0,0,0,0.1);\n        }<\/p>\n<p>        th, td {\n            border: 1px solid #ddd;\n            padding: 12px 15px;\n            text-align: left;\n        }<\/p>\n<p>        th {\n            background-color: #3498db;\n            color: white;\n            font-weight: bold;\n        }<\/p>\n<p>        tr:nth-child(even) {\n            background-color: #f2f2f2;\n        }<\/p>\n<p>        .expert-tip {\n            background-color: #e0f7fa;\n            border-left: 5px solid #00acc1;\n            padding: 15px 20px;\n            margin: 20px 0;\n            border-radius: 5px;\n            font-style: italic;\n            color: #00798a;\n            box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n        }<\/p>\n<p>        .faq h4 {\n            color: #2980b9;\n            margin-top: 25px;\n            margin-bottom: 10px;\n            font-size: 1.2em;\n        }<\/p>\n<p>        .faq p {\n            margin-bottom: 15px;\n        }<\/p>\n<p>        \/* Responsive ayarlar *\/\n        @media (max-width: 768px) {\n            body {\n                padding: 15px;\n                font-size: 15px;\n            }\n            h2 {\n                font-size: 1.8em;\n                margin-top: 30px;\n            }\n            h3 {\n                font-size: 1.3em;\n                margin-top: 25px;\n            }\n            pre {\n                padding: 10px;\n                font-size: 0.9em;\n            }\n            th, td {\n                padding: 10px;\n            }\n        }<\/p>\n<p>        @media (max-width: 480px) {\n            body {\n                padding: 10px;\n                font-size: 14px;\n            }\n            h2 {\n                font-size: 1.5em;\n                margin-top: 25px;\n            }\n            h3 {\n                font-size: 1.2em;\n                margin-top: 20px;\n            }\n            pre {\n                font-size: 0.85em;\n            }\n            \/* Table responsive for smaller screens (card-like display) *\/\n            .table-responsive {\n                overflow-x: auto;\n                -webkit-overflow-scrolling: touch;\n            }\n            table, thead, tbody, th, td, tr {\n                display: block;\n            }\n            thead tr {\n                position: absolute;\n                top: -9999px;\n                left: -9999px;\n            }\n            tr {\n                border: 1px solid #eee;\n                margin-bottom: 15px;\n                display: block;\n                box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n                border-radius: 5px;\n            }\n            td {\n                border: none;\n                border-bottom: 1px solid #f0f0f0;\n                position: relative;\n                padding-left: 50%;\n                text-align: right;\n                display: flex;\n                align-items: center;\n                justify-content: flex-end;\n            }\n            td:before {\n                position: absolute;\n                left: 10px;\n                width: 45%;\n                white-space: nowrap;\n                content: attr(data-label);\n                font-weight: bold;\n                text-align: left;\n                color: #555;\n            }\n            td:last-child {\n                border-bottom: none;\n            }\n        }\n    <\/style>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Dart&#8217;ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum&#8217;lar\u0131n\u0131n temel&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35398","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dart Enum&#039;lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f<\/title>\n<meta name=\"description\" content=\"Dart&#039;ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum&#039;lar\u0131n\u0131n temel kullan\u0131mlar\u0131ndan ba\u015flayarak, geli\u015fmi\u015f \u00f6zellikleriyle kodunuzu nas\u0131l daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Modern Dart geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan enum&#039;lar\u0131 s\u00fcper g\u00fc\u00e7lerle donatmaya haz\u0131r olun.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dart Enum&#039;lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f\" \/>\n<meta property=\"og:description\" content=\"Dart&#039;ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum&#039;lar\u0131n\u0131n temel kullan\u0131mlar\u0131ndan ba\u015flayarak, geli\u015fmi\u015f \u00f6zellikleriyle kodunuzu nas\u0131l daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Modern Dart geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan enum&#039;lar\u0131 s\u00fcper g\u00fc\u00e7lerle donatmaya haz\u0131r olun.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T04:01:10+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Dart Enum&#8217;lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f\",\"datePublished\":\"2025-11-29T04:01:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/\"},\"wordCount\":4452,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/\",\"name\":\"Dart Enum'lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-29T04:01:10+00:00\",\"description\":\"Dart'ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum'lar\u0131n\u0131n temel kullan\u0131mlar\u0131ndan ba\u015flayarak, geli\u015fmi\u015f \u00f6zellikleriyle kodunuzu nas\u0131l daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Modern Dart geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan enum'lar\u0131 s\u00fcper g\u00fc\u00e7lerle donatmaya haz\u0131r olun.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dart Enum&#8217;lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dart Enum'lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f","description":"Dart'ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum'lar\u0131n\u0131n temel kullan\u0131mlar\u0131ndan ba\u015flayarak, geli\u015fmi\u015f \u00f6zellikleriyle kodunuzu nas\u0131l daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Modern Dart geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan enum'lar\u0131 s\u00fcper g\u00fc\u00e7lerle donatmaya haz\u0131r olun.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/","og_locale":"tr_TR","og_type":"article","og_title":"Dart Enum'lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f","og_description":"Dart'ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum'lar\u0131n\u0131n temel kullan\u0131mlar\u0131ndan ba\u015flayarak, geli\u015fmi\u015f \u00f6zellikleriyle kodunuzu nas\u0131l daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Modern Dart geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan enum'lar\u0131 s\u00fcper g\u00fc\u00e7lerle donatmaya haz\u0131r olun.","og_url":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-29T04:01:10+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Dart Enum&#8217;lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f","datePublished":"2025-11-29T04:01:10+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/"},"wordCount":4452,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/","url":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/","name":"Dart Enum'lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-29T04:01:10+00:00","description":"Dart'ta sabit de\u011fer k\u00fcmelerini y\u00f6netmek her zaman bir zorluk muydu? Art\u0131k de\u011fil! Bu kapsaml\u0131 rehberle, Dart enum'lar\u0131n\u0131n temel kullan\u0131mlar\u0131ndan ba\u015flayarak, geli\u015fmi\u015f \u00f6zellikleriyle kodunuzu nas\u0131l daha g\u00fc\u00e7l\u00fc, okunabilir ve bak\u0131m\u0131 kolay hale getirebilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Modern Dart geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan enum'lar\u0131 s\u00fcper g\u00fc\u00e7lerle donatmaya haz\u0131r olun.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/dart-enumlari-temel-listelerden-super-guclu-siniflara-gecis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dart Enum&#8217;lar\u0131: Temel Listelerden S\u00fcper G\u00fc\u00e7l\u00fc S\u0131n\u0131flara Ge\u00e7i\u015f"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35398"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35398\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}