|
| 1 | +# Modüller |
| 2 | + |
| 3 | +Gerçek dünyada, bir program yeni işlevlerin ihtiyaçlarını karşılamak için doğal olarak büyür. Büyüyen kod tabanının yapılandırılması ve koruması ek çalışma gerektirir. Gelecekte ödeyecek olsa da, bunu ihmal etmek daha cazip gelebilir. Gerçekte, uygulamanın karmaşıklığını artırır, çünkü sistem hakkında bütüncül bir anlayış oluşturmak zorunda kalırsınız ve herhangi bir parçayı izole bir şekilde incelemekte zorluk yaşarsınız. İkinci olarak, işlevselliğini kullanabilmek için düğümleri çözmek için daha fazla zaman harcamanız gerekmektedir. |
| 4 | + |
| 5 | +Bu sorunları önlemek için _modüller_ mevcuttur. Bir `modül`, hangi kod parçalarına bağlı olduğunu ve diğer modüller için hangi işlevselliği sağladığını belirtir. Başka bir module bağlı olan modüller _dependencies_(bağımlılıklar) olarak adlandırılır. Çeşitli modül kütüphaneleri, kodu modüllerde düzenlemek ve talep üzerine yüklenmek için mevcuttur. |
| 6 | + |
| 7 | +* AMD - başlangıçta [require.js](https://requarejs.org/) tarafından kullanılan en eski modül sistemlerinden biridir. |
| 8 | +* CommonJS - Node.js sunucusu için oluşturulan modül sistemi. |
| 9 | +* UMD - AMD ve CommonJS ile uyumlu modül sistemi. |
| 10 | + |
| 11 | +Modüller birbirlerini yükleyebilir ve işlevselliği değiş tokuş etmek ve birbirlerinin işlevlerini çağırmak için import ve export özel direktiflerini kullanır. |
| 12 | + |
| 13 | +* `export` - mevcut modülün dışarıdan erişilebilir olmasını istediğiniz işlevleri ve değişkenleri etiketler |
| 14 | +* `import` - dışarıdan modülden işlevselliği içe aktarır |
| 15 | + |
| 16 | +Modüllerde `import` ve `export` mekanizmasını görelim. `sayHi.js` dosyasından `sayHi` fonksiyonun dışa aktarıldığını görüyoruz. |
| 17 | + |
| 18 | + |
| 19 | +```javascript |
| 20 | +// 📁 sayHi.js |
| 21 | +export const sayHi = (user) => { |
| 22 | + alert(`Hello, ${user}!`); |
| 23 | +} |
| 24 | +``` |
| 25 | + |
| 26 | +`main.js` dosyasında `sayHi` işlevi `import` direktifi yardımıyla içe aktarılır. |
| 27 | + |
| 28 | +```javascript |
| 29 | +// 📁 main.js |
| 30 | +import {sayHi} from './sayHi.js'; |
| 31 | + |
| 32 | +alert(sayHi); // function... |
| 33 | +sayHi('Kelvin'); // Hello, Kelvin! |
| 34 | +``` |
| 35 | + |
| 36 | +Burada import direktifi dosya yolunu içe aktararak modülü yükler ve `sayHi` değişkenine atar. |
| 37 | +Modüller iki şekilde dışa aktarılabilir: **Named**(Adlandırılmış) ve **Default**(Varsayılan). Ayrıca, _Named_ dışa aktarmalar satır içi veya ayrı ayrı atanabilir. |
| 38 | + |
| 39 | +```javascript |
| 40 | +// 📁 person.js |
| 41 | + |
| 42 | +// inlined named exports |
| 43 | +export const name = "Kelvin"; |
| 44 | +export const age = 30; |
| 45 | + |
| 46 | +// at once |
| 47 | +const name = "Kelvin"; |
| 48 | +const age = 30; |
| 49 | +export {name, age}; |
| 50 | +``` |
| 51 | + |
| 52 | +{% hint style="warning" %} |
| 53 | +Bir dosyada yalnızca bir tane `default` dışa aktarım olabilir! |
| 54 | +{% endhint %} |
| 55 | + |
| 56 | +<pre class="language-javascript"><code class="lang-javascript">// 📁 message.js |
| 57 | +const message = (name, age) => { |
| 58 | +<strong> return `${name} is ${age} years old.`; |
| 59 | +</strong>}; |
| 60 | +export default message; |
| 61 | +</code></pre> |
| 62 | + |
| 63 | +Dışa aktarmaya bağlı olarak, iki şekilde içe aktarabiliriz. _Named_(Adlandırılmış) dışa aktarmalar süslü parantezler kullanılarak oluşturulurken, varsayılan dışa aktarmalar kullanılmaz. |
| 64 | +```javascript |
| 65 | +import { name, age } from "./person.js"; // named export import |
| 66 | +import message from "./message.js"; // default export import |
| 67 | +``` |
| 68 | + |
| 69 | +Modüller atandığında, döngüsel bağımlılıktan kaçınmalıyız. Döngüsel bağımlılık, bir modülün B'ye, B'nin de doğrudan veya dolaylı olarak A'ya bağımlı olduğu durumdur. |
0 commit comments