<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Faruk on Medium]]></title>
        <description><![CDATA[Stories by Faruk on Medium]]></description>
        <link>https://medium.com/@faruksekman?source=rss-960924e90ca------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*dmbNkD5D-u45r44go_cf0g.png</url>
            <title>Stories by Faruk on Medium</title>
            <link>https://medium.com/@faruksekman?source=rss-960924e90ca------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 22 May 2026 06:59:22 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@faruksekman/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Yazılım Kalitenizi Zirveye Taşıyın: Etkili Code Review İçin Profesyonel İpuçları!]]></title>
            <link>https://medium.com/@faruksekman/yaz%C4%B1l%C4%B1m-kalitenizi-zirveye-ta%C5%9F%C4%B1y%C4%B1n-etkili-code-review-i%CC%87%C3%A7in-profesyonel-i%CC%87pu%C3%A7lar%C4%B1-d111827174ed?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/d111827174ed</guid>
            <category><![CDATA[topics]]></category>
            <category><![CDATA[code-review]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Wed, 18 Jun 2025 20:11:06 GMT</pubDate>
            <atom:updated>2025-06-18T20:25:03.376Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bM8bA016NlKF6GVo9JV_fQ.png" /></figure><p>Kod inceleme süreçleri, yazılım kalitenizi yükseltmenin ve ekip içi dayanışmayı güçlendirmenin en etkili yollarından biridir. Burada edindiğim ipuçlarını ve adım adım uyguladıklarımı sizinle paylaşacağım.</p><h3>Neden Kod İncelemesi Yapmalıyız?</h3><p>Kod incelemeleri, yalnızca hata bulmak için değil, aynı zamanda kod kalitesini yükseltmek, standartları korumak ve takım içinde bilgi paylaşımını güçlendirmek için önemli bir araçtır. İyi yapılandırılmış bir kod inceleme süreci sayesinde:</p><ul><li>Hataları erken aşamada yakalayabilir,</li><li>Kod kalitenizi sürekli artırabilir,</li><li>Geliştiriciler arası iletişimi ve bilgi paylaşımını güçlendirebilirsiniz.</li></ul><h3>Kod İncelemesi Yaparken Nelere Dikkat Etmeliyiz?</h3><p>Kod inceleme sürecinde profesyonelce ele alınması gereken temel konuları aşağıda sıralıyorum:</p><h4>1. Kod Okunabilirliği ve Anlaşılabilirlik</h4><p>Kod yazarken, kodun sadece makineler tarafından değil, aynı zamanda diğer geliştiriciler tarafından da kolaylıkla anlaşılabilir olmasına dikkat etmek gerekir. Kodun okunabilirliğini artırmak için:</p><ul><li>İyi isimlendirme standartları kullanmalı,</li><li>Açıklayıcı yorumlar eklenmeli (gereksiz yorumlardan kaçınarak),</li><li>Kod blokları ve fonksiyonlar küçük ve odaklı tutulmalıdır.</li></ul><h4>2. SOLID Prensiplerine Uygunluk</h4><p>Kodunuzun bakımını kolaylaştırmak ve genişletilebilirliğini artırmak için SOLID prensiplerine uygun yazmalısınız:</p><ul><li><strong>Single Responsibility Principle</strong>: Her fonksiyonun tek bir sorumluluğu olmalı.</li><li><strong>Open/Closed Principle</strong>: Kodunuz genişlemeye açık ancak değiştirmeye kapalı olmalı.</li><li><strong>Liskov Substitution Principle</strong>: Alt sınıflar üst sınıfların yerine sorunsuzca kullanılabilmeli.</li><li><strong>Interface Segregation Principle</strong>: İstemcilerin kullanmadığı metotları içeren büyük interfaceler yerine, küçük interfaceler oluşturulmalı.</li><li><strong>Dependency Inversion Principle</strong>: Üst düzey modüller, alt düzey modüllere bağımlı olmamalı, ikisi de soyutlamalara bağımlı olmalıdır.</li></ul><h4>3. Performans ve Verimlilik</h4><p>Kodunuzun performans açısından değerlendirilmesi gerekir:</p><ul><li>Gereksiz döngüler ve işlemlerden kaçınılmalı,</li><li>Bellek ve işlemci kullanımı göz önünde bulundurulmalı,</li><li>Network istekleri optimize edilmeli.</li></ul><h4>4. Güvenlik Açısından Kontrol</h4><p>Kod incelerken güvenlik açıkları konusunda hassas olunmalıdır:</p><ul><li>XSS ve CSRF gibi güvenlik açıklarına karşı gerekli önlemler alınmış mı?</li><li>Dışarıdan alınan veriler doğru şekilde sanitize edilmiş mi?</li><li>Yetkilendirme ve kimlik doğrulama süreçleri düzgün çalışıyor mu?</li></ul><h4>5. UI ve UX Tutarlılığı</h4><p>Kod incelerken UI ve UX açısından tutarlılık kontrol edilmeli:</p><ul><li>Bileşenlerin tasarımı ve kullanımı standartlara uygun mu?</li><li>Kullanıcı deneyimi tutarlı mı ve akıcı mı?</li></ul><h3>Kod İncelemesinde Kullanılan Araçlar</h3><p>Kod kalitenizi korumak için aşağıdaki araçları kullanabilirsiniz:</p><ul><li><strong>ESLint</strong> ve <strong>Prettier</strong>: Kodun okunabilirliğini ve standardizasyonunu sağlar.</li><li><strong>SonarQube</strong>: Kod kalitesini ölçer ve performans, güvenlik ve hata potansiyellerini raporlar.</li><li><strong>GitHub/GitLab Review Araçları</strong>: Kolay ve etkin kod inceleme süreçleri sağlar.</li></ul><h3>İyi ve Kötü Kod Örneği</h3><p><strong>Kötü örnek:</strong></p><pre>function handleUserAction(actionType, user) {<br>  if (actionType === &#39;create&#39;) {<br>    createUser(user);<br>  } else if (actionType === &#39;update&#39;) {<br>    updateUser(user);<br>  } else if (actionType === &#39;delete&#39;) {<br>    deleteUser(user);<br>  } else {<br>    throw new Error(&#39;Geçersiz işlem türü.&#39;);<br>  }<br>}</pre><p><strong>Neden kötü?</strong></p><ul><li>Açık-kapalı prensibini (Open/Closed Principle) ihlal eder; yeni işlem türleri eklendiğinde sürekli değiştirilmesi gerekir.</li><li>Uzun if-else blokları kod okunabilirliğini azaltır.</li></ul><p><strong>İyi örnek:</strong></p><pre>const userActionHandlers = {<br>  create: createUser,<br>  update: updateUser,<br>  delete: deleteUser,<br>};<br><br>function handleUserAction(actionType, user) {<br>  const handler = userActionHandlers[actionType];<br>  <br>  if (!handler) {<br>    throw new Error(`Geçersiz işlem türü: ${actionType}`);<br>  }<br><br>  handler(user);<br>}</pre><p><strong>Neden iyi?</strong></p><ul><li>SOLID prensiplerine uygun ve kolayca genişletilebilir.</li><li>Yeni bir işlem türü eklemek çok kolaydır; tek gereken yeni işlem türünü userActionHandlers nesnesine eklemektir.</li><li>Okunabilirlik artar, karmaşık mantıksal kontrollerden kurtulur.</li></ul><p>İyi örnek SOLID prensiplerine uygun, okunaklı ve genişlemeye açıktır.</p><h3>Kod İnceleme Süreci Nasıl Yürütülmeli?</h3><ul><li>Kod review talepleri küçük ve anlamlı parçalar halinde yapılmalı.</li><li>İnceleyecek kişi için açıklayıcı notlar eklenmeli.</li><li>İncelemeden sonra yapıcı ve açıklayıcı geri dönüşler sağlanmalı.</li><li>Kod incelemesi sonrası tespit edilen problemler mutlaka düzeltilmeli ve yeniden kontrol edilmelidir.</li></ul><h3>Sonuç ve Tavsiyeler</h3><p>Profesyonelce yürütülen kod incelemeleri, takımınızın üretkenliğini ve yazılımınızın kalitesini önemli ölçüde artıracaktır. İyi yapılandırılmış, detaylı ve profesyonel bir kod inceleme süreci, projelerinizin sürdürülebilirliğini sağlarken, ekip içindeki bilgi paylaşımını da güçlendirecektir.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d111827174ed" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Front-End’de Ölçeklenebilir Mimari: Angular Projelerinde Monorepo & Micro Frontends]]></title>
            <link>https://medium.com/@faruksekman/front-endde-%C3%B6l%C3%A7eklenebilir-mimari-angular-projelerinde-monorepo-micro-frontends-bd8acdfe7b75?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/bd8acdfe7b75</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[micro-frontends]]></category>
            <category><![CDATA[monorepo]]></category>
            <category><![CDATA[frontend-architecture]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Fri, 13 Jun 2025 20:35:13 GMT</pubDate>
            <atom:updated>2025-06-13T20:35:13.407Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nIlwfCNTllQsvOvVSoff1A.png" /></figure><p>Günümüzün büyük ölçekli Front-End projelerinde <strong>ölçeklenebilirlik</strong> ve <strong>takım bazlı gelişim</strong> en kritik gereksinimler arasında. Angular ekosisteminde, ekiplerin kod paylaşımını, bağımlılık yönetimini ve versiyon kontrolünü kolaylaştırmak için iki popüler yaklaşım öne çıkar:</p><ul><li><strong>Monorepo (Tek Depo) Yaklaşımı</strong></li><li><strong>Micro Frontends (Mikro Ön Yüzler) Yaklaşımı</strong></li></ul><p>Bu yazımda, kurumsal mimarilerde her iki yaklaşımın nasıl uygulanacağını, avantaj ve dezavantajlarını, örnek<strong> folder structure</strong> ve kodlarla birlikte detaylı olarak ele alacağız.</p><h3>Monorepo Nedir?</h3><p><strong>Monorepo</strong>, birden fazla uygulama ve kütüphanenin tek bir versiyon kontrollü depoda<strong> “workspace”</strong> yönetilmesi yaklaşımıdır. Çoğu zaman <a href="https://nx.dev/"><strong>Nx</strong></a><strong> </strong>veya <strong>Lerna </strong>gibi araçlarla desteklenir.</p><ul><li><strong>Tek Yerden Yönetim:</strong> Birden fazla uygulama (apps/) ve paylaşılan kütüphane (libs/) aynı repo içinde bulunur.</li><li><strong>Bağımlılık Çakışma Azaltma:</strong> Ortak paketler, versiyon yükseltme tek seferde yapılır.</li><li><strong>Geliştirme Hızı:</strong> CLI komutları (nx build, nx test, nx affected:build) ile toplu işlem yapılabilir.</li></ul><h3>Micro Frontends Nedir?</h3><p><strong>Micro Frontends</strong>, monolitik bir Front-End uygulamasını bağımsız dağıtılabilir küçük parçalara (<strong>remotes</strong>) bölme yaklaşımıdır.</p><ul><li><strong>Ana Shell (Host):</strong> Tüm remote parçaları yükleyen kabuk uygulama.</li><li><strong>Remote Uygulamalar:</strong> Özellik bazlı, bağımsız deploy edilebilir uygulamalar.</li><li><strong>Module Federation (Webpack 5):</strong> Runtime’da modüllerin dinamik yüklenmesini sağlar.</li></ul><h3>Karşılaştırma: Monorepo vs. Micro Frontends</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1018/1*uUW0tTFXxmSIcmdvDmQAAw.png" /></figure><h3>Avantaj ve Dezavantajlar</h3><h4>Monorepo Avantajları</h4><p><strong>- Tek Bir Kaynak:</strong></p><ul><li>Kod tekrarını azaltır.</li><li>Ortak servis ve pipe’lar paylaştırılır.</li></ul><p><strong>- Kolay Refactoring:</strong></p><ul><li>Tüm bağımlılıklar tek repo içinde tek komutla güncellenir.</li></ul><p><strong>- Tutarlılık:</strong></p><ul><li>Kod standartları, linting, testing config’leri ortak.</li></ul><p><strong>- Etkili CI (</strong>Continuous Integration<strong>) / CD (</strong>Continuous Delivery<strong>):</strong></p><ul><li>Affected komutlarıyla yalnızca değişen projeler build/test edilir.</li></ul><h4>Monorepo Dezavantajları</h4><p><strong>- Build Süresi:</strong></p><ul><li>Workspace büyüdükçe full build/test süreleri uzayabilir.</li></ul><p><strong>- Yetki Yönetimi:</strong></p><ul><li>Repo seviyesinde erişim kontrolü zorlaşabilir.</li></ul><p><strong>- Ölçeklenebilirlik Limitleri:</strong></p><ul><li>Çok büyük kod tabanlarında IDE performansı düşebilir.</li></ul><h4>Micro Frontends Avantajları</h4><p><strong>- Bağımsız Geliştirme:</strong></p><ul><li>Ekipler kendi remote’larında özgür.</li></ul><p><strong>- Bağımsız Deploy:</strong></p><ul><li>Üretime hızlı ve kademeli özellik ekleme.</li></ul><p><strong>- Teknoloji Mix:</strong></p><ul><li>Her remote farklı framework/versiyon kullanabilir.</li></ul><p><strong>- Modüler Yükleme:</strong></p><ul><li>Kullanıcı yalnızca ihtiyaç duyulan remote’u alır.</li></ul><h3>Micro Frontends Dezavantajları</h3><p><strong>- Kompleks Entegrasyon:</strong></p><ul><li>Shell + remotes arasındaki versiyon uyuşmazlığı riskleri.</li></ul><p><strong>- Performans Yükü:</strong></p><ul><li>Birden fazla bundle, network overhead.</li></ul><p><strong>- Geliştirme Karmaşıklığı:</strong></p><ul><li>Module Federation konfigürasyonu, shared scope yönetimi.</li></ul><p><strong>- Ortak Kod Duplication:</strong></p><ul><li>Ortak kütüphaneler remote’lar içinde tekrar paketlenebilir.</li></ul><h3>Kurumsal Mimaride Monorepo Uygulamaları</h3><h4>Nx ile Workspace Yapısı</h4><p>Nx, büyük kurumsal Angular projelerinde en yaygın tercih edilen Monorepo aracıdır. Aşağıda tipik bir Nx workspace yapısı örneği görebilirsiniz:</p><pre>my-enterprise-workspace/<br>├── apps/<br>│   ├── shell/                   # Ana host uygulama<br>│   └── admin-portal/            # Yönetim paneli<br>├── libs/<br>│   ├── ui/                      # UI bileşenleri (button, modal, grid)<br>│   ├── data-access/             # API servisleri, store<br>│   ├── feature/auth/            # Oturum yönetimi<br>│   └── util/logger/             # Ortak yardımcı util’ler<br>├── tools/                       # Custom scripts &amp; generators<br>├── nx.json<br>├── angular.json<br>├── workspace.json<br>└── package.json</pre><p>Örnek nx.json (Özet)</p><pre>{<br>  &quot;npmScope&quot;: &quot;enterprise&quot;,<br>  &quot;projects&quot;: {<br>    &quot;shell&quot;: { &quot;tags&quot;: [&quot;type:app&quot;, &quot;scope:host&quot;] },<br>    &quot;admin-portal&quot;: { &quot;tags&quot;: [&quot;type:app&quot;, &quot;scope:admin&quot;] },<br>    &quot;ui&quot;: { &quot;tags&quot;: [&quot;type:lib&quot;, &quot;scope:shared&quot;] },<br>    &quot;data-access&quot;: { &quot;tags&quot;: [&quot;type:lib&quot;, &quot;scope:shared&quot;] }<br>  },<br>  &quot;implicitDependencies&quot;: {<br>    &quot;angular.json&quot;: &quot;*&quot;,<br>    &quot;package.json&quot;: &quot;*&quot;<br>  }<br>}</pre><h4>Örnek Folder Structure</h4><p><strong>Not:</strong> Her lib, Angular CLI schematic’leriyle oluşturulmalı (nx g @nrwl/angular:lib ui).</p><pre>libs/ui/<br>├── src/<br>│   ├── lib/<br>│   │   ├── button/<br>│   │   ├── modal/<br>│   │   └── grid/<br>│   └── index.ts<br>└── jest.config.js</pre><h3>Kurumsal Mimaride Micro Frontends Uygulamaları</h3><h4>Module Federation ile Entegrasyon</h4><p>Webpack 5’in <strong>Module Federation</strong> özelliği, Remote uygulamaların runtime’da dinamik olarak yüklenmesini sağlar. Angular CLI’da @angular-architects/module-federation gibi eklentilerle kolayca entegre edilebilir.</p><p><strong>Shell </strong>(apps/shell/webpack.config.js)</p><pre>const ModuleFederationPlugin = require(&quot;webpack&quot;).container.ModuleFederationPlugin;<br><br>module.exports = {<br>  output: { uniqueName: &quot;shell&quot;, publicPath: &quot;auto&quot; },<br>  plugins: [<br>    new ModuleFederationPlugin({<br>      remotes: {<br>        marketing: &quot;marketing@http://localhost:4201/remoteEntry.js&quot;,<br>        auth: &quot;auth@http://localhost:4202/remoteEntry.js&quot;<br>      },<br>      shared: {<br>        &quot;@angular/core&quot;: { singleton: true, strictVersion: true },<br>        &quot;@angular/common&quot;: { singleton: true, strictVersion: true },<br>      }<br>    }),<br>  ],<br>};</pre><p><strong>Remote </strong>(apps/marketing/webpack.config.js)</p><pre>new ModuleFederationPlugin({<br>  name: &quot;marketing&quot;,<br>  filename: &quot;remoteEntry.js&quot;,<br>  exposes: {<br>    &quot;./MarketingModule&quot;: &quot;./src/app/marketing/marketing.module.ts&quot;,<br>  },<br>  shared: {<br>    &quot;@angular/core&quot;: { singleton: true, strictVersion: true },<br>    &quot;@angular/common&quot;: { singleton: true, strictVersion: true },<br>  },<br>});</pre><p><strong>Örnek Yapı ve Konfigürasyon</strong></p><pre>my-micro-frontend/<br>├── apps/<br>│   ├── shell/            # http://localhost:4200<br>│   ├── marketing/        # http://localhost:4201<br>│   └── auth/             # http://localhost:4202<br>├── libs/                 # Ortak util &amp; ui libs<br>└── package.json</pre><h3>Örnek Kod ve Yapı Detayları</h3><h4>Monorepo’da Ortak Kütüphaneler</h4><pre>// libs/data-access/src/lib/api.service.ts<br>import { HttpClient } from &quot;@angular/common/http&quot;;<br>import { Injectable } from &quot;@angular/core&quot;;<br><br>@Injectable({ providedIn: &quot;root&quot; })<br>export class ApiService {<br>  constructor(private http: HttpClient) {}<br>  get&lt;T&gt;(url: string) { return this.http.get&lt;T&gt;(url); }<br>  // ...<br>}</pre><pre>// apps/admin-portal/src/app/app.module.ts<br>import { ApiService } from &quot;@enterprise/data-access&quot;;<br>@NgModule({<br>  providers: [ApiService],<br>})<br>export class AppModule {}</pre><h4>Micro Frontends — Ana Shell ve Remote Uygulama</h4><pre>// apps/shell/src/app/app-routing.module.ts<br>const routes: Routes = [<br>  { path: &quot;marketing&quot;, loadChildren: () =&gt; import(&quot;marketing/MarketingModule&quot;).then(m =&gt; m.MarketingModule) },<br>  { path: &quot;auth&quot;, loadChildren: () =&gt; import(&quot;auth/AuthModule&quot;).then(m =&gt; m.AuthModule) },<br>];</pre><pre>// apps/marketing/src/app/marketing.module.ts<br>@NgModule({<br>  declarations: [MarketingComponent],<br>  imports: [CommonModule, RouterModule.forChild([{ path: &quot;&quot;, component: MarketingComponent }])],<br>})<br>export class MarketingModule {}</pre><h4><strong>Sonuç olarak:</strong></h4><ul><li><strong>Monorepo</strong>, proje büyüklüğü orta/ büyük seviyedeyse ve ekipler arası sık kod paylaşımı varsa tercih edilmeli.</li><li><strong>Micro Frontends</strong>, büyük organizasyonlarda bağımsız ekiplerin çok farklı release döngülerine sahip olduğu durumlarda kullanılmalı.</li><li><strong>Hybrid Yaklaşım</strong>: Nx workspace içinde Micro Frontends stratejisini de kullanabilirsiniz; böylece hem tek repo avantajı sağlanır hem de bağımsız deploy yeteneği korunur.</li><li><strong>CI/CD</strong>: Affected build/test adımlarını mutlaka devreye alın — hem Monorepo hem de MFE için kritik.</li><li><strong>Dokümantasyon &amp; Görsel Materyal</strong>: Ekipler arasında ortak diyagramlar ve <strong>UML</strong>(Unified Modeling Language) akışları hazırlayın; sürekli güncel tutun.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bd8acdfe7b75" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Advanced Angular Dependency Injection Teknikleri]]></title>
            <link>https://medium.com/@faruksekman/advanced-angular-dependency-injection-teknikleri-7f2c93b0dc11?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/7f2c93b0dc11</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[clean-code]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[dependency-injection]]></category>
            <category><![CDATA[typescript]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Fri, 13 Jun 2025 15:19:42 GMT</pubDate>
            <atom:updated>2025-06-13T15:19:42.494Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7v2vcRbdffe7OcbkvID-dQ.png" /></figure><p>Angular projelerinde Dependency Injection (DI) yöntemleri çoğunlukla temel seviyede kullanılır. Fakat büyük ölçekli uygulamalarda sürdürülebilir ve test edilebilir yapılar oluşturmak için ileri seviye DI teknikleri kritik önem taşıyor.</p><p>Sizlere InjectionToken ve Factory Provider gibi ileri düzey Angular DI yöntemlerinden kısa ama güçlü bir örnek paylaşmak istiyorum.</p><p>Bu yaklaşım sayesinde uygulamalarımız çok daha modüler ve sürdürülebilir oluyor.</p><pre>// Logger tipini belirten InjectionToken oluşturma<br>export const LOGGER_TOKEN = new InjectionToken&lt;Logger&gt;(&#39;LOGGER_TOKEN&#39;);<br><br>// Ortama göre (prod/dev) farklı logger döndüren factory methodu<br>export function loggerFactory(environment: EnvironmentService): Logger {<br>  return environment.production ? new ProdLogger() : new DevLogger();<br>}<br><br>// Angular Module Providers&#39;da Factory Provider kullanımı<br>providers: [<br>  {<br>    provide: LOGGER_TOKEN,<br>    useFactory: loggerFactory,<br>    deps: [EnvironmentService]<br>  }<br>]<br><br>// Component içinde InjectionToken kullanımı<br>constructor(@Inject(LOGGER_TOKEN) private logger: Logger) {<br>  logger.log(&#39;Advanced DI kullanımı başarılı!&#39;);<br>}</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7f2c93b0dc11" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular & React.js & Vue.js]]></title>
            <link>https://medium.com/@faruksekman/angular-react-js-vue-js-bda3bb95ae2b?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/bda3bb95ae2b</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[vuejs]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Tue, 22 Aug 2023 21:47:30 GMT</pubDate>
            <atom:updated>2023-08-23T06:44:08.219Z</atom:updated>
            <content:encoded><![CDATA[<h4>Angular &amp; React.js &amp; Vue.js: JavaScript Framework’leri Karşılaştırması</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*SzAesOSJS_czwwWShVCOxw.png" /></figure><p>Web uygulamaları geliştirmek için JavaScript framework’leri büyük bir öneme sahiptir. Bu framework’ler, geliştirme sürecini kolaylaştırır, verimliliği artırır ve kullanıcı deneyimini iyileştirir. Angular, React.js ve Vue.js, bu alanda öne çıkan framework’lerdir. Her biri benzersiz özelliklere sahiptir ve farklı ihtiyaçları karşılamak için tasarlanmıştır. Bu yazımda, Angular, React.js ve Vue.js’i ayrıntılı bir şekilde inceleyeceğiz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GgkRmnzvQwk0QUry5L_Rqg.png" /></figure><p><strong>1. Angular:</strong> Angular, Google tarafından geliştirilen bir JavaScript framework’üdür. Angular, büyük ölçekli, karmaşık ve performans odaklı web uygulamalarını geliştirmek için kullanılır. İşte Angular’ın bazı önemli özellikleri:</p><ul><li>Tam bir framework olması: Angular, birçok özellik ve bileşen sunarak geliştirme sürecini kolaylaştırır. Veri bağlama, yönlendirme, hata işleme gibi birçok özellik dahildir.</li><li>TypeScript tabanlı: Angular, TypeScript kullanarak statik tür denetimi ve nesne yönelimli programlamayı destekler. Bu, daha güvenli ve hata ayıklaması daha kolay kod yazmanıza olanak sağlar.</li><li>Bileşen tabanlı yapı: Angular, bileşen tabanlı bir yapıya sahiptir. Bileşenler, HTML, CSS ve TypeScript’i birleştirerek web uygulamasının farklı bölümlerini oluşturmanızı sağlar.</li><li>Güçlü altyapı: Angular, büyük ölçekli uygulamaları yönetmek için sağlam bir altyapı sunar. Verimlilik, performans ve test yetenekleri konusunda güçlüdür.</li></ul><p><strong>Avantajları:</strong></p><ul><li>Tam bir framework olması, geliştirme sürecini kolaylaştırır ve birçok özellik sunar.</li><li>Büyük ölçekli uygulamaları yönetmek için geliştirilmiştir ve sağlam bir altyapı sunar.</li><li>İyi test yetenekleri ve ölçeklenebilirlik sağlar.</li><li>İleri düzey veri bağlama ve iki yönlü<strong>(</strong><a href="https://angular.io/guide/two-way-binding"><strong>Two-way binding</strong></a><strong>)</strong> veri bağlama özelliklerine sahiptir.</li></ul><p><strong>Dezavantajları:</strong></p><ul><li>Öğrenme eğrisi yüksektir. Angular, kapsamlı bir framework olduğu için başlangıçta öğrenmesi biraz zor olabilir.</li><li>Performans açısından diğer framework’lere kıyasla daha ağırdır.</li><li>Esneklik açısından bazı diğer framework’lere göre daha sınırlıdır.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*c1duI8rwtQygnJem9RyYUg.png" /></figure><p><strong>2. React.js:</strong> React.js, Facebook tarafından geliştirilen bir JavaScript kütüphanesidir. Kullanıcı arayüzü oluşturmak için kullanılır ve bileşen tabanlı bir yaklaşım sunar. İşte React.js’in bazı önemli özellikleri:</p><ul><li>Sanal DOM kullanımı: React.js, sanal bir DOM (Document Object Model) kullanarak verimli güncellemeler yapmayı sağlar. Bu, performansı artırır ve sadece değişen kısımları günceller.</li><li>Modülerlik: React.js, bileşen tabanlı bir yapıya sahiptir. Bileşenler, yeniden kullanılabilir ve bağımsız olabilir. Bu, kodun daha kolay sürdürülebilir ve genişletilebilir olmasını sağlar.</li><li>Büyük topluluk ve ekosistem: React.js, geniş bir topluluğa sahiptir ve birçok üçüncü taraf kütüphane ve araçlarla entegre edilebilir. Bu, sorunları çözmek ve kaynaklara kolayca erişmek için büyük bir avantajdır.</li><li>JavaScript entegrasyonu: React.js, JavaScript ile iyi entegrasyon sağlar ve karmaşık uygulamaları kolayca oluşturmanıza olanak tanır.</li></ul><p><strong>Avantajları:</strong></p><ul><li>Hızlı ve verimli bir şekilde çalışır, çünkü sanal DOM kullanır ve sadece değişiklikleri güncelleyerek performansı artırır.</li><li>Modüler bir yapıya sahiptir ve yeniden kullanılabilir bileşenler oluşturmayı kolaylaştırır.</li><li>Büyük bir topluluğa sahiptir, bu da sorunlarınızı çözmek için kaynaklara kolayca erişebileceğiniz anlamına gelir.</li><li>JavaScript ile iyi entegrasyon sağlar ve karmaşık uygulamaları kolayca oluşturmanızı sağlar.</li></ul><p><strong>Dezavantajları:</strong></p><ul><li>React.js, sadece bir kullanıcı arayüzü kütüphanesi olduğu için diğer gereksinimleri karşılamak için ek kütüphaneler veya çerçeveler kullanmanız gerekebilir.</li><li>Başlangıçta öğrenme eğrisi biraz yüksek olabilir.</li><li>React.js, başlangıçta birçok karar vermenizi gerektiren esnek bir yapıya sahiptir.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*s4mQBG4s9B2vN8EM4DKjNQ.png" /></figure><p><strong>3. Vue.js:</strong> Vue.js, açık kaynaklı bir JavaScript framework’üdür ve modern kullanıcı arayüzü uygulamaları oluşturmak için kullanılır. İşte Vue.js’in bazı önemli özellikleri:</p><ul><li>Hafif ve hızlı: Vue.js, küçük boyutu ve hızlı performansıyla bilinir. Bu, uygulamaların hızlı bir şekilde çalışmasını sağlar.</li><li>Kolay öğrenme ve kullanım: Vue.js, başlangıçta hızlı bir şekilde projeye başlamanıza olanak tanır. Basit ve sezgisel bir API’ye sahiptir ve HTML tabanlı şablonları kullanarak bileşenleri oluşturmak ve veri bağlama işlemleri yapmak oldukça basittir.</li><li>İhtiyaca göre kullanılabilirlik: Vue.js, kullanımı isteğe bağlıdır, yani ihtiyaca göre bir bölümü veya tamamını kullanabilirsiniz. Bu, mevcut projelere kolayca entegre olmayı sağlar ve mevcut kod tabanınızı değiştirmek zorunda kalmazsınız.</li><li>Entegrasyon ve genişletilebilirlik: Vue.js, diğer kütüphaneler veya projelerle kolayca entegre olabilir. İhtiyaç duyduğunuzda üçüncü taraf kütüphanelerle veya eklentilerle genişleyebilirsiniz.</li><li><strong>Avantajları:</strong></li><li>Hafif ve hızlı bir framework olması, uygulamaların hızlı bir şekilde çalışmasını sağlar.</li><li>Kolay öğrenilebilir ve kullanımı basittir. Başlangıçta hızlı bir şekilde projeye başlayabilirsiniz.</li><li>Diğer framework ve kütüphanelerle kolayca entegre olabilir.</li><li>İhtiyaca göre kullanılabilirlik özelliği sunar, yani ihtiyacınıza bağlı olarak sadece belirli bir kısmını kullanabilirsiniz.</li></ul><p><strong>Dezavantajları:</strong></p><ul><li>Büyük ölçekli projelerde bazı özellikler ve altyapı eksiklikleri olabilir. Vue.js, diğer iki framework olan Angular ve React.js’e kıyasla daha yeni bir teknolojidir ve bazı büyük ölçekli projeler için eksikliklere sahip olabilir.</li><li>Vue.js, diğer framework’ler kadar geniş bir topluluğa sahip değildir. Bu nedenle, bazı konularda daha sınırlı kaynaklara ve yardıma erişmek zor olabilir.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VFmUYekulHyj2IJ51ljb8A.png" /></figure><h3><strong>Karşılaştırma:</strong></h3><p><strong>1. Performans:</strong></p><ul><li><strong>Angular:</strong> Angular, büyük ölçekli projeler için sağlam bir performans sunar, ancak diğer framework’lere kıyasla daha ağırdır.</li><li><strong>React.js:</strong> React.js, sanal DOM kullanarak performansı artırır ve sadece değişiklikleri güncelleyerek hızlı çalışır.</li><li><strong>Vue.js:</strong> Vue.js, hafif ve hızlı bir framework olarak bilinir ve küçük ölçekli projelerde iyi performans gösterir.</li></ul><p><strong>2. Öğrenme Eğrisi:</strong></p><ul><li><strong>Angular:</strong> Angular, tam bir framework olduğu için öğrenme eğrisi daha yüksektir.</li><li><strong>React.js:</strong> React.js, sadece bir kütüphane olduğu için Angular’a göre daha hızlı öğrenilebilir.</li><li><strong>Vue.js:</strong> Vue.js, kolay anlaşılabilir ve kullanımı basit olduğu için hızlı bir şekilde öğrenilebilir.</li></ul><p><strong>3. Topluluk ve Ekosistem:</strong></p><ul><li><strong>Angular:</strong> Angular, büyük bir topluluğa ve geniş bir ekosisteme sahiptir. Kaynaklara kolayca erişebilirsiniz ve birçok üçüncü taraf kütüphane ve araç mevcuttur.</li><li><strong>React.js:</strong> React.js, geniş bir topluluğa ve birçok üçüncü taraf kütüphane ve araca sahiptir. Sorunlarınızı çözmek için geniş bir destek ağı vardır.</li><li><strong>Vue.js:</strong> Vue.js, Angular ve React.js kadar geniş bir topluluğa sahip olmasa da büyümekte olan bir topluluğa sahiptir. Kaynaklara erişmek konusunda bazı sınırlamalar olabilir, ancak destek ve yardım bulmak hala mümkündür.</li></ul><p><strong>Sonuç:</strong> <strong><em>Angular, React.js ve Vue.js</em></strong>, farklı ihtiyaçları karşılamak için farklı özelliklere sahip <strong>JavaScript framework’leridir</strong>. Angular, büyük ve karmaşık projeler için güçlü bir altyapı sunar. React.js, performansı ve modülerliğiyle ön plana çıkar. Vue.js ise hafif, kolay öğrenilebilir ve kullanışlı bir framework olarak öne çıkar. <strong>Hangi framework’ün kullanılacağı, projenin gereksinimlerine, ekibin deneyimine ve kişisel tercihlere bağlıdır.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bda3bb95ae2b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Array splice() Method]]></title>
            <link>https://medium.com/@faruksekman/javascript-array-splice-method-1ed1fdd22167?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/1ed1fdd22167</guid>
            <category><![CDATA[javascript-tips]]></category>
            <category><![CDATA[frontend-development]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[javascript-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Sat, 24 Jun 2023 20:59:47 GMT</pubDate>
            <atom:updated>2023-06-24T20:59:47.506Z</atom:updated>
            <content:encoded><![CDATA[<h4>splice()</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*48OTWWfLqrKPBj9YaU38QQ.png" /></figure><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><p>JavaScript’te splice() methodu, bir diziden öğe eklemek, çıkarmak veya değiştirmek için kullanılır. Bu method, dizinin belirli bir konumundan başlayarak öğeleri değiştirir ve isteğe bağlı olarak çıkarılan öğeleri yeni bir dizi olarak döndürür.</p><p><strong>Syntax (Sözdizimi)</strong></p><pre>array.splice(start, deleteCount, item1, item2, ...)</pre><p><strong>Parametre</strong></p><ul><li>start (gereklidir): Dizideki değişikliğin başladığı indeks.</li><li>deleteCount (opsiyonel): Çıkarılan öğe sayısı. Bu parametre belirtilmezse, start indeksinden itibaren tüm öğeler çıkarılır.</li><li>item1, item2, ... (opsiyonel): Eklenecek yeni öğeler. Bu parametreler belirtilmezse, sadece çıkarılan öğeleri döndürür.</li></ul><p><strong>Dönüş Değeri</strong></p><ul><li>Çıkarılan öğelerden oluşan yeni bir dizi (eğer öğeler çıkarıldıysa).</li></ul><p><strong>Örnekler</strong></p><p><strong>1. Bir diziye yeni öğeler eklemek:</strong></p><pre>const numbers = [1, 2, 3, 4, 5];<br>numbers.splice(2, 0, 6, 7);<br><br>console.log(numbers);   // [1, 2, 6, 7, 3, 4, 5]</pre><p>Yukarıdaki örnekte, splice() methodu kullanılarak numbers dizisinin 2. indeksine (yani 3. öğeye) yeni öğeler eklenir. 0 değeri, çıkarılan öğe olmadığını gösterir. Sonuç olarak, dizinin içine 6 ve 7 eklenir ve dizi [1, 2, 6, 7, 3, 4, 5] şeklinde güncellenir.</p><p><strong>2. Bir dizi içindeki öğeleri çıkarmak:</strong></p><pre>const fruits = [&#39;apple&#39;, &#39;banana&#39;, &#39;orange&#39;, &#39;kiwi&#39;];<br>const removedFruits = fruits.splice(1, 2);<br><br>console.log(fruits);         // [&#39;apple&#39;, &#39;kiwi&#39;]<br>console.log(removedFruits);  // [&#39;banana&#39;, &#39;orange&#39;]</pre><p>Yukarıdaki örnekte, splice() methodu kullanılarak fruits dizisinin 1. indeksinden başlayarak 2 öğe çıkarılır. Çıkarılan öğeler, removedFruits dizisine atanır ve orijinal dizi fruits güncellenir. Sonuç olarak, fruits dizisi [&#39;apple&#39;, &#39;kiwi&#39;] şeklinde güncellenir ve çıkarılan öğeler removedFruits dizisinde [ &#39;banana&#39;, &#39;orange&#39; ] şeklinde döndürülür.</p><p><strong>3. Bir dizi içindeki öğeleri değiştirmek:</strong></p><pre>const colors = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];<br>colors.splice(1, 1, &#39;yellow&#39;);<br><br>console.log(colors);   // [&#39;red&#39;, &#39;yellow&#39;, &#39;blue&#39;]</pre><p>Yukarıdaki örnekte, splice() methodu kullanılarak colors dizisinin 1. indeksindeki öğe (&#39;green&#39;) &#39;yellow&#39; ile değiştirilir. Sonuç olarak, colors dizisi [&#39;red&#39;, &#39;yellow&#39;, &#39;blue&#39;] şeklinde güncellenir.</p><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1ed1fdd22167" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Array sort() Method]]></title>
            <link>https://medium.com/@faruksekman/javascript-array-sort-method-987b405a084b?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/987b405a084b</guid>
            <category><![CDATA[frontend-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[javascript-development]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Sat, 24 Jun 2023 20:55:43 GMT</pubDate>
            <atom:updated>2023-06-24T20:55:43.767Z</atom:updated>
            <content:encoded><![CDATA[<h4>sort()</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hC8YHKqPsSEeC4WyA9XZYg.png" /></figure><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><p>JavaScript’te sort() methodu, bir diziyi yerinde sıralamak için kullanılır. Bu method, dizinin öğelerini varsayılan olarak alfabetik olarak veya belirtilen bir sıralama işlevine göre sıralar.</p><p><strong>Syntax (Sözdizimi)</strong></p><pre>array.sort(compareFunction)</pre><p><strong>Parametre</strong></p><ul><li>compareFunction (opsiyonel): Sıralama işlevi. Bu işlev, dizinin öğelerini sıralamak için kullanılır. İki öğe arasında karşılaştırma yapar ve sıralama düzenini belirler. Bu işlevin iki parametresi (a ve b) vardır ve döndürdüğü değere göre sıralama gerçekleşir.</li></ul><p><strong>Dönüş Değeri</strong></p><ul><li>Yerinde sıralanmış dizi (orijinal dizi üzerinde değişiklik yapar).</li></ul><p><strong>Örnekler</strong></p><p><strong>1. Bir dizi içindeki sayıları sıralama:</strong></p><pre>const numbers = [5, 1, 3, 2, 4];<br>numbers.sort();<br><br>console.log(numbers);   // [1, 2, 3, 4, 5]</pre><p>Yukarıdaki örnekte, sort() methodu kullanılarak numbers dizisi varsayılan olarak alfabetik olarak sıralanır. Sayılar da alfabetik olarak sıralandığından, sonuç [1, 2, 3, 4, 5] şeklinde olur.</p><p><strong>2. Sıralama işlevi kullanarak bir dizi içindeki sayıları ters sıralama:</strong></p><pre>const numbers = [5, 1, 3, 2, 4];<br>numbers.sort(function(a, b) {<br>  return b - a;<br>});<br><br>console.log(numbers);   // [5, 4, 3, 2, 1]</pre><p>Yukarıdaki örnekte, sort() methodu kullanılarak numbers dizisi ters sırada sıralanır. Bunun için sıralama işlevi olarak function(a, b) { return b - a; } kullanılır. Bu işlev, öğeleri büyükten küçüğe doğru sıralamak için kullanılır. Sonuç olarak, dizi [5, 4, 3, 2, 1] şeklinde ters sıralanır.</p><p><strong>3. Alfabetik olarak bir dizi içindeki string öğeleri sıralama:</strong></p><pre>const fruits = [&#39;banana&#39;, &#39;apple&#39;, &#39;orange&#39;, &#39;kiwi&#39;];<br>fruits.sort();<br><br>console.log(fruits);   // [&#39;apple&#39;, &#39;banana&#39;, &#39;kiwi&#39;, &#39;orange&#39;]</pre><p>Yukarıdaki örnekte, sort() methodu kullanılarak fruits dizisi alfabetik olarak sıralanır. String öğeler alfabetik olarak sıralandığından, sonuç [&#39;apple&#39;, &#39;banana&#39;, &#39;kiwi&#39;, &#39;orange&#39;] şeklinde olur.</p><p><strong>4. Özel bir sıralama işlevi kullanarak bir nesne dizisini sıralama:</strong></p><pre>const persons = [<br>  { name: &#39;John&#39;, age: 25 },<br>  { name: &#39;Jane&#39;, age: 30 },<br>  { name: &#39;David&#39;, age: 20 }<br>];<br><br>persons.sort(function(a, b) {<br>  return a.age - b.age;<br>});<br><br>console.log(persons);<br>/* <br>[<br>  { name: &#39;David&#39;, age: 20 },<br>  { name: &#39;John&#39;, age: 25 },<br>  { name: &#39;Jane&#39;, age: 30 }<br>]<br>*/</pre><p>Yukarıdaki örnekte, sort() methodu kullanılarak persons dizisi age özelliğine göre sıralanır. Sıralama işlevi, öğeleri yaşa göre küçükten büyüğe doğru sıralamak için kullanılır. Sonuç olarak, nesne dizisi yaşa göre sıralanır.</p><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=987b405a084b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Array some() Method]]></title>
            <link>https://medium.com/@faruksekman/javascript-array-some-method-e2dfa29498ed?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/e2dfa29498ed</guid>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[javascript-development]]></category>
            <category><![CDATA[frontend-development]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Sat, 24 Jun 2023 20:44:52 GMT</pubDate>
            <atom:updated>2023-06-24T20:44:52.228Z</atom:updated>
            <content:encoded><![CDATA[<h4>some()</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8X9gzOUvOqB3puHMcQzblw.png" /></figure><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><p>JavaScript’te some() methodu, bir dizi içinde en az bir öğenin belirli bir koşulu sağlayıp sağlamadığını kontrol etmek için kullanılır. Bu method, dizi içindeki öğeler üzerinde verilen bir test fonksiyonunu çalıştırır ve en az bir öğe testi geçerse true değerini döndürür; aksi takdirde false değerini döndürür.</p><p><strong>Syntax (Sözdizimi)</strong></p><pre>array.some(callback)</pre><p><strong>Parametre</strong></p><ul><li>callback (gereklidir): Her bir öğe için çağrılan test fonksiyonu. Bu fonksiyon, üç parametre alır: element (geçerli öğe), index (geçerli öğenin indeksi), array (çalışılan dizi).</li></ul><p><strong>Dönüş Değeri</strong></p><ul><li>Testin en az bir öğe tarafından geçilip geçilmediğine bağlı olarak true veya false değeri.</li></ul><p><strong>Örnekler</strong></p><p><strong>1. Bir dizi içinde pozitif bir sayı olup olmadığını kontrol etme:</strong></p><pre>const numbers = [1, -2, 3, -4, 5];<br>const hasPositiveNumber = numbers.some(function(number) {<br>  return number &gt; 0;<br>});<br><br>console.log(hasPositiveNumber);   // true</pre><p>Yukarıdaki örnekte, some() methodu kullanılarak numbers dizisinin her bir öğesi, number &gt; 0 koşulunu kontrol eden bir test fonksiyonu ile değerlendirilir. Bu test fonksiyonu, pozitif bir sayı olup olmadığını kontrol eder. Dizi içinde en az bir pozitif sayı olduğu için some() methodu true değerini döndürür ve hasPositiveNumber değişkenine atanır.</p><p><strong>2. Dizi içinde belirli bir değere sahip öğenin olup olmadığını kontrol etme:</strong></p><pre>const fruits = [&#39;apple&#39;, &#39;banana&#39;, &#39;orange&#39;];<br>const hasBanana = fruits.some(function(fruit) {<br>  return fruit === &#39;banana&#39;;<br>});<br><br>console.log(hasBanana);   // true</pre><p>Yukarıdaki örnekte, some() methodu kullanılarak fruits dizisinin her bir öğesi, fruit === &#39;banana&#39; koşulunu kontrol eden bir test fonksiyonu ile değerlendirilir. Bu test fonksiyonu, dizinin içinde &#39;banana&#39; değerine sahip bir öğe olup olmadığını kontrol eder. Dizi içinde &#39;banana&#39; değerine sahip bir öğe olduğu için some() methodu true değerini döndürür ve hasBanana değişkenine atanır.</p><p><strong>3. Arrow function kullanarak test fonksiyonunu tanımlama:</strong></p><pre>const numbers = [1, 2, 3, 4, 5];<br>const hasEvenNumber = numbers.some(number =&gt; number % 2 === 0);<br><br>console.log(hasEvenNumber);   // true</pre><p>Yukarıdaki örnekte, arrow function kullanarak test fonksiyonunu tanımlarız. Bu test fonksiyonu, öğelerin çift sayı olup olmadığını kontrol eder. Dizi içinde en az bir çift sayı olduğu için some() methodu true değerini döndürür ve hasEvenNumber değişkenine atanır.</p><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e2dfa29498ed" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Array slice() Method]]></title>
            <link>https://medium.com/@faruksekman/javascript-array-slice-method-799cce7b5862?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/799cce7b5862</guid>
            <category><![CDATA[frontend-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <category><![CDATA[javascript-development]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Sat, 24 Jun 2023 20:41:33 GMT</pubDate>
            <atom:updated>2023-06-24T20:41:33.258Z</atom:updated>
            <content:encoded><![CDATA[<h4>slice()</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*124UC-b8YvSd_mUsxNvYPQ.png" /></figure><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><p>JavaScript’te slice() methodu, bir dizinin belirli bir kısmını yeni bir dizi olarak döndürür. Bu method, başlangıç ve bitiş indeksleri arasındaki öğeleri seçerek orijinal diziyi değiştirmeden keser.</p><p><strong>Syntax (Sözdizimi)</strong></p><pre>array.slice(startIndex, endIndex)</pre><p><strong>Parametre</strong></p><ul><li>startIndex (opsiyonel): Kesilecek kısmın başlangıç indeksi. Bu indeksten itibaren (dahil) öğeler kesilir. Negatif bir değer verilirse, dizinin sonundan geriye doğru indekslenir (-1 son öğeyi temsil eder).</li><li>endIndex (opsiyonel): Kesilecek kısmın bitiş indeksi. Bu indekse kadar (hariç) öğeler kesilir. Negatif bir değer verilirse, dizinin sonundan geriye doğru indekslenir (-1 son öğeyi temsil eder).</li></ul><p><strong>Dönüş Değeri</strong></p><ul><li>Kesilen öğelerden oluşan yeni bir dizi.</li></ul><p><strong>Örnekler</strong></p><p><strong>1. Dizi üzerinde belirli bir aralığı kesme:</strong></p><pre>const fruits = [&#39;apple&#39;, &#39;banana&#39;, &#39;orange&#39;, &#39;kiwi&#39;, &#39;mango&#39;];<br>const slicedFruits = fruits.slice(1, 4);<br><br>console.log(slicedFruits);   // [&#39;banana&#39;, &#39;orange&#39;, &#39;kiwi&#39;]</pre><p>Yukarıdaki örnekte, slice() methodu kullanılarak fruits dizisinin 1. indeksinden (dahil) 4. indeksine kadar (hariç) olan öğeler kesilir ve bu öğelerden oluşan yeni bir dizi olan slicedFruits oluşturulur. Sonuç olarak, slicedFruits dizisi [&#39;banana&#39;, &#39;orange&#39;, &#39;kiwi&#39;] şeklinde oluşturulur.</p><p><strong>2. Başlangıç indeksi belirtilmeden kesme:</strong></p><pre>const numbers = [1, 2, 3, 4, 5];<br>const slicedNumbers = numbers.slice(2);<br><br>console.log(slicedNumbers);   // [3, 4, 5]</pre><p>Yukarıdaki örnekte, slice() methodu kullanılarak numbers dizisinin 2. indeksinden başlayarak (dahil) tüm öğeler kesilir ve bu öğelerden oluşan yeni bir dizi olan slicedNumbers oluşturulur. Başlangıç indeksi belirtilmediği için 2. indeks (3. öğe) dahil olacak şekilde tüm öğeler kesilir. Sonuç olarak, slicedNumbers dizisi [3, 4, 5] şeklinde oluşturulur.</p><p><strong>3. Negatif indekslerle kesme:</strong></p><pre>const alphabets = [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;];<br>const slicedAlphabets = alphabets.slice(-3, -1);<br><br>console.log(slicedAlphabets);   // [&#39;C&#39;, &#39;D&#39;]</pre><p>Yukarıdaki örnekte, slice() methodu kullanılarak alphabets dizisinin son 3 öğesi (indeks -3&#39;den itibaren) ile son 1 öğesi (indeks -1 hariç) arasındaki öğeler kesilir ve bu öğelerden oluşan yeni bir dizi olan slicedAlphabets oluşturulur. Sonuç olarak, slicedAlphabets dizisi [&#39;C&#39;, &#39;D&#39;] şeklinde oluşturulur.</p><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=799cce7b5862" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Array shift() Method]]></title>
            <link>https://medium.com/@faruksekman/javascript-array-shift-method-22e6d42e7462?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/22e6d42e7462</guid>
            <category><![CDATA[javascript-development]]></category>
            <category><![CDATA[frontend-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Sat, 24 Jun 2023 20:37:18 GMT</pubDate>
            <atom:updated>2023-06-24T20:37:18.747Z</atom:updated>
            <content:encoded><![CDATA[<h4>shift()</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1JmSCOdIMX_IA9mC3uF01Q.png" /></figure><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><p>JavaScript’te shift() methodu, bir diziden ilk öğeyi çıkarır (kaldırır) ve bu öğeyi döndürür. Bu işlem sonucunda dizinin uzunluğu bir azalır ve diğer öğeler sola kayar.</p><p><strong>Syntax (Sözdizimi)</strong></p><pre>array.shift()</pre><p><strong>Parametre</strong></p><ul><li>Bu methodun parametresi yoktur.</li></ul><p><strong>Dönüş Değeri</strong></p><ul><li>Kaldırılan (çıkarılan) öğe.</li></ul><p><strong>Örnekler</strong></p><p><strong>1. Basit bir dizi üzerinde </strong><strong>shift() kullanımı:</strong></p><pre>const colors = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];<br>const removedColor = colors.shift();<br><br>console.log(colors);        // [&#39;green&#39;, &#39;blue&#39;]<br>console.log(removedColor);  // &#39;red&#39;</pre><p>Yukarıdaki örnekte, shift() methodu kullanılarak colors dizisinin ilk öğesi (&#39;red&#39;) kaldırılır ve bu öğe removedColor değişkenine atanır. Dizi üzerinde yapılan değişiklik sonucunda colors dizisi, &#39;red&#39; öğesinin kaldırılmasıyla [&#39;green&#39;, &#39;blue&#39;] şeklinde güncellenir. removedColor değişkeni ise kaldırılan öğe (&#39;red&#39;) değerini içerir.</p><p><strong>2. Boş bir dizi üzerinde </strong><strong>shift() kullanımı:</strong></p><pre>const emptyArray = [];<br>const removedItem = emptyArray.shift();<br><br>console.log(emptyArray);   // []<br>console.log(removedItem);  // undefined</pre><p>Yukarıdaki örnekte, shift() methodu kullanılarak boş bir dizi üzerinde işlem yapılır. Çünkü dizi boş olduğu için herhangi bir öğe kaldırılamaz. Bu durumda, shift() methodu undefined değerini döndürür ve dizi üzerinde herhangi bir değişiklik yapmaz.</p><p><strong>3. Dizi üzerindeki öğeleri tek tek kaldırma:</strong></p><pre>const numbers = [1, 2, 3, 4, 5];<br>while (numbers.length &gt; 0) {<br>  const removedNumber = numbers.shift();<br>  console.log(removedNumber);<br>}<br><br>console.log(numbers);   // []</pre><p>Yukarıdaki örnekte, shift() methodu döngü içinde kullanılarak numbers dizisinin öğeleri tek tek kaldırılır ve ekrana yazdırılır. Döngü, dizi boşalana kadar (numbers.length &gt; 0 koşulu sağlandığı sürece) devam eder. Sonuç olarak, öğeler sırasıyla kaldırılarak ekrana yazdırılır ve numbers dizisi boş bir dizi haline gelir ([]).</p><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=22e6d42e7462" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Array reverse() Method]]></title>
            <link>https://medium.com/@faruksekman/javascript-array-reverse-method-a922aa14865f?source=rss-960924e90ca------2</link>
            <guid isPermaLink="false">https://medium.com/p/a922aa14865f</guid>
            <category><![CDATA[javascript-development]]></category>
            <category><![CDATA[javascript-tips]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[frontend-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Faruk]]></dc:creator>
            <pubDate>Sat, 24 Jun 2023 20:33:27 GMT</pubDate>
            <atom:updated>2023-06-24T20:33:27.258Z</atom:updated>
            <content:encoded><![CDATA[<h4>reverse()</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TRk7qXaq1Z-tvyitbzMeRg.png" /></figure><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><p>JavaScript’te reverse() methodu, bir dizinin öğelerini yerinde tersine çevirir. Bu method, dizinin ilk öğesini sona, ikinci öğesini sondan bir önceki sıraya ve böylece devam ederek dizinin tamamını tersine çevirir.</p><p><strong>Syntax (Sözdizimi)</strong></p><pre>array.reverse()</pre><p><strong>Parametre</strong></p><ul><li>Bu methodun parametresi yoktur.</li></ul><p><strong>Dönüş Değeri</strong></p><ul><li>Tersine çevrilmiş dizi.</li></ul><p><strong>Örnekler</strong></p><p><strong>1. Basit bir dizi üzerinde </strong><strong>reverse() kullanımı:</strong></p><pre>const numbers = [1, 2, 3, 4, 5];<br>numbers.reverse();<br><br>console.log(numbers);   // [5, 4, 3, 2, 1]</pre><p>Yukarıdaki örnekte, reverse() methodu kullanılarak numbers dizisinin öğeleri tersine çevrilir. Dizi üzerinde yapılan değişiklik sonucunda numbers dizisi, [5, 4, 3, 2, 1] şeklinde tersine çevrilmiş hali alır.</p><p><strong>2. String dizisini tersine çevirme:</strong></p><pre>const fruits = [&#39;apple&#39;, &#39;banana&#39;, &#39;orange&#39;];<br>fruits.reverse();<br><br>console.log(fruits);   // [&#39;orange&#39;, &#39;banana&#39;, &#39;apple&#39;]</pre><p>Yukarıdaki örnekte, reverse() methodu kullanılarak fruits dizisinin öğeleri tersine çevrilir. Dizi üzerinde yapılan değişiklik sonucunda fruits dizisi, [&#39;orange&#39;, &#39;banana&#39;, &#39;apple&#39;] şeklinde tersine çevrilmiş hali alır.</p><p><strong>3. Tersine çevrilen diziyi başka bir değişkene atama:</strong></p><pre>const numbers = [1, 2, 3, 4, 5];<br>const reversedNumbers = numbers.reverse();<br><br>console.log(reversedNumbers);   // [5, 4, 3, 2, 1]</pre><p>Yukarıdaki örnekte, reverse() methodu kullanılarak numbers dizisinin öğeleri tersine çevrilir ve bu tersine çevrilmiş dizi reversedNumbers değişkenine atanır. reversedNumbers değişkeni, [5, 4, 3, 2, 1] şeklindeki tersine çevrilmiş diziye referans yapar.</p><blockquote><a href="https://medium.com/@faruksekman/javascript-array-methods-a9b34b54a571"><strong>Diğer JavaScript Array Method’larına buradan ulaşabilirsiniz.</strong></a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a922aa14865f" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>