معرفی Rivets.js
برای این کار از پلاگین jQuery.pastable استفاده شده است.
n general terms, caching takes place where the frequently-used data is stored, so that the application can quickly access the data rather than accessing the data from the source. Caching can improve the performance and scalability of the application dramatically and can help us to remove the unnecessary requests from the external data sources for the data that changes infrequently.
دوره 2 ساعته سیشارپ برای مبتدیها
C# for Beginners | Full 2-hour course - YouTube
00:00:00 – Start
00:00:09 – What is C#
00:01:27 – C#: Hello World
00:06:01 – C#: The Basics of Strings
00:14:35 – C#: Searching Strings
00:17:27 – C#: Numbers and Integer Math
00:22:04 – C#: Numbers and Integer Precision
00:27:32 – C#: Numbers and Decimals
00:33:10 – C#: Branches (if)
00:44:29 – C#: “Hello World” Explained
00:50:29 – C#: What are Loops?
00:57:42 – C#: Combining Branches and Loops
01:04:34 – C#: Arrays, List, and Collections
01:15:09 – C#: Sort, Search, and Index Lists
01:22:08 – C#: Lists of Other Types
01:29:51 – C#: Debugging
01:34:30 – C#: Object Oriented Programming – Objects and Classes
01:47:20 – C#: Object Oriented Programming – Methods and Members
01:56:02 – C#: Object Oriented Programming – Methods and Exceptions
02:03:00 – C#: Object Oriented Programming – Catching Exceptions
Kendo UI Q3 2014 منتشر شد
Generators در ES 6
یک نمونه مثال ابتدایی از Generators را در کدهای زیر مشاهده میکنید:
function* generator () { yield 1; // pause yield 2; // pause yield 3; // pause yield 'done?'; // done }
let gen = generator(); // [object Generator] console.log(gen.next()); // Object {value: 1, done: false} console.log(gen.next()); // Object {value: 2, done: false} console.log(gen.next()); // Object {value: 3, done: false} console.log(gen.next()); // Object {value: 'done?', done: false} console.log(gen.next()); // Object {value: undefined, done: true} console.log(gen.next()); // Object {value: undefined, done: true}
و یا میتوان بجای فراخوانی دستی متد next، از حلقهی جدید for of نیز برای کار با آنها استفاده کرد:
for (let val of generator()) { console.log(val); // 1 // 2 // 3 // 'done?' }
function* random (max) { yield Math.floor(Math.random() * max) + 1; } function* random1_20 () { while (true) { yield* random(20); } } let rand = random1_20(); console.log(rand.next()); console.log(rand.next());
فقط در این حالت بجای yield معمولی از *yield استفاده میشود. از *yield برای کار با هر نوع Iterator ایی میتوان استفاده کرد:
function* multiplier (value) { yield value * 2; yield value * 3; yield value * 4; yield value * 5; } function* trailmix () { yield 0; yield* [1, 2]; yield* [...multiplier(2)]; yield* multiplier(3); }
کاهش مصرف حافظهی برنامه با استفاده از Generators
در مثال زیر، قرار است لیستی از rows بازگشت داده شود. در اینجا یک آرایه تشکیل شده و هربار اطلاعاتی به آن push میشود و در نهایت این آرایه بازگشت داده خواهد شد:
function splitIntoRows(icons, rowLength) { var rows = []; for (var i = 0; i < icons.length; i += rowLength) { rows.push(icons.slice(i, i + rowLength)); } return rows; }
function* splitIntoRows(icons, rowLength) { for (var i = 0; i < icons.length; i += rowLength) { yield icons.slice(i, i + rowLength); } }
روشهایی برای خاموش کردن Generators
Generators علاوه بر متد next، دارای متدهای return و throw نیز هستند.
فراخوانی (generator.throw(error همانند این است که در بین کار، به متدی برخوردهایم که استثنایی را صادر کردهاست و سبب خاتمهی کار Generator شدهاست.
اگر متد return آنها فراخوانی شود، کار Generator پایان مییابد (خاصیت done شیء بازگشتی بلافاصله true میشود) و فراخوانی next، پس از آن، دیگر اثری نخواهد داشت:
function* numbers () { yield 1 yield 2 yield 3 } var g = numbers() console.log(g.next()) // <- { done: false, value: 1 } console.log(g.return()) // <- { done: true } console.log(g.next()) // <- { done: true }, as we know
function* numbers () { yield 1 yield 2 return 3 yield 4 } console.log([...numbers()]) // <- [1, 2]
اگر به متد return خود Generator، پارامتری ارسال شود، این مقدار، مقدار نهایی بازگشت داده شده خواهد بود:
function* numbers () { yield 1 yield 2 return 3 yield 4 } var g = numbers() console.log(g.next()) // <- { done: false, value: 1 } console.log(g.return(5)) // <- { done: true, value: 5 } console.log(g.next()) // <- { done: true }
در حالتیکه به متد return پارامتری ارسال میشود، قسمت finally بدنهی try/finally نوشته شده حتما اجرا خواهد شد و سپس کار خاتمه پیدا میکند:
function* numbers () { yield 1 try { yield 2 } finally { yield 3 yield 4 } yield 5 } var g = numbers() console.log(g.next()) // <- { done: false, value: 1 } console.log(g.next()) // <- { done: false, value: 2 } console.log(g.return(6)) // <- { done: false, value: 3 } console.log(g.next()) // <- { done: false, value: 4 } console.log(g.next()) // <- { done: true, value: 6 }