DanLevy.net

JavaScript का जादू

[draft] इम्पेरटिव बनाम रिकर्सिव बनाम फंक्शनल

Hero image for JavaScript का जादू

इम्परेटिव बनाम रिकर्सिव बनाम फंक्शनल

[ कार्य प्रगति पर है ]

// Imperative: The Fastest ( + very simple, no new pointers or excess allocs ):
function fib(n) {
var a = 1,
b = 1,
c = 0;
for (var i = 1; i < n - 1; ++i) {
c = a + b;
a = b;
b = c;
}
return b;
}
// Recursive: (FIREFOX or BABELJS Only) ES6 function definition with
// parameter defaults used to set initial (internal/recursive) values
function fib(n, current = 0, a = 1, b = 1, c = 0) {
current++;
c = a + b;
a = b;
b = c;
return current >= n ? b : fib(n, current, a, b, c);
}
// Text-book-Bad Example - poor function scope w/ multiple mutable external values
function fib(n) {
if (!arr) {
var arr = [1, 1];
n = n - 2;
} // Bad
if (n === -1) {
return [arr[0]];
}
if (n === 0) {
return arr;
}
var proc = function() {
--n;
arr.push(arr[arr.length - 1] + arr[arr.length - 2]);
return n === 0 ? arr : proc();
// Bad: inner recursive function not needed, hint: variables used are from parent function scope
};
var ans = proc();
return ans[ans.length - 1];
}

प्रॉमिसेस: शानदार!

// Example Using bluebird Promises and it's
var Promise = require("bluebird"),
fs = Promise.promisifyAll(require("fs")),
less = Promise.promisifyAll(require("less"));
function writeFileData(data) {
return fs.writeFileAsync("/tmp/output.css", data);
}
// Bluebird makes something like this perhaps uncomfortably simple and succinct:
fs.readFileAsync("./style.less") // Call promisified readFile()
.then(less.renderAsync) // Hand off to less.render
.then(writeFileData); // Function to recieve the css contents (1st parameter)
  1. हालाँकि नेटिव ES6 प्रॉमिसेस बढ़िया हैं, मैं मजबूत Bluebird Promise Library को प्राथमिकता देता हूँ।
  2. लाइब्रेरी हो या न हो, मॉडर्न ब्राउज़र सालों से प्रॉमिस को सपोर्ट कर रहे हैं।
  3. प्रॉमिसेस को बिना किसी जटिल पैटर्न के इस्तेमाल किया जा सकता है - इम्प्लिसिट deferred बेहतर विकल्प है।
  4. $q बस बेकार है बस bluebird इस्तेमाल करो, ऊपर देखो।
  5. उल्लेखनीय बात: Bluebird के बेंचमार्क बेस्ट-केस टेस्ट हैं, इसलिए अगर तुम जटिल और फैंसी प्रॉमिस चेन बना रहे हो तो इसका ध्यान रखना।

Java बनाम JavaScript

रेट लिमिटिंग / डिबाउंसिंग / थ्रॉटलिंग

  1. JavaScript में David Walsh ने 20 लाइन से कम में डिबाउंस इम्प्लीमेंट किया!
  2. Java में, JDebounce नामक लाइब्रेरी काफी जटिल है और ~500+ लाइनों की है।
  3. _ दोनों की तुलना करने पर: _
  4. JavaScript वाला तरीका तेज़ है और शानदार सरलता हासिल करने के लिए फर्स्ट-क्लास फंक्शंस का उपयोग करता है।
  5. वहीं Java में मूविंग पार्ट्स काफी ज़्यादा हैं, कॉम्पाइल-टाइम पर व्यवहार लागू करने के लिए एनोटेशन्स का इस्तेमाल होता है, और मज़े के लिए ढेर सारा XML भी है!