JS'de bir fonksiyon yaratma konusunda büyük bir isteksizlik var gibi görünüyor. Bu isteksizlik, insanların zeki olmaya çalışmasına ve sadece bir işlevin çağrıldığı gibi bir satırdaki şeyleri tutmak için saçma numaralar kullanmasına neden olur. Elbette bir çağrıdaki fonksiyon ismi de ekstra dokümantasyon görevi görür. Zor bir ifadeye yorum ekleyemeyiz, çünkü o zaman bunu yapma noktasını yitirir, böylece biz sadece "js deyimi" olarak adlandırırız ve aniden anlaşılabilir olur.
Javascript son derece erişilebilir, çoğu insan bizim gibi kahvaltı için teknik özellikleri yemiyor. Böylece hiçbir zaman bir deyimin saklı varsayımlarının ve son durumlarının ne olduğunu asla anlamayacaklar.
x = x || 'default_value';
Ortalama joe bunu anlamayacak veya varsayılan değer için deyim olduğunu ezberleyecektir. Her ikisi de zararlıdır, aslında ikincisi daha da zararlıdır. Buradaki varsayımları ve son durumları anlamıyor. Şartnameyi okumayı ve onu asla anlamayı umursamıyor.
Ben bu kodu baktığınızda bunu eğer" bölümüne bakın null
veya undefined
daha sonra bu varsayılan değere ayarlayın. O da örtülü olarak görür rağmen +0
, -0
, NaN
, false
, ve ""
olarak uygun değildir değerlerini. Ben hatırlamak zorunda olacağı 3 ay zaman o ihtiyaçlar andan itibaren değiştirmek için. Ben muhtemelen unutacağım. "
Örtük varsayımın gelecekte bir hataya neden olması son derece muhtemeldir ve kod temanız bu tür püf noktalarla doluysa, bir değişikliğin ne etkileyeceğini düşündüğünüzde hepsini kafanızda tutma şansınız yoktur. Ve bu "JS yanlısı" için, ortalama bir joe, gereksinimler başlangıçta sahte bir değeri kabul etse bile, hatayı yazmış olurdu.
Yeni snippet'iniz daha tanıdık bir sözdizimine sahip, ancak yine de yukarıdaki sorun var.
İle gidebilirsiniz:
function f(x) {
x = valueOrDefault(x, "default_value");
}
Artık son durumları ele almak için çok karmaşık bir mantığa sahip olabilirsiniz ve müşteri kodu hala güzel ve okunabilir görünüyor.
Şimdi, bir işlevi argüman olarak geçirme ya da akıllıca bir numara gibi ileri dil özellikleri arasında nasıl bir fark var || "default"
?
Akıllı hileler, kod ilk olarak yaratıldığında göz ardı edilebilecek bazı gizli varsayımlar altında çalışır. Bir IIFE'yi asla başka bir şeyle değiştirmek zorunda kalmayacağım, çünkü bir ihtiyaç değişti, daima orada olacak. Belki 2020'de gerçek modülleri kullanabildiğimde ama evet.
| 0
ya da ~~num
döşeme için kullanılan kargo kült versiyonu, pozitif ve 32-bit işaretli tam sayı sınırlarını varsayar.
|| "default"
Tüm sahte değerlerin bir argümanı geçmemekle aynı olduğunu varsayar.
Ve bunun gibi.