[]

JS'de try..catch kötü bir kullanım mı?

Javascript'te try..catch kullanımını nadir görüyorum, ben de bir kaç yıldır JS kullanıyor olmama karşın pek az kullanıyorum hatta kullanmıyorum.

JS öğrenmeye başladığımda "try..catch'i pek kullanmıyoruz" gibi bir şey duymuştum. try..catch önerilmeyen bir şey mi?


 
pek kullanılaman bir şey değil, try catch genelde servise çıkarken kullanılıyor. bir api'ye request atınca ordan error'a düşünce throw atmak için kullanılıyor.


  • ayin yazari  (12.01.21 23:34:58) 
javascript'te async islemler icin promiseler kullaniliyor cogunlukla. promislerde hatalar '.catch' metotuna bir fonksiyon verilerek yakalaniyordu. async await'in gelisiyle try catch kullanimi artmaya basladi.

eskiden
getPromise()
.then(function(result) {
})
.catch(function(error) {
})

olarak yazilan seyler artik
try {
getPromise()
} catch(error) {
}

seklinde yazilabiliyor. o yuzden eskiden oyleydi ama artik daha cok kullaniliyor diyebiliriz.
  • lemmiwinks  (12.01.21 23:43:24) 
peki hataları nasıl kontrol ediyorsun?

async await kullanırken catch kullanmak zorundasın. ben şahsen async/await'e geçtikten sonra çok rahatladım, callback hell'den de kurtuluyorsun. hem her şey alt alta olduğu için dümdüz yazabiliyorsun.

itnext.io

ya üstteki, ya alttaki olacak, ama sonuçta mutlaka bir catch olacak, ya try catch ya da .catch() şeklinde. diğer türlü hata kontrolü yapamazsın.
  • hayirsiz  (12.01.21 23:46:45 ~ 23:50:28) 
Çok sık kullanılmamasının bir kaç sebebi var.

1- Catch biraz pahalı bir işlem. Arkada yeni değişkenler yaratıyor, scope'u genişletmek zorunda kalıyor falan filan. Sık hata fırlatılmıyorsa sorun değil ama çok sık hata olan bir yerse biraz problem oluyor performans açısından.

2- JS async çalışan bi dil. Bu await keyword'ü gelmeden öncesi için konuşuyorum, try içerisinde promise dönen bir call var diyelim, resolve olduktan sonra yaptığın bir işlem patladığında catch bunu yakalayamıyordu. Bu özellikle yeni başlayan biri için gözden rahatlıkla kaçabilecek bir şey.

3- Eğer hatanın nerede olabileceğini biliyorsan if kullan. Yani x'in null olacağından şüpheleniyorsun diyelim, if(x){x.a} yap, else kısmında da hatayı handle et. Hem daha okunabilir, hem de çok daha hızlı. try-catch'i ne error geleceğini bilemediğin ve gelen error'u handle etmek istemediğin zamanlarda kullanmak daha mantıklı o yüzden.
  • plutongezegendegilmi  (12.01.21 23:58:52) 
javascript dili try..catch kullanimini zorlamiyor. o nedenle gelistirici tercihen olasi hatayi unit testler ile tespit edip kod icinde engellemeyi tercih ediyor. yani javascript gelistiriciyi bu konuda ozgur birakiyor ve hata yakalamayi unit testlere birakiyor.

diger taraftan java, c# dilleri buna imkan vermiyor. kullanilan bir method exception firlatiyorsa bu kod blogunu try..catch ile sarmalamayi veya o methoddan bir exception firlatip eninde sonunda bir try..catch icinde yakalamaya zorluyor. yapilmazsa kod derlenmiyor.

iki strateji de duruma gore dogru aslinda. javascript daha esnek ve sorumlulugu gelistiriciye veriyor. java ve c# daha guvenli ve gelistiriciyi bu guvenlige zorluyor.
  • emrahday  (13.01.21 09:11:05 ~ 09:12:47) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.