JavaScript का जादू
[draft] इम्पेरटिव बनाम रिकर्सिव बनाम फंक्शनल
इम्परेटिव बनाम रिकर्सिव बनाम फंक्शनल
[ कार्य प्रगति पर है ]
// 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) valuesfunction 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 valuesfunction 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'svar 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)- हालाँकि नेटिव ES6 प्रॉमिसेस बढ़िया हैं, मैं मजबूत Bluebird Promise Library को प्राथमिकता देता हूँ।
- लाइब्रेरी हो या न हो, मॉडर्न ब्राउज़र सालों से प्रॉमिस को सपोर्ट कर रहे हैं।
- प्रॉमिसेस को बिना किसी जटिल पैटर्न के इस्तेमाल किया जा सकता है - इम्प्लिसिट
deferredबेहतर विकल्प है। - $q बस बेकार है बस bluebird इस्तेमाल करो, ऊपर देखो।
- उल्लेखनीय बात: Bluebird के बेंचमार्क बेस्ट-केस टेस्ट हैं, इसलिए अगर तुम जटिल और फैंसी प्रॉमिस चेन बना रहे हो तो इसका ध्यान रखना।
Java बनाम JavaScript
रेट लिमिटिंग / डिबाउंसिंग / थ्रॉटलिंग
- JavaScript में David Walsh ने 20 लाइन से कम में डिबाउंस इम्प्लीमेंट किया!
- Java में, JDebounce नामक लाइब्रेरी काफी जटिल है और ~500+ लाइनों की है।
- _ दोनों की तुलना करने पर: _
- JavaScript वाला तरीका तेज़ है और शानदार सरलता हासिल करने के लिए फर्स्ट-क्लास फंक्शंस का उपयोग करता है।
- वहीं Java में मूविंग पार्ट्स काफी ज़्यादा हैं, कॉम्पाइल-टाइम पर व्यवहार लागू करने के लिए एनोटेशन्स का इस्तेमाल होता है, और मज़े के लिए ढेर सारा XML भी है!