קסם 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) 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 החזקה.
- ספרייה או לא, דפדפנים מודרניים תומכים ב-Promise כבר שנים.
- ניתן להשתמש בהבטחות ללא תבניות מטורפות -
deferredמרומז עדיף. - $q פשוט גרוע פשוט תשתמש ב-bluebird, ראה לעיל.
- כדאי לציין: ה-Benchmarks של Bluebird הם מבחני מקרה מיטבי, אז שים לב אם אתה עושה שרשראות הבטחות מפוארות ומטורפות
Java לעומת JavaScript
הגבלת קצב / דיבונסינג / תרוטלינג
- ב-JavaScript דייוויד וולש יישם debounce בפחות מ-20 שורות!
- ב-Java, JDebounce, ספרייה שהיא הרבה יותר מסובכת, בכ-500+ שורות.
- _ השוואה בין השניים: _
- ה-JavaScript מהיר ומשתמש בפונקציות ממחלקה ראשונה כדי להשיג פשטות מבריקה.
- בעוד של-Java יש הרבה יותר חלקים נעים, הערות (annotations) משמשות להחלת התנהגות בזמן קומפילציה, ויש טונות של XML, רק בשביל הכיף!