JavaScript Vaatlerinin Açıklaması: sonra, catch, Promise.all ve Yaygın Hatalar
Vaatler, JavaScript’in daha sonra biten işleri nasıl ele aldığıdır ve eşzamansız/bekleme bunların üzerine inşa edilmiştir. Her örnekten gerçek çıktı alarak gerçekte nasıl davrandıklarını öğrenin ve hatalarınızı yutan hatalardan kaçının.
- Söz, daha sonra kullanılabilecek bir sonucu temsil eden bir nesnedir.
- Yerine getirilene veya reddedilene kadar beklemededir ve bir kez karara bağlandığında asla değişmez.
- Her
thenyeni bir söz verir, bu da zincirlemeyi mümkün kılar. - Her sonuç gerektiğinde
Promise.all‘i, her sonucu istediğinizdePromise.allSettled‘yi kullanın.
Ağ istekleri, dosya okumaları ve zamanlayıcıların tümü daha sonra tamamlanır, ancak JavaScript öylece durup bekleyemez; aksi halde sayfa donar. JavaScript vaatleri size “bu bittiğinde şunu yapın, başarısız olursa şunu yapın” demenin düzenli bir yolunu sunar.
Çoğunlukla async ve await yazsanız bile, alttaki vaatleri kullanıyorsunuz, dolayısıyla bunları anlamak hata ayıklamayı çok daha kolay hale getiriyor. Bu örnekleri Node.js 24’te çalıştırdık ve gösterilen çıktı bu çalıştırmadan geliyor. Modern tarayıcılarda da aynı şekilde davranırlar.
Söz nedir?
Bir söz, gelecekteki bir değerin yer tutucusudur. Sipariş verirken bir restoranın size verdiği zil sesini düşünün. Henüz yemeğinizi yemediniz ama hazır olduğunu veya bir sorun olduğunu size bildirecek bir şeyi elinizde tutuyorsunuz ve bu arada başka şeyler yapmakta özgürsünüz.
Kodda, eşzamansız bir işlev hemen bir söz döndürür ve bundan sonra ne olması gerektiğini eklersiniz:
fetch("/api/user")
.then((response) => response.json())
.then((user) => console.log(user.name))
.catch((error) => console.log("Failed:", error.message));
Üç vaat durumu
| Eyalet | Anlamı | Ne çalışır |
|---|---|---|
| Beklemede | İş henüz bitmedi | Henüz hiçbir şey yok |
| Yerine getirildi | Bir değerle bitti | then işleyiciler |
| Reddedildi | Bir sebeple başarısız oldu | catch işleyiciler |
Yerine getirilen veya reddedilen bir söze taahhüt edilen denir. Bir söz yalnızca bir kez yerine getirilebilir. Bundan sonra durumu ve değeri sabitlenir ve daha sonra resolve veya reject‘e yapılan çağrılar dikkate alınmaz.
Bir söz oluştur
Genellikle fetch gibi API’lerden gelen vaatleri kullanırsınız, ancak bir tane oluşturmak bunların nasıl çalıştığını gösterir. Yapıcı iki işlevi alır, resolve ve reject:
function fetchUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id > 0) {
resolve({ id, name: "Asha" });
} else {
reject(new Error("Invalid id"));
}
}, 100);
});
}
console.log(fetchUser(1));
// Promise { <pending> }
Sözün hemen günlüğe kaydedilmesi, zamanlayıcının tetiklenmemesi nedeniyle hala beklemede olduğunu gösterir. Değere yalnızca bir işleyici veya await aracılığıyla ulaşılabilir. Bir Error, hata ayıklamaya yardımcı olan bir yığın izi taşıdığından her zaman bir dize yerine bir Error nesnesiyle reddedin.
sonra yakala ve sonunda
Bu üç yöntem işleyicileri bir söze bağlar:
fetchUser(1).then((user) => console.log(user.name));
// Asha
fetchUser(-1)
.then((user) => console.log("never runs", user))
.catch((error) => console.log("caught:", error.message))
.finally(() => console.log("finally"));
// caught: Invalid id
// finally
then başarı durumunda çalışır, catch başarısızlık durumunda çalışır ve finally her iki şekilde de çalışır. Bu, finally‘ü, yükleme döndürücüsünün saklanması gibi temizlik için doğru yer haline getirir. Hiçbir argüman kabul etmez çünkü sonucu umursamaması gerekir.
Zincirleme sözler
Ana fikir, then‘in her zaman yeni bir söz vermesidir. İşleyicinizin geri getirdiği şey, o yeni sözün değeri olur:
Promise.resolve(2)
.then((n) => n * 10)
.then((n) => n + 1)
.then((n) => console.log("chain:", n));
// chain: 21
Bir işleyici başka bir söz verirse zincir, devam etmeden önce bunun yerine oturmasını bekler. İç içe geçmiş geri aramaları düz bir adım dizisine dönüştüren şey budur:
getUser(id)
.then((user) => getOrders(user.id))
.then((orders) => getInvoice(orders[0].id))
.then((invoice) => console.log(invoice.total))
.catch(handleError);
Hatalar bir zincir boyunca nasıl ilerler?
Reddedilen bir söz, catch‘ye ulaşana kadar her then‘i atlar. Bir işleyicinin içine atmak da reddedilme sayılır. Ve normal olarak geri dönen bir catch zinciri tekrar yoluna sokar:
Promise.resolve("start")
.then(() => {
throw new Error("step 2 failed");
})
.then(() => console.log("skipped"))
.catch((error) => {
console.log("caught:", error.message);
return "recovered";
})
.then((value) => console.log("continues:", value));
// caught: step 2 failed
// continues: recovered
Bunu try ve catch‘nin eşzamansız versiyonu olarak düşünün. Sondaki bir catch genellikle tüm zinciri kapsar. Yalnızca bir hatayı günlüğe kaydetmek istiyorsanız ve yine de başarısız olursanız, onu catch içinden tekrar atın.
İpucu: fetch yalnızca ağ arızalarında reddeder. 404 veya 500 yanıtı hala karşılanıyor, bu nedenle response.ok‘ü kendiniz kontrol edin. HTTP durum kodları yardımcı sayfamızda her kodun ne anlama geldiği açıklanmaktadır.
Promise.all, allSettled, race ve herhangi biri
Bu statik yöntemler aynı anda birden fazla vaadi koordine eder. Hepsi bir dizi alır ve bir söz verir.
| Yöntem | Ne zaman yerine gelir | Ne zaman reddeder | Bunun için kullan |
|---|---|---|---|
Promise.all |
Hepsi yerine getirilir | Herhangi biri reddeder | Tüm sonuçlar gerekli |
Promise.allSettled |
Hepsi yerleşti | Asla | Her sonucu istiyorsun |
Promise.race |
İlk yerleşen gerçekleştirir | İlk barışan reddeder | Zaman Aşımları |
Promise.any |
İlki yerine getiriyor | Hepsi reddedildi | İlk başarılı kaynak |
Bunları test etmek için biri gecikmeden sonra başarılı olan, diğeri gecikmeden sonra başarısız olan iki küçük yardımcı kullandık:
const wait = (ms, value) =>
new Promise((resolve) => setTimeout(() => resolve(value), ms));
const fail = (ms, message) =>
new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms));
Promise.all
await Promise.all([wait(300, "a"), wait(100, "b"), wait(200, "c")]);
// [ 'a', 'b', 'c' ] took about 300 ms
Dikkat edilmesi gereken iki ayrıntı. b ilk önce bitirilse bile sonuçlar giriş sırasını korur. Ve toplam süre yaklaşık 300 ms idi; en yavaş görevin süresi, 600 ms’lik toplam değil, çünkü üçü de zaten aynı anda çalışıyordu. Bunlardan herhangi biri reddederse, hepsi derhal reddeder:
await Promise.all([wait(100, "a"), fail(50, "b failed")]);
// rejected: b failed
Promise.allSettled
Bu, her şeyi bekler ve her sonucu rapor eder, böylece bir başarısızlık geri kalanını kaybetmez. Her widget’ın bağımsız olarak yüklendiği bir kontrol paneline uygundur:
const results = await Promise.allSettled([wait(50, "a"), fail(50, "b failed")]);
results.map((r) => r.status);
// [ 'fulfilled', 'rejected' ]
Promise.race ve Promise.any
await Promise.race([wait(300, "slow"), wait(100, "fast")]); // fast
await Promise.any([fail(50, "x"), wait(100, "ok")]); // ok
Aradaki fark, race başarısız olsa bile ilk karar vereni alırken, any bir şey başarılı olduğu sürece başarısızlıkları görmezden gelir. race‘ün klasik kullanımı yavaş bir isteğe zaman aşımı eklemektir, ancak daha yavaş olan görev siz onu iptal etmediğiniz sürece arka planda çalışmaya devam eder.
Vaatler ve eşzamansız/bekleme
async ve await aynı vaatlerle çalışmanın daha okunaklı bir yoludur. Bir async işlevi her zaman bir söz döndürür ve await, bir söz yerine getirilene kadar bu işlevi duraklatır:
async function showInvoice(id) {
try {
const user = await getUser(id);
const orders = await getOrders(user.id);
console.log(orders.length);
} catch (error) {
console.log("Failed:", error.message);
}
}
Reddetmeler atılan hatalara dönüşür, dolayısıyla sıradan try ve catch çalışır. Paralel çalışma için hala Promise.all‘e ihtiyacınız var, çünkü bir çağrıyı birbiri ardına beklemek onları sırayla çalıştırır. JavaScript eşzamansız/beklemede kılavuzumuz bu konuyu daha derinlemesine ele alıyor.
Vaatler ve olay döngüsü
Söz zaten yerine getirilmiş olsa bile, sözü yerine getirenler hiçbir zaman hemen çağrılmaz. Geçerli kod bittikten sonra ve herhangi bir zamanlayıcıdan önce çalışırlar. İşte kanıtı:
setTimeout(() => console.log("timeout"), 0);
Promise.resolve().then(() => console.log("microtask"));
console.log("sync");
// sync
// microtask
// timeout
İlk önce senkronize kod çalıştırılır. Daha sonra, söz işleyicilerini barındıran mikro görev kuyruğu gelir. Ancak o zaman olay döngüsü, zamanlayıcı gibi bir sonraki görevi alır. Bu popüler bir röportaj sorusudur ve sıfırın setTimeout‘ünün neden hemen gelmediğini açıklar.
Vaatler ve geri aramalar
| endişe | Geri aramalar | Vaatler |
|---|---|---|
| Sıralama | Her adımda iç içe, daha derin | Düz bir zincir |
| Hatalar | Her seviyede kontrol edildi | Bir catch zinciri kapatabilir |
| Paralel çalışma | Manuel sayaçlar | Promise.all |
| Yanlışlıkla iki kez mi aradınız? | Mümkün | İki kere anlaşamam |
Yaygın hatalar
then‘nin içine dönmeyi unutmak.returnolmadan, bir sonraki adımundefined‘ü alır ve içsel vaadinizi beklemez.- Hiç
catchyok. Bu, işlenmeyen bir reddetmeye neden olur ve Node.js’de işlemi varsayılan olarak durdurur. - Zincirleme yerine iç içe yerleştirme.
then‘yithen‘ün içine koymak, geri arama cehennemini yeniden yaratır. Sözü iade edin ve zincire devam edin. - Bir sözü
new Promise‘ye sarmalamak. Bir işlev zaten bir söz döndürüyorsa, onu kullanın. forEach‘yi eşzamansız geri aramalarla kullanma. Beklemez. JavaScript dizi yöntemleri kılavuzumuzda gösterildiği gibi,mapile birliktefor...ofveyaPromise.all‘ü kullanın.- Bir sözün iptal edilebileceğini düşünmek. Tek başına iptal edilemez. İstekler için
AbortController‘yi kullanın.
Son sözler
Sözler birkaç kuraldan oluşur: Bir söz bir kez yerine getirilir, then yeni bir söz verilir ve hatalar, bir şey onları yakalayana kadar zincir boyunca ilerler. Bu kurallar doğal gelmeye başladığında, async ve await sihirli olmayı bırakır. Alıştırma yapmak için, sözler kullanarak bir geri çağırma tabanlı işlevi yeniden yazın, ardından Promise.all ile iki uç nokta getirin ve bir arızayı doğru şekilde ele alın.
Sık sorulan sorular
JavaScript’te söz nedir?
Söz, eşzamansız çalışmanın nihai sonucunu temsil eden bir nesnedir. Beklemede olarak başlar, sonra ya bir değerle yerine getirilir ya da bir sebeple reddedilir.
Then ve catch arasındaki fark nedir?
sonra bir söz yerine getirildiğinde çalışır ve catch reddedildiğinde çalışır. catch yalnızca bir reddetme işleyicisiyle etkili bir şekilde çalışır ve daha önceki adımlarda atılan hataları da yakalayabilir.
Promise.all ve Promise.allSettled arasındaki fark nedir?
Promise.all, bir söz reddedildiği anda reddeder. Promise.allSettled her zaman hepsini bekler ve her birinin durumunu, değerini veya nedenini bildirir.
Sözleri mi yoksa eşzamansız/beklemeyi mi kullanmalıyım?
Beklemek vaatler üzerine kurulu olduğu için birlikte çalışırlar. Çoğu kod, eşzamansız/beklemede en iyi şekilde okunurken Promise.all ve benzer yöntemler paralel çalışma için kullanışlı olmaya devam eder.
Vaatler paralel olarak yürütülüyor mu?
JavaScript, bir iş parçacığı üzerinde aynı anda tek bir kod parçasını çalıştırır, ancak arka planda ağ istekleri gibi çalışır. Bunlardan birkaçı aynı anda devam ediyor olabilir.
Öğrenmeye devam et
Test, WordPress veya SEO konusunda yardıma mı ihtiyacınız var?
Ekiplerin daha iyi yazılımlar sunmasına ve sitelerini büyütmesine yardımcı oluyoruz. Bize ne üzerinde çalıştığınızı söyleyin, biz de bir sonraki adım için net bir öneride bulunalım.
Daha fazla kılavuz test, yapay zeka ve modern geliştirme
Bu makaleyi beğendiniz mi? Bir konu seçin ve doğrudan en yeni eğitimlerimize geçin.
Yapay Zeka Halüsinasyonları Açıklandı: Dil Modelleri Neden İşleri Düzeltiyor ve Nasıl Azaltılabilir?
Yapay zeka halüsinasyonları açıkladı: ne olduklarını, dil modellerinin bunları neden ürettiğini, yaygın türlerini, temellendirme ve yönlendirmelerle…
Makaleyi okuyun →DevOpsAçıklanan Ortam Değişkenleri: .env Dosyaları, Sırlar ve Yapılandırma Doğru Yapıldı
Çalıştırdığımız Python örnekleriyle açıklanan ortam değişkenleri: bunları okumak ve ayarlamak, neden her değerin bir dize olduğu, .env dosyaları, sü…
Makaleyi okuyun →Yazılım geliştirmeAPI Hız Sınırlamasının Açıklaması: Algoritmalar, Başlıklar ve 429 Hatalarının Ele Alınması
API hızı sınırlaması, çalıştırdığımız bir simülasyonla açıklanmıştır: belirteç kümesi, sabit pencere, kayan pencere, 429 yanıt, hız sınırı başlıklar…
Makaleyi okuyun →Test otomasyonuPython'da alay etme: Unittest.mock, patch ve Testleri Yalan Yapan Hatalar
Unittest.mock ile Python'da alay etme, test edildi: Sahte ve dönüş_değeri, yan_etki, bir adın kullanıldığı yerde yama uygulama, spesifikasyon ve oto…
Makaleyi okuyun →Yazılım testiKod Kapsamının Açıklaması: Hat ve Şube Kapsamı ve %100'ün Gerçek Anlamı
Kod kapsamı gerçek bir kapsama.py çalışmasıyla açıklanmıştır: hat, şube ve durum kapsamı, bir raporun okunması, %100 kapsamın neden hâlâ hataları ka…
Makaleyi okuyun →Veritabanları ve SQLSQL'de DELETE vs TRUNCATE vs DROP: Farklılıklar, Geri Alma ve Her Biri Ne Zaman Kullanılmalı
DELETE vs TRUNCATE vs DROP test edilmiş SQL ile açıklandı: her birinin neyi kaldırdığı, geri aldığı, tetiklediği, kimlik sıfırlaması, hızı ve Postgr…
Makaleyi okuyun →Veritabanları ve SQLAçıklanan SQL Görünümleri: Örneklerle Tuzakları Oluşturun, Kullanın ve Önleyin
Çalıştırdığımız sorgularla açıklanan SQL görünümleri: görünüm oluşturma, canlı sonuçlar, sütunları gizleme, performans, güncellenebilir ve gerçekleş…
Makaleyi okuyun →Yazılım geliştirmeTypeScript Arayüzü ve Tür: Gerçek Farklılıklar, Derleyiciyle Test Edildi
TypeScript arayüzü ve türü, gerçek derleyiciyle kontrol edildi: her ikisinin de yapabileceği, yalnızca birinin yapabileceği, bildirim birleştirme, g…
Makaleyi okuyun →Yazılım geliştirmePython *args ve **kwargs'ın Açıklaması: Açık Örneklerle Esnek Fonksiyonlar
Python *args ve **kwargs çalıştırdığımız kodla açıklanmıştır: paketleme ve paketten çıkarma, parametre sırası, yalnızca anahtar kelime ve yalnızca k…
Makaleyi okuyun →Yazılım geliştirmePython Lambda İşlevleri: Söz Dizimi, Gerçek Kullanımlar ve Ne Zaman Kullanılmaması Gerektiği
Çalıştırdığımız kodla açıklanan Python lambda işlevleri: sözdizimi, anahtarla sıralama, harita ve filtre, kapatmalar, geç bağlama tuzağı ve normal b…
Makaleyi okuyun →Yapay zekâYapay Zeka Ajanları Nelerdir? Çalıştırabileceğiniz Basit Bir Aracı Döngüsüyle Nasıl Çalışırlar?
Yapay zeka ajanları nedir? Aracı döngüsüne, araçlara, belleğe ve korkuluklara ilişkin basit bir kılavuz, çalıştırdığımız küçük bir Python döngüsü, g…
Makaleyi okuyun →DevOpsİzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark
İzleme ve gözlemlenebilirliğin açıklanması: bilinen ve bilinmeyen arızalar, günlükler, ölçümler ve izler, ödeme olayının gözden geçirilmesi, altın s…
Makaleyi okuyun →DevOpsDocker Birimleri ve Bağlama Bağlantıları: Konteyner Verilerini Doğru Şekilde Kalıcılaştırın
Docker birimleri ile bağlama bağlamaları arasındaki karşılaştırma açıklandı: kapsayıcı verilerinin neden kaybolduğu, adlandırılmış birimler, bağlama…
Makaleyi okuyun →Test otomasyonuTDD ve BDD: Temel Farklılıklar, Her İki Şekilde Geliştirilmiş Bir Özellik ve Her Birinin Ne Zaman Kullanılacağı
TDD ve BDD, her iki yönde de oluşturulmuş bir indirim özelliğiyle açıklandı: çalıştırdığımız kodla kırmızı-yeşil-refactor, Verilen-Ne Zaman-O Zaman …
Makaleyi okuyun →Yazılım testiKullanıcı Kabul Testi (UAT): Süreç, Kontrol Listesi ve Gerçek Örnekler
Kullanıcı kabul testi açıklandı: bunu kimin yürüttüğü, QA'dan farkı, yedi adımlı bir süreç, bir UAT test senaryosu şablonu, bir kontrol listesi, otu…
Makaleyi okuyun →Veritabanları ve SQLAçıklanan SQL NULL Değerleri: IS NULL, COALESCE, NULLIF ve Kaçınılması Gereken Tuzaklar
SQL NULL değerleri, çalıştırdığımız sorgularla açıklandı: üç değerli mantık, IS NULL, COALESCE, NULLIF, toplamaların, birleştirmelerin ve sıralamanı…
Makaleyi okuyun →Veritabanları ve SQLSQL CASE WHEN İfadesi: Sözdizimi, Gerçek Örnekler ve Yaygın Hatalar
SQL CASE WHEN çalıştırdığımız sorgularla açıkladı: basit ve aranmış formlar, koşul sırası, SUM'lu pivotlar, COUNT hileleri, özel sıralama, güncellem…
Makaleyi okuyun →Yazılım geliştirmeJWT Nedir? JSON Web Belirteçleri Bir Çalışma Örneğiyle Açıklanıyor
JWT nedir? JSON Web Tokens açıkladı: üç bölüm, çalıştırdığımız kodda oluşturulan ve üzerinde değişiklik yapılan bir token, JWT ile oturumlar, depola…
Makaleyi okuyun →Yazılım geliştirmeJavaScript Olay Döngüsü Açıklaması: Örneklerle Çağrı Yığını, Mikro Görevler ve Zamanlayıcılar
JavaScript olay döngüsü çalıştırdığımız kodla açıklandı: çağrı yığını, görev ve mikro görev kuyrukları, setTimeout 0'ın neden anında olmadığı, engel…
Makaleyi okuyun →Yazılım geliştirmePython Jeneratörleri ve Verim Açıklaması: Gerçek Örneklerle Bellekten Tasarruf Edin
Python üreteçleri ve verim, çalıştırdığımız kodla açıklandı: nasıl duraklatılır ve devam ettirilir, ölçülen bellek tasarrufları, işlem hatları, sons…
Makaleyi okuyun →Yapay zekâGömmeler Nelerdir? Vektörler ve Kosinüs Benzerliği Basitçe Açıklandı
Gömmeler nedir? Vektörler, kosinüs benzerliği ve anlamsal aramaya ilişkin sade dilli bir kılavuz; çalıştırdığımız küçük bir örnek, yaygın kullanımla…
Makaleyi okuyun →DevOpsMavi-Yeşil ve Kanarya Konuşlandırılması: Farklılıklar, Takaslar ve Nasıl Seçilir
Mavi-yeşil ve kanarya konuşlandırması açıklandı: her birinin nasıl çalıştığı, maliyet, risk ve geri alma, test ettiğimiz istikrarlı kullanıcı grubu,…
Makaleyi okuyun →Test otomasyonuKesintili Testler: Bunların Sebepleri ve Nasıl Düzeltileceği
Yaptığımız demolarla açıklanan hatalı testler: ana nedenler, birinin nasıl doğrulanacağı ve teşhis edileceği, zamanlama için uygun düzeltmeler, payl…
Makaleyi okuyun →Yazılım testiYük Testi ve Stres Testi: Farklılıklar, Metrikler ve k6 Örnekleri
Yük testi ve stres testinin açıklaması: her birinin neyi kanıtladığı, ani yükselme ve soğuma testleri, önemli ölçümler, ortalamaların neden yanıltıc…
Makaleyi okuyun →Yazılım testiTest Senaryosu ve Test Senaryosu: Temel Farklılıklar, Örnekler ve Her Biri Ne Zaman Kullanılmalı?
Test senaryosu ve test senaryosunun açıklaması: net tanımlar, yan yana tablo, senaryolardan vakalara, şablonlara ve her birinin ne zaman kullanılaca…
Makaleyi okuyun →Veritabanları ve SQLSQL Sorgu Optimizasyonu: Zamanlamalarla Yürütme Planlarını Okuyun ve Yavaş Sorguları Düzeltin
SQL sorgu optimizasyonu bir milyon satırda test edilmiştir: yürütme planlarını okuyun, doğru dizinleri ekleyin, değiştirilemeyen filtreleri düzeltin…
Makaleyi okuyun →Veritabanları ve SQLSQL UNION ve UNION ALL: Farklılıklar, Örnekler ve Test Edilmiş Performans
SQL UNION ve UNION ALL, yürüttüğümüz sorgularla açıklandı: kopyalar, her ikisinin de takip ettiği kurallar, gerçek bir veri hatası, ölçülen performa…
Makaleyi okuyun →Yazılım geliştirmeJavaScript Fetch API Eğitimi: GET, POST, Hata İşleme ve Zaman Aşımları
Yerel bir sunucuya karşı test edilen bir JavaScript Fetch API öğreticisi: GET ve POST, 404'ün neden atmadığı, yeniden kullanılabilir bir yardımcı, s…
Makaleyi okuyun →Yazılım geliştirmePython Dosya İşleme: Örneklerle Okuma, Yazma, CSV, JSON ve pathlib
Python dosya işleme, çalıştırdığımız kodla açıklanmıştır: açık modlar, büyük dosyaları okuma, CSV, JSON, pathlib, ikili dosyalar, güvenli yazma, hat…
Makaleyi okuyun →Yazılım geliştirmePython Sınıfları ve Nesneleri: Gerçek Örneklerle OOP Eğitimi
Çalıştırdığımız kodla açıklanan Python sınıfları ve nesneleri: __init__, yöntemler, sınıf ve örnek nitelikleri, kalıtım, özellikler, dunder yöntemle…
Makaleyi okuyun →Yapay zekâBüyük Dil Modeli Nedir? Yüksek Lisans'ların Nasıl Çalıştığı, Abartmadan Açıklanıyor
Büyük dil modeli nedir? LLM'ler sade bir dille açıklandı: belirteçler, yerleştirmeler, dikkat, eğitim, sıcaklık ve bağlam pencereleri, küçük bir son…
Makaleyi okuyun →DevOpsYeni Başlayanlar İçin Linux Komutları: Örneklerle Temel Terminal Kılavuzu
Yeni başlayanlar için göreve göre gruplandırılmış Linux komutları: pratik bir günlük analizi örneğiyle gezinme, dosyalar, günlükleri görüntüleme, gr…
Makaleyi okuyun →Test otomasyonuSelenyum ve Oyun Yazarı: Temel Farklılıklar, Karşılaştırılan Kod ve Hangisinin Seçileceği
Selenium ve Playwright karşılaştırması: mimari, bekleme, tarayıcı ve dil desteği, hata ayıklama, her iki araçta da aynı test, geçiş tavsiyesi ve nas…
Makaleyi okuyun →Yazılım testiEşdeğerlik Bölümleme: Test Tasarımı Tekniğinin Çalışılmış Örneklerle Açıklanması
Eşdeğerlik bölümlemenin açıklaması: geçerli ve geçersiz bölümlerin nasıl bulunacağı, yaşlara yönelik çalışılmış örnekler, şifreler ve kuponlar, yürü…
Makaleyi okuyun →Yazılım testiYazılım Testinde Şiddet ve Öncelik: Farklılıklar, Matris ve Gerçek Örnekler
Yazılım testinde önem ve önceliğin açıklanması: net tanımlar, örnekler içeren dört yönlü bir matris, seviye ölçekleri, her birini kimin belirlediği …
Makaleyi okuyun →Veritabanları ve SQLSQL Alt Sorguları Eğitimi: Türler, İlişkili Alt Sorgular ve Örneklerle EXISTS
Çalıştırdığımız sorguları içeren bir SQL alt sorgu eğitimi: skaler, IN, FROM ve SELECT alt sorguları, ilişkili alt sorgular, EXISTS, NOT IN NULL tuz…
Makaleyi okuyun →Veritabanları ve SQLSQL İşlemleri ve ACID Açıklaması: COMMIT, ROLLBACK ve İzolasyon Seviyeleri
SQL işlemleri ve ACID, yürüttüğümüz bir banka transferiyle açıklandı: COMMIT, ROLLBACK, kayıt noktaları, kilitler, izolasyon seviyeleri, kirli okuma…
Makaleyi okuyun →Yazılım geliştirmeGit Komutları Hile Sayfası: Gerçekte Kullandığınız Komutlar, Örneklerle
Git komutları göreve göre gruplandırılmış kısa bilgiler sayfası: kurulum, aşamalandırma, dallar, uzaktan kumandalar, saklama, geçmiş ve gerçek bir d…
Makaleyi okuyun →Yazılım geliştirmeJavaScript Vaatlerinin Açıklaması: ardından, catch, Promise.all ve Yaygın Hatalar
Çalıştırdığımız kodla açıklanan JavaScript vaatleri: durumlar, ardından ve yakalama zincirleri, hata yönetimi, Promise.all, allSettled, yarış ve her…
Makaleyi okuyun →Yazılım geliştirmePython Sözlüğü Eğitimi: Yöntemler, Örnekler ve Ortak Kalıplar
Çalıştırdığımız kodları içeren bir Python sözlüğü eğitimi: dikteler oluşturma, okuma ve güncelleme, temel yöntemler, birleştirme, kavramalar, sayma …
Makaleyi okuyun →Yapay zekâRAG Nedir? Geri Almayla Artırılmış Üretim Bir Çalışma Örneğiyle Açıklanıyor
RAG nedir? Almayla artırılmış oluşturma adım adım açıklanmıştır: indeksleme, parçalama, yerleştirmeler, alma, çalışan küçük bir Python örneği, değer…
Makaleyi okuyun →DevOpsYeni Başlayanlar İçin Terraform Eğitimi: İlk Dosyadan Modüllere Kod Olarak Altyapı
Yeni başlayanlar için bir Terraform eğitimi: Bulut hesabı olmadan başlayın, başlatmayı öğrenin, planlayın ve uygulayın, ardından değişkenler, çıktıl…
Makaleyi okuyun →DevOpsDocker ve Kubernetes: Temel Farklılıklar, Birlikte Nasıl Çalıştıkları ve İhtiyacınız Olanlar
Docker ve Kubernetes şöyle açıkladı: Her birinin ne yaptığı, her ikisinde de aynı uygulamanın çalıştırılması, Docker Compose ve Swarm'ın karşılaştır…
Makaleyi okuyun →Test otomasyonuYeni Başlayanlar İçin Pytest Eğitimi: Fikstürler, Parametrelendirme ve Gerçek Örnekler
Yeni başlayanlar için pytest 9.2'de yürüttüğümüz testleri içeren bir pytest öğreticisi: iddialar, fikstürler, parametrelendirme, yarışma, işaretleyi…
Makaleyi okuyun →Yazılım testiYazılım Test Yaşam Döngüsü (STLC): 6 Aşama, Giriş ve Çıkış Kriterleri, Örnek
Yazılım testi yaşam döngüsü şunları açıkladı: giriş ve çıkış kriterleri, teslimatlar, çalışılmış bir oturum açma özelliği örneği, Agile'da STLC ve S…
Makaleyi okuyun →Yazılım geliştirmeGit merge vs rebase: farklar, örnekler ve hangisi ne zaman kullanılır
Git merge vs rebase; gerçek log çıktısı, karşılaştırma tablosu, rebase'in altın kuralı ve güvenli bir ekip iş akışıyla anlatılıyor.
Makaleyi okuyun →Yazılım geliştirmePython Liste Üreteci (List Comprehension): Sözdizimi, Örnekler ve Kaçınılacak Durumlar
Python list comprehension anlatımı: sözdizimi, filtreleme, if-else, iç içe döngüler, ölçülmüş süreler ve düz for döngüsünün daha iyi olduğu durumlar.
Makaleyi okuyun →Veritabanları ve SQLSQL JOIN Örneklerle Açıklama (Inner, Left, Right, Full)
SQL JOIN'leri örnek tablolar ve sorgularla adım adım öğrenin: INNER, LEFT, RIGHT, FULL, CROSS ve SELF; yaygın hatalar ve performans ipuçları.
Makaleyi okuyun →