1

Bir işlev çağrılırsa ve çağrılan işlev için gereken bir parametrenin düzgün bir şekilde yürütülmemesi durumunda hata atmak iyi bir uygulamadır mı? (JavaScript) Örneğinİşlevde Gerekli Parazitlerin Yapılması

:

var sayHi = function(name) { 
    console.log(name + ' says hi!'); 
} 

vs

var sayHi = function(name) { 
    if(!name) { throw new Error('param is missing'); } 
    console.log(name + ' says hi!'); 
} 

İkinci örnekte Hava hakkında kuvvetli görüş orada iyi kodlama uygulamadır ya mı sadece gereksiz şişkinlik ekler eğer onlarca veya hatta yüzlerce dosyayı kapsayan daha karmaşık bir programda sıklıkla gereksiz hataların atılmasına neden olabilir mi?

+0

Bu görüşlere göre. Kodları yavaşlatarak, programlarını doğru bir şekilde çağırmak için programcıda bırakarak bu tür kontrolleri dahil etme eğiliminde değilim. Alternatif olarak, işlevlerin her zaman doğru sayıda argüman ile çağrılmasını sağlayan [TypeScript] (http://www.typescriptlang.org/) gibi statik olarak yazılmış bir dil kullanabilirsiniz. –

+0

@ raiti13 Bazı cevaplar size yardımcı olduysa lütfen gelecekteki kullanıcılara yardım etmeyi kabul edin :) – FredMaggiowski

cevap

2

Sen ES6 hemen bu fonksiyonun vücudun içinde if bildiriye sahip biraz daha iyi performansa sahiptir ve okunabilirliği artırır varsayılan değer

const err = msg => { throw Error(msg) } 

const sayHi = function(name = err('Name is undefined')) { 
    console.log(name + ' says hi!'); 
} 

gibi bir hata atar bir işlev geçirmeden elde edebilirsiniz. Yapabileceğin başka bir düşün, aynı şeyi yapan bir dekoratör inşa etmektir. gibi bir şey: Her zaman bir hata işleme stratejisi olmalıdır bence böylece

Sorunuza Is there a strong opinion söz gibi
@required('name') 
const sayHi = function(name = err('Name is undefined')) { 
    console.log(name + ' says hi!'); 
} 

, cevap sadece, çoğunlukla inatçı olabilir. Fonksiyon kolunda veya uygulama seviyesinde. Benim düşünceme göre hata yapma, performans darboğazınız olacaktır.

+0

Bu soruya cevap vermiyor. Bu OP'nin zaten ne yaptığını yapmanın pratik bir yoludur. Bir argüman verilmediğinde * bir hata atıp atmayacaklarını soruyorlar. –

+0

@MikeC, fonksiyonun gövdesini kontrol etmek yerine varsayılan parametreye sahip olmak, performansı iyileştirir ve kodu daha okunabilir yapar ... Bu yüzden bu soruyla alakasız değildir. Her neyse, düşüş için teşekkürler. –

+0

Bunun dışında. Bu kontrol hala bir yerde gerçekleştiriliyor ve [kodunuzu ES5'e kadar derliyorsanız] (https://babeljs.io/repl/#?evaluate=true&presets=es2015%2Creact%2Cstage-2&experimental=true&loose=false&spec=false&code = sabit% 20err% 20% 3D% 20msg% 20% 3D% 3E% 20% 7B% 20throw% 20Error (% 20msg% 20),% 20,% 7D% 0D% 0A% 0D% 0Aconst% 20sayHi% 20% 3D% 20function (isim% 20% 3B% 20err ('adı% 20is% 20undefined'))% 20% 7B% 0D% 0A% 20% 20console.log (isim% 20% 2B% 20 '% 20says% 20hi!')% 3B % 0D% 0A% 7D), daha sonra OP'nin gönderdiği gibi bir çeke doğrudan dönüştürülür. –

0

Bu, bağlıdır. Neredeyse her zaman bir tür hata işleme uygulamanız gerekir, ancak ne tür bir kullanım durumu duruma bağlıdır.

Bazen bir hata atmak iyi bir şeydir, diğer zamanlarda bir hata yapmanız durumunda bir şeyler yapmak isteyebilirsiniz.

Deneme/yakalama gibi bir şey kullanabilir veya bu durumda yalnızca tanımlanmamış olup olmadığını kontrol edin ve bununla bir şeyler yapın. İlk

1

ilk şey:

karar vermek gerçekten size kalmış Hava yapmanız gerekir ya da olmamalı throw ziyade istisna return bir hata kodu (veya null, ya da her neyse).

Bildiğim kadarıyla, hatalarını düzgün bir şekilde ele almak yerine, istisnalar atma konusunda çok fazla sorun yoktur.. (Hata JS veya)

zaman bir özel durum için doğru geçerli:

Bu şu soruyu beraberinde getiriyor?

soru burada oldukça zor ve bayraklı olmalıdır ve "temelli öncelikle görüş" olarak kapalı bu yana

Benzer bir soru (iyi .. belki de .. kişisel görüş kadardır ..Bu kesin bir soru) zaten istedi ve here cevap verdi ve kendimi bu açıklamada özetlenebilir kabul cevapla kabul bulmak olmuştur:

Kesinlikle! Ne zaman ve sadece fonksiyon önkoşulları (argümanlar hakkında varsayımlar) bozulduğunda bir istisna atılır! - @Lightman

senin durumda

İşlevinizden (beklenen parametresi) varsayımları ihlal edilmesi durumunda: JS required gibi bir işlev parametresini ayarlamak için herhangi bir sözdizimi yapısı sağlamaz çünkü EVET, bir özel durum. , here alınan

function missingParameterHandler() { 
    throw new Error('Missing parameter'); 
} 

function foo(aRequiredParameter = missingParameterHandler()) { 

    // Use your required parameter 
    console.log("Hello " + aRequiredParameter); 
} 

// Hence: 
foo("World") // OK 
foo()  // -> Throws exception 

Örnek here ederken bu özellik hakkında daha fazla örnek bulabilirsiniz:


ES6 ile istediğiniz davranışı gibi bir şey zorlamak için default parameters kullanabilirsiniz.

Bu, aRequireParameter iletilmediğinde varsayılan değerine (bu durumda çağrılır) atanması ve dolayısıyla istisna/hatanın atılması nedeniyle elde edilebilir.

İlgili konular