Bu ders için video bulunmamaktadır.
Ders İçeriği
Giriş: Modüler Programlama
Modern JavaScript uygulamaları giderek daha karmaşık hale gelmektedir. Büyük uygulamaları yönetilebilir kılmak için, kodu daha küçük, bağımsız ve yeniden kullanılabilir parçalara bölmek önemlidir. Bu yaklaşım, modüler programlama olarak bilinir.
JavaScript'te modüller, kodunuzu mantıksal birimler halinde organize etmenize, bağımlılıkları yönetmenize ve kodun yeniden kullanılabilirliğini artırmanıza olanak tanır. Modüller sayesinde:
- Kodunuzu daha küçük, yönetilebilir parçalara bölebilirsiniz
- Bağımlılıkları açıkça belirtebilirsiniz
- Değişken ve fonksiyon isim çakışmalarını önleyebilirsiniz (kapsam yönetimi)
- Kodunuzu daha kolay test edebilirsiniz
- Kodunuzu farklı projelerde yeniden kullanabilirsiniz
Bu derste, JavaScript'te modüler programlamanın temellerini, farklı modül sistemlerini ve modern JavaScript uygulamalarında modüllerin nasıl kullanıldığını öğreneceğiz.
JavaScript'te Modül Sistemlerinin Evrimi
JavaScript, başlangıçta modül sistemi olmadan tasarlanmıştı. Zaman içinde, geliştiriciler çeşitli modül sistemleri ve desenler geliştirdiler. İşte JavaScript modül sistemlerinin kısa bir tarihçesi:
1. IIFE (Immediately Invoked Function Expression)
İlk modül deseni, hemen çağrılan fonksiyon ifadeleri (IIFE) kullanılarak oluşturuldu. Bu, değişkenleri global kapsamdan izole etmek için kullanılan bir tekniktir.
2. CommonJS
Node.js'in yükselişiyle birlikte, CommonJS modül sistemi popüler hale geldi. Bu sistem, require()
ve module.exports
kullanarak modülleri yönetir.
3. AMD (Asynchronous Module Definition)
Tarayıcılar için geliştirilen AMD, modüllerin eşzamansız olarak yüklenmesini sağlar. RequireJS, bu formatın en popüler uygulamasıdır.
4. UMD (Universal Module Definition)
UMD, hem CommonJS hem de AMD ile uyumlu çalışabilen bir modül desenidir. Böylece, aynı kod hem Node.js hem de tarayıcılarda çalışabilir.
5. ES Modules (ECMAScript Modules)
ES6 (ES2015) ile birlikte, JavaScript'e resmi bir modül sistemi eklendi: ES Modules. Bu, modern JavaScript'in standart modül sistemidir ve hem tarayıcılarda hem de Node.js'de desteklenir.
ES Modules (ESM) Detaylı İnceleme
ES Modules, modern JavaScript'in standart modül sistemidir ve şu anda en yaygın kullanılan modül sistemidir. Bu bölümde, ES Modules'ın temel özelliklerini ve kullanım şekillerini detaylı olarak inceleyeceğiz.
1. Modül Tanımlama ve Kullanma
ES Modules'da, her JavaScript dosyası bir modüldür. Modüller, export
anahtar kelimesi ile değişkenleri, fonksiyonları veya sınıfları dışa aktarır ve import
anahtar kelimesi ile bunları içe aktarır.
ES Modules Temel Yapısı
export function add(a, b) {...}
export function subtract(a, b) {...}
import { add, subtract } from './math.js';
add(5, 3); // 8
2. Dışa Aktarma (Export) Türleri
ES Modules'da iki tür dışa aktarma vardır: isimli (named) ve varsayılan (default).
İsimli Dışa Aktarmalar (Named Exports)
Varsayılan Dışa Aktarma (Default Export)
Her modülde yalnızca bir varsayılan dışa aktarma olabilir.
İsimli ve Varsayılan Dışa Aktarmaları Birlikte Kullanma
3. İçe Aktarma (Import) Türleri
ES Modules'da, dışa aktarılan değerleri farklı şekillerde içe aktarabilirsiniz.
İsimli İçe Aktarmalar (Named Imports)
Varsayılan İçe Aktarma (Default Import)
İsimli ve Varsayılan İçe Aktarmaları Birlikte Kullanma
Tüm İçe Aktarmalar (Namespace Import)
4. Modül Yeniden Dışa Aktarma (Re-exporting)
Bazen, bir modülden içe aktardığınız değerleri başka bir modülden dışa aktarmak isteyebilirsiniz. Buna "yeniden dışa aktarma" (re-exporting) denir.
5. Dinamik İçe Aktarma (Dynamic Import)
ES Modules, statik içe aktarmanın yanı sıra, dinamik içe aktarmayı da destekler. Bu, modülleri ihtiyaç duyulduğunda eşzamansız olarak yüklemenize olanak tanır.
Not: Dinamik içe aktarma, kod bölme (code splitting) ve tembel yükleme (lazy loading) için çok kullanışlıdır. Özellikle büyük uygulamalarda, başlangıçta tüm kodu yüklemek yerine, ihtiyaç duyulduğunda belirli modülleri yükleyerek performansı artırabilirsiniz.
Tarayıcılarda ES Modules Kullanımı
Modern tarayıcılar, ES Modules'ı doğrudan destekler. Bir script'i modül olarak yüklemek için, <script>
etiketine type="module"
özniteliği eklemeniz yeterlidir.
Tarayıcılarda ES Modules Kullanırken Dikkat Edilmesi Gerekenler
- CORS (Cross-Origin Resource Sharing): ES Modules, CORS politikalarına tabidir. Yerel dosya sisteminden modülleri yüklemek için bir web sunucusu kullanmanız gerekebilir.
- Uzantılar: Tarayıcılarda, içe aktarma yollarında
.js
uzantısını belirtmeniz gerekir. - Katı Mod: Tüm ES modülleri otomatik olarak "strict mode" altında çalışır.
- Eşzamansız Yükleme:
type="module"
ile yüklenen scriptler varsayılan olarak eşzamansızdır (async). - Tek Kez Yürütme: Aynı modül birden fazla kez içe aktarılsa bile, yalnızca bir kez yürütülür.
Uyarı: Eski tarayıcılar ES Modules'ı desteklemeyebilir. Uyumluluk için, bir derleme aracı (Webpack, Rollup, Parcel vb.) veya bir transpiler (Babel) kullanabilirsiniz.
Node.js'de ES Modules Kullanımı
Node.js, geleneksel olarak CommonJS modül sistemini kullanır, ancak Node.js 13.2.0 ve sonraki sürümlerde ES Modules desteği de eklenmiştir. Node.js'de ES Modules kullanmanın birkaç yolu vardır:
1. .mjs Uzantısı Kullanma
Dosya uzantısını .mjs
olarak değiştirerek, Node.js'e bu dosyanın bir ES modülü olduğunu belirtebilirsiniz.
2. package.json'da "type": "module" Belirtme
Projenizin package.json
dosyasında "type": "module"
belirterek, tüm .js
dosyalarının ES modülü olarak değerlendirilmesini sağlayabilirsiniz.
Node.js'de ES Modules Kullanırken Dikkat Edilmesi Gerekenler
- __dirname ve __filename: ES Modules'da
__dirname
ve__filename
global değişkenleri bulunmaz. Bunun yerine,import.meta.url
kullanabilirsiniz. - require(): ES Modules'da
require()
fonksiyonu kullanılamaz. Bunun yerine,import
ifadesini veya dinamikimport()
fonksiyonunu kullanmalısınız. - Uzantılar: Node.js'de ES Modules kullanırken, içe aktarma yollarında dosya uzantılarını belirtmeniz gerekir.
Modül Paketleyiciler (Bundlers)
Modern web geliştirmede, modül paketleyiciler (bundlers) yaygın olarak kullanılır. Bu araçlar, modülleri ve bağımlılıklarını tek bir dosyada birleştirir, böylece tarayıcıda daha verimli bir şekilde yüklenebilirler.
Popüler Modül Paketleyiciler
- Webpack: En popüler ve güçlü modül paketleyici. Sadece JavaScript değil, CSS, resimler ve diğer varlıkları da işleyebilir.
- Rollup: Özellikle kütüphaneler için optimize edilmiş, "tree-shaking" özelliği ile kullanılmayan kodu elemede etkili bir paketleyici.
- Parcel: Sıfır yapılandırma gerektiren, kullanımı kolay bir paketleyici.
- esbuild: Go ile yazılmış, çok hızlı bir JavaScript paketleyici ve minifier.
- Vite: Modern web projeleri için hızlı bir geliştirme ortamı ve derleme aracı.
Webpack Örneği
Webpack, en yaygın kullanılan modül paketleyicidir. İşte basit bir Webpack yapılandırması:
Webpack ile bir projeyi derlemek için:
Modül Paketleyicilerin Avantajları
- Kod Bölme (Code Splitting): Uygulamanızı daha küçük parçalara bölerek, ihtiyaç duyulduğunda yüklenmesini sağlar.
- Tree Shaking: Kullanılmayan kodu elemek için statik analiz kullanır.
- Varlık Optimizasyonu: Resimler, CSS ve diğer varlıkları optimize eder.
- Dönüştürücüler (Transformers): Babel gibi araçlarla modern JavaScript'i eski tarayıcılar için uyumlu hale getirir.
- Geliştirme Araçları: Hot Module Replacement (HMR) gibi geliştirme deneyimini iyileştiren özellikler sunar.
Alıştırmalar
- Bir hesap makinesi modülü oluşturun. Modül, temel matematik işlemlerini (toplama, çıkarma, çarpma, bölme) ve bazı ileri işlemleri (karekök, üs alma) içermelidir. Modülü ES Modules sözdizimi ile yazın.
- Bir para birimi dönüştürücü modülü oluşturun. Modül, farklı para birimleri arasında dönüşüm yapabilmelidir (TL, USD, EUR, GBP). Modülü varsayılan ve isimli dışa aktarmalar kullanarak yazın.
- Bir tarih işleme modülü oluşturun. Modül, tarih formatlama, tarih aralığı hesaplama ve tarih karşılaştırma gibi işlevler içermelidir. Modülü CommonJS sözdizimi ile yazın ve sonra ES Modules'a dönüştürün.
- Bir HTML sayfası oluşturun ve
type="module"
kullanarak bir JavaScript modülünü yükleyin. Modül, sayfadaki DOM elemanlarını manipüle etmelidir. - Bir ana modül oluşturun ve diğer modüllerden belirli fonksiyonları içe aktarıp yeniden dışa aktarın (re-export). Sonra, bu ana modülü başka bir dosyadan içe aktarın ve kullanın.
Bu derste, JavaScript'te modüler programlamanın temellerini ve farklı modül sistemlerini inceledik:
- Modüler Programlama: Kodu daha küçük, yönetilebilir ve yeniden kullanılabilir parçalara bölme yaklaşımı.
- Modül Sistemlerinin Evrimi: IIFE, CommonJS, AMD, UMD ve ES Modules gibi farklı modül sistemleri ve desenleri.
- ES Modules (ESM): Modern JavaScript'in standart modül sistemi.
export
veimport
anahtar kelimeleri ile kullanılır. - Dışa Aktarma Türleri: İsimli (named) ve varsayılan (default) dışa aktarmalar.
- İçe Aktarma Türleri: İsimli, varsayılan ve namespace içe aktarmalar.
- Dinamik İçe Aktarma:
import()
fonksiyonu ile eşzamansız modül yükleme. - Tarayıcılarda ES Modules:
<script type="module">
ile modül kullanımı. - Node.js'de ES Modules:
.mjs
uzantısı veya"type": "module"
ile modül kullanımı. - Modül Paketleyiciler: Webpack, Rollup, Parcel gibi araçlarla modülleri paketleme ve optimize etme.
Modüller, modern JavaScript uygulamalarının temel yapı taşlarıdır. Kodunuzu modüller halinde organize etmek, daha sürdürülebilir, test edilebilir ve ölçeklenebilir uygulamalar geliştirmenize yardımcı olur.
Bir sonraki derste, modern JavaScript'in diğer önemli özelliklerinden biri olan sınıflar (classes) ve nesne yönelimli programlama konularını inceleyeceğiz.