Məzmuna keçin
  • Proxy dizayn nümunəsi (Pattern)

    Dizayn nümunələri design proxy pattern
    1
    0 Səslər
    1 Yazı
    18 Baxış
    Heç kim cavab yazmayıb
  • Bridge Pattern – Abstraksiya və İcranın Ayrılması

    Dizayn nümunələri design pattern bridge abstraction
    2
    1
    0 Səslər
    2 Yazı
    45 Baxış
    codexC
    🧪 Tapşırıq Aşağıdakı kod nümunəsində Shape adlı əsas class-dan Square və Triangle class-ları yaradılır. Hər forma həm Vector (xəttlərlə) həm də Raster (piksel ilə) şəklində çəkilə bilər. Bu isə hər formanın iki fərqli versiyasının yaradılmasına səbəb olur: class Shape { constructor(name) { this.name = name; } } class Triangle extends Shape { constructor() { super('triangle'); } } class Square extends Shape { constructor() { super('square'); } } class VectorSquare extends Square { toString() { return 'Drawing square as lines'; } } class RasterSquare extends Square { toString() { return 'Drawing square as pixels'; } } // imagine VectorTriangle and RasterTriangle are here too Bu yanaşma çox sayda class-ın yaradılmasına səbəb olur və sistemin genişləndirilməsini çətinləşdirir. Hər yeni forma və render üsulu üçün yeni bir class əlavə etmək lazım gəlir. Bu, məhz Dekart hasili problemini yaradır: Formalar × Render üsulları = Çox sayda sinif Yuxarıdakı kodu elə refactor edin ki, Bridge Pattern-dən istifadə edərək VectorTriangle və RasterTriangle yaradıb kodu new Triangle(new RasterRenderer()); formada çağırdıqda cavabında Drawing Triangle as pixels alınsın. 🧩 Həlli Çalışın ilk öncə özünüz həll edin sonra həllinə baxın Spoiler Bu problemi Bridge Pattern ilə həll edə bilərik. Bu dizayn pattern-in məqsədi abstraksiyanı onun implementasiyasından ayırmaqdır. Bununla da hər iki tərəf müstəqil şəkildə inkişaf etdirilə bilər. // Renderer interfeysini təmsil edən baza class class Renderer { get whatToRenderAs() { throw new Error('whatToRenderAs not implemented'); } } // Konkret Renderer-lər class VectorRenderer extends Renderer { get whatToRenderAs() { return 'lines'; } } class RasterRenderer extends Renderer { get whatToRenderAs() { return 'pixels'; } } // Baz forma classı— artıq rendereri qəbul edir class Shape { constructor(name, renderer) { this.name = name; this.renderer = renderer; } toString() { return `Drawing ${this.name} as ${this.renderer.whatToRenderAs}`; } } // Konkret formalar — yalnız ad və renderer qəbul edir class Triangle extends Shape { constructor(renderer) { super('Triangle', renderer); } } class Square extends Shape { constructor(renderer) { super('Square', renderer); } } ️ İstifadə nümunəsi const triangle = new Triangle(new RasterRenderer()); console.log(triangle.toString()); // Output: Drawing Triangle as pixels const square = new Square(new VectorRenderer()); console.log(square.toString()); // Output: Drawing Square as lines
  • Duck Typing nədir? JavaScript-də tətbiqi və nümunələrlə izah

    JavaScript types structural 🦆duck
    1
    0 Səslər
    1 Yazı
    40 Baxış
    Heç kim cavab yazmayıb
  • Java-da Inheritance və Composition: hansını, nə zaman istifadə etməliyik?

    Java composition inheritance oop is-a has-a
    1
    0 Səslər
    1 Yazı
    48 Baxış
    Heç kim cavab yazmayıb
  • Java-da String və StringBuilder: fərqlər və istifadə qaydaları

    Java string stringbuilder java
    1
    0 Səslər
    1 Yazı
    12 Baxış
    Heç kim cavab yazmayıb
  • Shadow DOM və Virtual DOM nədir?

    Front-end
    1
    0 Səslər
    1 Yazı
    63 Baxış
    Heç kim cavab yazmayıb
  • package.json faylına ətraflı baxış

    Qarışıq mövzular npm package nodejs
    1
    0 Səslər
    1 Yazı
    42 Baxış
    Heç kim cavab yazmayıb
  • Singleton dizayn nümunəsi (Pattern)

    Dizayn nümunələri design pattern singleton
    1
    0 Səslər
    1 Yazı
    76 Baxış
    Heç kim cavab yazmayıb
  • Java-da İrsi̇li̇k (Inheritance)

    Java oop inheritance principles
    2
    0 Səslər
    2 Yazı
    74 Baxış
    codexC
    extends açar sözü Java-da bir class başqa bir class-dan miras alarkən extends açar sözündən istifadə edilir: class ChildClass extends ParentClass { ... } Metodun üstələnməsi (Overriding) Alt class, üst class-ın metodunu öz versiyası ilə dəyişə bilər: class Animal { void sound() { System.out.println("Some generic sound"); } } class Cat extends Animal { @Override void sound() { System.out.println("Meow"); } } 🧱 İrsiliyin növləri Java-da Single Inheritance – yalnız bir class-dan miras alma Multilevel Inheritance – class-ın başqa bir class-dan miras alması və həmin class-ın da öz növbəsində miras alması Hierarchical Inheritance – bir neçə class-ın eyni class-dan miras alması Java multiple inheritance-i (çoxsaylı irsiliyi) class səviyyəsində dəstəkləmir, lakin interface-lər vasitəsilə bu mümkün olur. Access modifier-lərin təsiri Modifier Subclass daxilində görünür? public ️ protected ️ default ️ (eyni paketdədirsə) private Görünmür
  • Java-da Record və POJO nədir?

    Java pojo record immutable object
    1
    0 Səslər
    1 Yazı
    43 Baxış
    Heç kim cavab yazmayıb
  • Prototype nümunəsi (Prototype Pattern)

    Dizayn nümunələri prototype design pattern creational
    1
    0 Səslər
    1 Yazı
    38 Baxış
    Heç kim cavab yazmayıb
  • Builder dizayn nümunəsi (Builder Pattern)

    Dizayn nümunələri builder design pattern creational
    1
    0 Səslər
    1 Yazı
    46 Baxış
    Heç kim cavab yazmayıb
  • React.memo: nə zaman kömək edir, nə zaman zərər verir

    React memo usememo usecallback memoizasiya
    1
    0 Səslər
    1 Yazı
    55 Baxış
    Heç kim cavab yazmayıb
  • JavaScript Regular ifadələr (Regex) bələdçisi

    JavaScript regex
    1
    2
    0 Səslər
    1 Yazı
    64 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də Prototype Chain (Prototip Zənciri)

    JavaScript proto prototype object chain
    3
    0 Səslər
    3 Yazı
    112 Baxış
    codexC
    Bu 10 sual vasitəsilə JavaScript-in prototype zənciri, __proto__, prototype, Object.create(), constructor funksiyalar və new-in daxili iş prinsipi ətraflı şəkildə izah olundu. Bu biliklər JavaScript-i daha dərin anlamaq və daha güclü tətbiqlər yazmaq üçün vacibdir. 1. Prototype zənciri nədir? Spoiler Cavab: Prototype zənciri — JavaScript obyektlərinin digər obyektlərdən metod və propertiləri irsi olaraq almasına imkan verən mexanizmdir. JavaScript-də hər obyektin __proto__ adlı gizli bir xassəsi olur və bu xassə həmin obyektin hansı digər obyektdən miras aldığını göstərir. Axtarılan property obyektin özündə yoxdursa, JavaScript həmin property-ni zəncir üzrə yuxarıdakı prototiplərdə axtarır. 2. __proto__ və prototype arasında fərq nədir? Spoiler Cavab: __proto__ — istənilən obyektin daxili [[Prototype]] (gizli irsi əlaqəsi) istinadıdır. prototype — yalnız constructor funksiyalara (məsələn, function A() {}) aid olan xassədir və new ilə yaradılmış obyektlərin __proto__su bu prototype-ə istinad edir. Sadə desək: const obj = new Constructor(); obj.__proto__ === Constructor.prototype // true 3. Aşağıdakı kodun nəticəsi nə olacaq? İzah edin. function Person(name) { this.name = name; } Person.prototype.greet = function() { return "Hello, " + this.name; }; const p1 = new Person("John"); console.log(p1.greet()); // ? console.log(p1.__proto__ === Person.prototype); // ? Spoiler Cavab: p1.greet() → "Hello, John" — çünki greet metodu Person.prototype-dədir. p1.__proto__ === Person.prototype → true — çünki new ilə yaradılmış obyektlərin __proto__su həmin constructor-un prototype-inə bərabər olur. 4. JavaScript-də __proto__ necə işləyir? Spoiler Cavab: JavaScript obyekt üzərində bir property tapmayanda, avtomatik olaraq __proto__ vasitəsilə onun prototipinə baxır. Bu proses zəncirvari davam edir — yuxarı prototiplərə baxılır — ta ki null-a çatana qədər (Object.prototype.__proto__ === null). 5. Bu kod niyə işləmir? const obj = { name: "Elvin", sayHi: function() { return "Hi " + this.name; } }; obj.prototype = function sayHi() { return "Hello " + this.name; }; obj.sayHi(); Spoiler Cavab: Burada səhv odur ki, obj adi obyekt olduğu üçün onun prototype property-si işləmir. prototype yalnız constructor funksiyalar üçün işləyir. Bu şəkildə olmalı idi: function Person(name) { this.name = name; } Person.prototype.sayHi = function() { return "Hello " + this.name; }; 6. Aşağıdakı kodun nəticəsi nə olacaq? Niyə? const animal = { eats: true }; const rabbit = Object.create(animal); rabbit.jumps = true; console.log(rabbit.eats); // ? console.log(rabbit.jumps); // ? console.log(animal.jumps); // ? Spoiler Cavab: rabbit.eats → true — irsi olaraq animal-dan gəlir rabbit.jumps → true — öz property-dir animal.jumps → undefined — çünki jumps yalnız rabbit-ə aiddir 7. Object.create() nədir və onu new əvəzinə nə vaxt istifadə edərik? Spoiler Cavab: Object.create(proto) — yeni bir obyekt yaradır və onun __proto__-sunu verdiyimiz proto obyektinə bağlayır. new ilə müqayisədə Object.create() bizə birbaşa prototipi təyin etməyə imkan verir. Əgər constructor funksiyadan istifadə etmiriksə, sadə obyekt irsiliyi üçün Object.create() daha uyğundur. 8. Bu kodun nəticəsi nədir? Niyə? function A() {} A.prototype = { sayHello: function() { return 'Hello from A'; } }; const obj = new A(); A.prototype = { sayHello: function() { return 'Hello from modified A'; } }; console.log(obj.sayHello()); Spoiler Cavab: obj.sayHello() → "Hello from A" Çünki obj yaradıldıqdan sonra A.prototype dəyişdirilsə də, obj artıq köhnə prototipi saxlayır. Yeni prototype ancaq sonrakı instansiyalara təsir edərdi. 9. new əməliyyatını özümüz necə implement edə bilərik? Spoiler Cavab: function myNew(Constructor, ...args) { const obj = {}; Object.setPrototypeOf(obj, Constructor.prototype); const result = Constructor.apply(obj, args); return typeof result === 'object' && result !== null ? result : obj; } Bu funksiyamız: Boş obyekt yaradır Onun __proto__sunu constructor-un prototype-inə bağlayır Constructor-u həmin obyektə this kimi tətbiq edir Əgər constructor obyekt qaytarmırsa, yeni obyekt qaytarılır 10. Bu kodun nəticəsi nə olacaq? Niyə dəyişir? const grandParent = { greet: function() { return "Hello from GrandParent"; } }; const parent = Object.create(grandParent); const child = Object.create(parent); parent.greet = function() { return "Hello from Parent"; }; console.log(child.greet()); delete parent.greet; console.log(child.greet()); Spoiler Cavab: Birinci console.log → "Hello from Parent" — çünki child.greet() zəncirdə parent-da tapılır İkinci console.log → "Hello from GrandParent" — çünki parent.greet silinib və JavaScript irsi olaraq grandParent-a baxır
  • JavaScript-də Spread və Rest operatorunun gücü

    JavaScript spread rest operators
    1
    0 Səslər
    1 Yazı
    25 Baxış
    Heç kim cavab yazmayıb
  • JavaScript öyrənməsində Shuhari yanaşması

    Qarışıq mövzular yapon fəlsəfə javascript shuhari
    1
    0 Səslər
    1 Yazı
    67 Baxış
    Heç kim cavab yazmayıb
  • TypeScript-də Generics

    TypeScript typescript generics
    2
    0 Səslər
    2 Yazı
    56 Baxış
    codexC
    Mapped Types — TypeScript-in qabaqcıl xüsusiyyətlərindən biridir və mövcud obyektlərin açarlarını (yəni keyof) istifadə edərək yeni tip yarada bilməyə imkan verir. Bu xüsusiyyət əsasən reusable və dinamik tiplər yaratmaq üçün istifadə olunur. 1. Əsas sintaksis və istifadə Mapped Type yaratmaq üçün aşağıdakı sintaksisdən istifadə olunur: type MyMappedType<T> = { [P in keyof T]: T[P]; }; Bu o deməkdir ki, T tipində olan obyektin hər bir açarı (P) üçün həmin açarın tipi saxlanılır. Məsələn: type User = { name: string; age: number; }; type ReadonlyUser = { readonly [P in keyof User]: User[P]; }; // nəticə: // { // readonly name: string; // readonly age: number; // } 2. Sadə misallar a) Readonly type Readonly<T> = { readonly [K in keyof T]: T[K]; }; b) Partial type Partial<T> = { [K in keyof T]?: T[K]; }; c) Required type Required<T> = { [K in keyof T]-?: T[K]; }; 3. as ilə Key Rename (Advanced Feature) type RemoveUnderscore<T> = { [K in keyof T as K extends `_${infer R}` ? R : K]: T[K]; }; type User = { _id: string; name: string; }; type CleanUser = RemoveUnderscore<User>; // Nəticə: // { // id: string; // name: string; // } Burada as operatoru ilə _${infer R} pattern-i ilə başlayan açarları R şəklində dəyişmişik. 4. Record Mapped Type kimi type Record<K extends keyof any, T> = { [P in K]: T; }; const roles: Record<"admin" | "user", boolean> = { admin: true, user: false, }; 5. Real həyatdan misal Form input-lar üçün model yaradın: type FormFields = { email: string; password: string; }; type FormErrors = { [K in keyof FormFields]?: string; }; Bu halda FormErrors tipində email və password sahələri olacaq, amma optional və dəyərləri string olacaq.
  • TypeScript-də type və interface

    TypeScript types interfaces typescript
    1
    0 Səslər
    1 Yazı
    27 Baxış
    Heç kim cavab yazmayıb
  • Oracle SQL-də agregat funksiyalar

    Oracle oracle sql aggregate avg sum
    1
    0 Səslər
    1 Yazı
    120 Baxış
    Heç kim cavab yazmayıb