سحر جافا سكريبت
الأمرية مقابل التكرارية مقابل الوظيفية
أمرّي مقابل عودي مقابل وظيفي
[ قيد الإعداد ]
// 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 القوية.
- سواء باستخدام مكتبة أم لا، المتصفحات الحديثة تدعم Promise منذ سنوات.
- يمكن استخدام الوعود بدون أنماط معقدة - استخدام
deferredالضمني هو الأفضل. - $q سيء جدًا فقط استخدم bluebird، انظر أعلاه.
- جدير بالذكر: معايير Bluebird هي اختبارات في أفضل الحالات، لذا انتبه إذا كنت تستخدم سلاسل وعود معقدة جدًا.
جافا مقابل جافا سكريبت
تحديد المعدل / إزالة الارتداد / الخنق
- في جافا سكريبت، نفذ David Walsh دالة debounce في أقل من 20 سطرًا!
- في جافا، JDebounce، مكتبة أكثر تعقيدًا بكثير، بحوالي 500+ سطر.
- _ مقارنة بين الاثنين: _
- جافا سكريبت سريعة وتستخدم دوال من الدرجة الأولى لتحقيق بساطة رائعة.
- بينما جافا لديها أجزاء متحركة أكثر بكثير، تُستخدم التعليقات التوضيحية لتطبيق السلوك في وقت الترجمة، وهناك كمية هائلة من XML، فقط للمتعة!