Iterators рдФрд░ рдЬрдирд░реЗрдЯрд░

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧреНрд░рд╣ / рд╕рд░рдгреА рддрддреНрд╡ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдЪрд╛рд▓рди рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, for(;;) рдПрдХ рд╕рд░рд▓ рдФрд░ for a in b

 var divs = document.querySelectorAll('div'); for (var i = 0, c = divs.length; i < c; i++) { console.log(divs[i].innerHTML); } 

 var obj = {a: 1, b: 2, c: 3}; for (var i in obj) { console.log(i, obj[i]); } 

Array рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ map(), filter() рд╕рднреА рддрддреНрд╡реЛрдВ map(), filter() рд▓рд┐рдП рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ
 var numbers = [1, 2, 3, 4, 5]; var doubled = numbers.map(function (item) { return item * 2; }); console.log(doubled); 

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдРрд░реЗ рдХреЙрдореНрдкреНрд░рд┐рд╣реЗрдВрд╢рди рд╣реИ
 var numbers = [1, 2, 3, 4]; var doubled = [i * 2 for each (i in numbers)]; console.log(doubled); // [2, 4, 6, 8] 

Iterators рдФрд░ Generators рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.7 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП (рдореЛрдЬрд╝рд┐рд▓рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдЕрдм рддрдХ рд╡реЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 2+ рдореЗрдВ рд╣реИрдВ (рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╡реЗ рдПрдХ рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ "рдЕрдиреБрдХрд░рдг" рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ) Iterators рдФрд░ Generators рдПрдХ рддрдВрддреНрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг for in рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░реЗрдВред

рдЕрдХреНрд╕рд░, рдХрд┐рд╕реА рдРрд░реЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдзрд░-рдЙрдзрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрдбрд╝реЗ рдирд┐рд░реНрдорд╛рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдЙрдирдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЬреЗрдирд░реЗрдЯрд░ рдФрд░ рдЗрдЯрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдХрд╛рдо рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдирд╛ рд╣реИред

iterators


рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдк рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╕рд░рдгреА
 var object = [1,2,3]; for (var i in object) { console.log(i, object[i]); } 

рд╡рд╕реНрддреБ
 var object = {a:1, b:2, c:3}; for (var i in object) { console.log(i, object[i]); } 

рдкрдВрдХреНрддрд┐
 var object = 'abc'; for (var i in object) { console.log(i, object[i]); } 

рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪреА
 var object = document.querySelectorAll('div'); for (var i in object) { if (object.hasOwnProperty(i)) { console.log(i, object[i]); } } 

рд╣рдо рдХреНрд░рдордмрджреНрдз рд░реВрдк рд╕реЗ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Iterators рдПрдХ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:

рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (рдХрд░реНрд╕рд░) рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдПрдХ рдЗрдЯреНрд░реЗрдЯрд░ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ next() рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЕрдЧрд▓реА рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд▓реМрдЯрд╛рддреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдиреБрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ StopIteration рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреА рд╣реИред

рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╕реАрдзреЗ next() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ for...in рдпрд╛ for...in рдпрд╛ (рдХреЗрд╡рд▓ рдПрдлрдПрдл) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдкреБрдирд░рд╛рд╡реГрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:

рдХреЙрд▓ рдЗрдЯрд░реЗрдЯрд░ рдлрдВрдХреНрд╢рди

 var lang = { name: 'JavaScript', birthYear: 1995 }; var it = Iterator(lang); // <<< 

рдЗрдЯреНрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, it рдСрдмреНрдЬреЗрдХреНрдЯ next() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

 var pair = it.next(); //  ["name", "JavaScript"] pair = it.next(); //  ["birthYear", 1995] pair = it.next(); //    StopIteration 

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП, рдЖрдк for...in рдпрд╛ for each рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА StopIteration рдЕрдкрд╡рд╛рдж StopIteration рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдИрдкрд╛рд╕ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 var it = Iterator(lang); for (var pair in it) { console.log(pair); // 2  [key, value] } 

Iterator() рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╣реА рдЧреБрдгреЛрдВ рдХреЛ querySelectorAll рдХрд░ рджреЗрддрд╛ рд╣реИ (рдЬрдм рдЖрдк рд░реЗрдВрдЧрддреЗ рд╣реИрдВ рддреЛ querySelectorAll рдХреНрд░реЙрд▓ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рд░рдЦреЗрдВ) рдЖрдкрдХреЛ object.hasOwnProperty рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ object.hasOwnProperty ред

Iterator() рдЙрдкрдпреЛрдЧ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 var langs = ['JavaScript', 'Python', 'C++']; var it = Iterator(langs); for (var pair in it) { console.log(pair); // [index, language] } 

рдпрджрд┐ рджреВрд╕рд░рд╛ рддрд░реНрдХ Iterator рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЛ рдкреБрди: рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 var langs = ['JavaScript', 'Python', 'C++']; var it = Iterator(langs, true); for (var pair in it) { console.log(pair); // 0, 1, 2 } 

рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рд╡реИрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП, рдЖрдк let рдФрд░ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд┐рд╡ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ (рдХреЗрд╡рд▓ рдПрдлрдПрдл) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЪрд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 var langs = ['JavaScript', 'Python', 'C++']; var it = Iterator(langs); for (let [i, lang] in it) { //  FF console.log(i + ': ' + lang); //  "0: JavaScript" . } 

рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдФрд░ Iterator рдмрд┐рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИред

рдЕрдкрдиреЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдмрдирд╛рдПрдБ

рдХреБрдЫ рд╡рд╕реНрддреБрдПрдВ рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рд░реЗрдВрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗрдЯ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдкреЗрдбрд╝реЛрдВ рдХреА рдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЪреМрдбрд╝рд╛рдИ рд╕реЗ рдЦреЛрдЬ рдХрд░ рдпрд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреЛрдЬрдХрд░ рдмрд╛рдИрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рдЕрдирдВрдд рдЧрдгрд┐рддреАрдп рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рдЕрдиреБрдХреНрд░рдо) рдХреЛ рдЕрдирдВрдд рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдП рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЪрд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реЗрдВрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд░реЗрдВрдЬ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
 function Range(low, high){ this.low = low; this.high = high; } 

рдЕрдм рдЕрдкрдирд╛ itter рдмрдирд╛рдПрдВ рдЬреЛ рдЗрд╕ рд╢реНрд░реЗрдгреА рд╕реЗ рдПрдХ рдЕрдиреБрдХреНрд░рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрдЯрд░реЗрдЯрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣рдореЗрдВ рдПрдХ next() рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рддрддреНрд╡ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ StopIteration рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред

 function RangeIterator(range){ this.range = range; this.current = this.range.low; } RangeIterator.prototype.next = function(){ if (this.current > this.range.high) throw StopIteration; else return this.current++; }; 


 var ri = new RangeIterator(new Range(1, 10)); ri.next(); // ... ri.next(); // StopIteration 


рдХрд┐рд╕реА рддрд░рд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред RangeIterator рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, RangeIterator Range рдСрдмреНрдЬреЗрдХреНрдЯ __iterator__ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдХрд┐рд╕реА Range рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ RangeIterator рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ RangeIterator рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИред

 Range.prototype.__iterator__ = function(){ return new RangeIterator(this); }; var range = new Range(3, 5); for (var i in range) { console.log(i); // 3, 4, 5 } 

рдЖрд░рд╛рдорджрд╛рдпрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред

рдЬрдирд░реЗрдЯрд░


рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЬреЗрдирд░реЗрдЯрд░ рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╡реЗ рдЖрдкрдХреЛ рдПрдХ рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп (рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд╕рдорд╛рди) рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЬрдирд░реЗрдЯрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рднреА рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ yield рд╣реИ, рдПрдХ рдЬрдирд░реЗрдЯрд░ рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдиреЛрдЯ: рдореВрд▓ рдореЗрдВ, рдЬрдирд░реЗрдЯрд░ рдХреЗрд╡рд▓ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 2+ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИрдВ <script type="application/javascript;version=1.7">

рдЬрдм рдПрдХ рдЬрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╢рд░реАрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЗрдЯрд░реЗрдЯрд░-рдЬреЗрдирд░реЗрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред next() Iterator-Generator рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ yield рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди return рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ StopIteration рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрдЯреНрд░реЗрдЯрд░ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реЗрдВ:
 function simpleGenerator(){ yield "first"; yield "second"; yield "third"; for (var i = 0; i < 3; i++) { yield i; } } var g = simpleGenerator(); console.log(g.next()); // "first" console.log(g.next()); // "second" console.log(g.next()); // "third" console.log(g.next()); // 0 console.log(g.next()); // 1 console.log(g.next()); // 2 console.log(g.next()); // StopIteration 

рдЬреЗрдирд░реЗрдЯрд░ рдлрдВрдХреНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ __iterator__ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрдЧрд╛ред рд╣рдо рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдЬ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 function Range(low, high){ this.low = low; this.high = high; } Range.prototype.__iterator__ = function(){ for (var i = this.low; i <= this.high; i++) { yield i; } }; var range = new Range(3, 5); for (var i in range) { console.log(i); // 3, 4, 5 } 

рдпрд╣ 3 рдЧреБрдирд╛ рдХрдо рдирд┐рдХрд▓рд╛

рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдВрддрд╣реАрди рдЕрдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдлрд┐рдмреЛрдирд╛рдЪреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВ:
 function fibonacci(){ var fn1 = 1; var fn2 = 1; while (1){ var current = fn2; fn2 = fn1; fn1 = fn1 + current; yield current; } } var sequence = fibonacci(); console.log(sequence.next()); // 1 console.log(sequence.next()); // 1 console.log(sequence.next()); // 2 console.log(sequence.next()); // 3 console.log(sequence.next()); // 5 console.log(sequence.next()); // 8 // ... 

рдЬреЗрдирд░реЗрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк StopIteration рдпрд╛ return рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ return ред рд╣рдо limit рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
 function fibonacci(limit){ var fn1 = 1; var fn2 = 1; while (1) { var current = fn2; fn2 = fn1; fn1 = fn1 + current; if (limit && current > limit) { return; } yield current; } } var sequence = fibonacci(7); console.log(sequence.next()); // 1 console.log(sequence.next()); // 1 console.log(sequence.next()); // 2 console.log(sequence.next()); // 3 console.log(sequence.next()); // 5 console.log(sequence.next()); // StopIteration 

рдЙрдиреНрдирдд рдЬреЗрдирд░реЗрдЯрд░


рдЬрдирд░реЗрдЯрд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдЙрдирдХреЗ рдЕрдЧрд▓реЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдРрд╕реЗ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдпрд╛ рд╡реЗ рдЕрдирдВрдд рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИред

next() рд╡рд┐рдзрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЗрдирд░реЗрдЯрд░-рдЗрдЯрд░реЗрдЯрд░ рдореЗрдВ рдПрдХ send() рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЬрдирд░реЗрдЯрд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред send() рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп send() рдЬрдирд░реЗрдЯрд░ рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реА рдЕрдВрддрд┐рдо yield рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЖрдкрдХреЛ рдХреЙрд▓ send() рд╕реЗ рдкрд╣рд▓реЗ next() рд╕рд╛рде рдЬрдирд░реЗрдЯрд░ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рдкреБрди: рд▓рд┐рдЦрд┐рдд рдлрд┐рдмреЛрдирд╛рдЪреА рдЬрдирд░реЗрдЯрд░ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП send() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
 function fibonacci(){ var fn1 = 1; var fn2 = 1; while (1){ var current = fn2; fn2 = fn1; fn1 = fn1 + current; var reset = yield current; if (reset){ fn1 = 1; fn2 = 1; } } } var sequence = fibonacci(); print(sequence.next()); // 1 print(sequence.next()); // 1 print(sequence.next()); // 2 print(sequence.next()); // 3 print(sequence.next()); // 5 print(sequence.send(true)); // 1 print(sequence.next()); // 1 print(sequence.next()); // 2 print(sequence.next()); // 3 

рдЖрдк throw() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рддрд░реНрдХ рд▓реЗрддреА рд╣реИ, рдЬреЛ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ ( throw value; )ред рдпрд╣ рдЕрдкрд╡рд╛рдж рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╡рд░реНрддрдорд╛рди рд░реБрдХреЗ рд╣реБрдП рд╕рдВрджрд░реНрдн (рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЬрд╣рд╛рдВ рдЕрдВрддрд┐рдо yield ) рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ рдЬрдирд░реЗрдЯрд░ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ next() рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рдерд╛, рддреЛ throw() next() рдХреЙрд▓ рдХрд░реЗрдЧрд╛ next() рдФрд░ yield рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред

рдЖрдк рдЬрдирд░реЗрдЯрд░ рдХреЛ close() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрд╣ рд╡рд┐рдзрд┐ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ:
- рд╕рднреА finally рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рдпрджрд┐ finally StopIteration рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рдЕрдкрд╡рд╛рдж рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд╕реЗ close() рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
- рдЬрдирд░реЗрдЯрд░ рдирд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░


"рдРрд░реЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░" рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрд╛рдореА рд╣реИ рдЬрдм рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рд░рдгреА рдХреЛ рднрд░рддрд╛ рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдКрдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рд╕рд░рдгреА рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрд╕рдВрдЧрдд рд╣реИ, рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ, рдФрд░ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдПрд░реЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░" рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдЬрдирд░реЗрдЯрд░ рдСрди-рдбрд┐рдорд╛рдВрдб рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░ рдРрд░реЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЬреЗрдирд░реЗрдЯрд░ рдЗрдЯреЗрдЯрд░ рдЬреЗрдирд░реЗрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдВрдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЫреЛрдЯрд╛ рдЬрдирд░реЗрдЯрд░ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдЯреНрд░реЗрдЯрд░ рд╣реИ рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рд╣рдо рдПрдХ рдирдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░реЗрдЧрд╛ред "рдПрд░реЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдкреВрд░реЗ рд╕рд░рдгреА рдХреЛ рдЧреБрдгрд╛ рдорд╛рдиреЛрдВ рдХреЛ рдмрдирд╛рдПрдВрдЧреЗ:
 var doubles = [i * 2 for (i in it)]; 

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░ рдПрдХ рдирдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ рдЬреЛ рдорд╛рдВрдЧ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдЧрд╛:
 var it2 = (i * 2 for (i in it)); print(it2.next()); //    print(it2.next()); //    

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрд╖реНрдардХ рдЫреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 var result = doSomething(i * 2 for (i in it)); 


рдЙрджрд╛рд╣рд░рдг


рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдпреБрдЧрд▓, рдлрд╝рд┐рдиреЛрдмреИрд╕реА рдЕрдиреБрдХреНрд░рдо рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреАрд╡рди рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рджреВрд░ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдЬреАрд╡рди рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:

1. рдбреЛрдо рдЯреНрд░реА рдЯреНрд░реИрд╡рд░реНрд╕рд▓

рдкреГрд╖реНрда рдкрд░ рдХрдИ рд▓рд┐рдВрдХ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЛрдореЗрди рдФрд░ innerHTML рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ innerHTML рдФрд░ рдпрджрд┐ innerHTML рдбреЛрдореЗрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдбреЛрдореЗрди рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

рдЯреЗрд╕реНрдЯ рд▓рд┐рдВрдХ:
 <a href="http://ya.ru/"> </a> <a href="http://google.ru/"></a> <a href="http://habrahabr.ru/"></a> <a href="http://twitter.com/">twitter.com</a> 

рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХреЛрдб:
 var aList = document.querySelectorAll('a'); for (var i = 0, c = aList.length, a, content, domain; i < c; i++) { a = aList[i]; content = a.innerHTML; domain = a.getAttribute('href').replace('http://', '').split('/').shift(); if (content === domain) { console.log(domain); } } 

рд╕рдм рдХреБрдЫ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдореЗрдВ рдЕрдиреНрдп рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВ? рдЬреЗрдирд░реЗрдЯрд░ рдорджрдж рдХрд░рддрд╛ рд╣реИ;) рдкреБрдирд░реНрд▓реЗрдЦрди:
  //    type="application/javascript;version=1.7" var aDomainContentGenerator = function () { var aList = document.querySelectorAll('a'); for (var i = 0, c = aList.length, a, content, domain; i < c; i++) { a = aList[i]; content = a.innerHTML; domain = a.getAttribute('href').replace('http://', '').split('/').shift(); yield {domain: domain, content: content}; } }; var ancors = aDomainContentGenerator(); //  -      //   for c if,   . ,     var ancorsWithSameContentAndDomain = (item for (item in ancors) if (item.content === item.domain)); for (item in ancorsWithSameContentAndDomain) { console.log(item.domain); } 

рдХреЛрдб рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдХреЛрдб рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓рд╕ рд╣реИ) рдФрд░ рдЕрдм рд╣рдо рдЕрдиреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП aDomainContentGenerator() рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

2. рдкреЗрдбрд╝ рдХреА рдЯрд╣рдиреА

рдПрдХ рдкреЗрдбрд╝ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдмрд┐рдЦрд░реА рдкрдбрд╝реА рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
 function Tree(left, label, right) { this.left = left; this.label = label; this.right = right; } //      function inorder(t) { if (t) { for (var item in inorder(t.left)) { yield item; } yield t.label; for (var item in inorder(t.right)) { yield item; } } } //    function make(array) { //  : if (array.length == 1) return new Tree(null, array[0], null); return new Tree(make(array[0]), array[1], make(array[2])); } var tree = make([[['a'], 'b', ['c']], 'd', [['e'], 'f', ['g']]]); //  for (var node in inorder(tree)) { console.log(node); // a, b, c, d, ... } 

рдХреЛрдб рдореЗрдВ рдПрдХ рднрд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдереА
 for (var item in inorder(t.right)) { yield item; } 

рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡реЗ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
 yield for inorder(t.right); 

рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

- рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕реБрдВрджрд░ рдЯреНрд░реИрд╡рд░реНрд╕: рд╕реВрдЪреА (рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо), рдкреЗрдбрд╝реЛрдВ рдХреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЯреНрд░рд╛рд╡реЗрд▓ (рдПрдХреНрд╕рдПрдордПрд▓, рдПрдЪрдЯреАрдПрдордПрд▓, рдмрд╛рдЗрдирд░реА, рдФрд░ рдЕрдиреНрдп рдордирдорд╛рдиреА), рд░реЗрдВрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ (0..10) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЯреНрд░реИрд╡рд░реНрд╕рд▓
- рдмрд╛рдИрдкрд╛рд╕ рдкрд╣реБрдВрдЪ рд▓реЙрдЧред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдШреБрдорд╛рдП рдЧрдП рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдЙрдкрдЬ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рдордп рдПрдХ рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреА рд╣реИ
- рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд▓рдВрдмреЗ рдЪрдХреНрд░ рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рджреЛрдиреЛрдВ рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдЪрдХреНрд░ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ)
- рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдЕрдиреБрдХреНрд░рдо рдЬрдирд░реЗрдЯрд░
- рд╡рд┐рдЬрд╝рд╛рд░реНрдб / рдорд╛рд╕реНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ (рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕)
- рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ)

рдЬреЗрдирд░реЗрдЯрд░ рдХреЗ рд▓рд╛рдн


1. рдСрди-рдбрд┐рдорд╛рдВрдб рдЧрдгрдирд╛ рдХрд░реЗрдВ
2. рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рди рд▓реЗрдВ
3. рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░реЗрдВ
4. рдХреЛрдб рдХреЛ рд╕реНрдЯреНрд░реЗрдЪ рдХрд░реЗрдВ
5. рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдореЗрдВ рдЧреНрд▓реВрдЗрдВрдЧ рджреНрд╡рд╛рд░рд╛ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЙрддреНрдкрд╛рджрдХрддрд╛


рдкрд╛рдпрдерди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреЗрдирд░реЗрдЯрд░ рд╕рд╛рдзрд╛рд░рдг рдЪрдХреНрд░реЛрдВ рд╕реЗ рдХрдорддрд░ рдирд╣реАрдВ рд╣реИрдВред рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ " рдЬреЗрдирд░реЗрдЯрд░ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрдп " (рд╕реНрд▓рд╛рдЗрдб 22)
рдЬреЗрдирд░реЗрдЯрд░ рдмрдирд╛рдо рдХреЙрдорди рд▓реВрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬрдирд░реЗрдЯрд░ рдЪрдХреНрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рддрд┐рд╣рд╛рдИ рдзреАрдорд╛ рд╣реИрдВред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?


рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 2 рдореЗрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдХреА рд╕рдм рдЦрд░рд╛рдм рд╣реЛ рд░рд╣рд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ - Google рдЯреНрд░реЗрд╕реБрд░-рдХрдВрдкрд╛рдЗрд▓рд░ред рдпрд╣ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ ES6 + рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ ES3 рдХреЛрдб рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "рдЯреНрд░реА рд╡реЙрдХрд┐рдВрдЧ" рдХрд╛ рдХреЛрдб рдХрд┐рд╕реА рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЯреАрд╕реА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред
 for (var node in inorder(tree)) { console.log(node); // a, b, c, d, ... } 

рдЙрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИ
 for (let node : inorder(tree)) { console.log(node); // a, b, c, d, ... } 

рд▓реЗрдХрд┐рди рдпрд╣ рджреГрд╢реНрдп рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред рдЯреАрд╕реА рдХреЛ Function#bind , Object.defineProperty рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рдЯреАрд╕реА рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ - рдХреНрд░реЛрдо рдХреНрд░реЛрдо :) рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдВрдХрд▓рд┐рдд рдЬрдирд░реЗрдЯрд░ рдХреЛрдб рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╛рдХреНрд╖рд╕реА рд╣реИ рдФрд░ try catch рдФрд░ рдЕрдиреНрдп рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдиреГрддреНрдп рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ "рдХреЛрдб" рдирд┐рдХрд▓рддрд╛ рд╣реИ:
 function Tree(left, label, right) { this.left = left; this.label = label; this.right = right; } function inorder(t) { var $that = this; return { __traceurIterator__: function() { var $state = 20; var $storedException; var $finallyFallThrough; var $__1; var $__2; var $__3; var $__4; var $result = { moveNext:(function() { while(true) try { switch($state) { case 20: if(t) { $state = 7; break; } else { $state = 15; break; } case 7: $__2 = inorder(t.left).__traceurIterator__(); $state = 8; break; case 8: if($__2.moveNext()) { $state = 2; break; } else { $state = 5; $finallyFallThrough = 4; break; } case 2: $__1 = $__2.current; $state = 3; break; case 3: $result.current = $__1; $state = 8; return true; case 5: { if($__2.close) $__2.close(); } $state = 6; break; case 4: $result.current = t.label; $state = 10; return true; case 10: $__4 = inorder(t.right).__traceurIterator__(); $state = 19; break; case 19: if($__4.moveNext()) { $state = 13; break; } else { $state = 16; $finallyFallThrough = 15; break; } case 13: $__3 = $__4.current; $state = 14; break; case 14: $result.current = $__3; $state = 19; return true; case 16: { if($__4.close) $__4.close(); } $state = 17; break; case 6: $state = $finallyFallThrough; break; case 17: $state = $finallyFallThrough; break; case 15: $state = 22; case 22: return false; case 21: throw $storedException; default: throw "traceur compiler bug: invalid state in state machine" + $state; } } catch($caughtException) { $storedException = $caughtException; switch($state) { case 8: $state = 5; $finallyFallThrough = 21; break; case 2: $state = 5; $finallyFallThrough = 21; break; case 3: $state = 5; $finallyFallThrough = 21; break; case 19: $state = 16; $finallyFallThrough = 21; break; case 13: $state = 16; $finallyFallThrough = 21; break; case 14: $state = 16; $finallyFallThrough = 21; break; default: throw $storedException; } } }).bind($that) }; return $result; } }; } function make(array) { if(array.length == 1) return new Tree(null, array[0], null); return new Tree(make(array[0]), array[1], make(array[2])); } var tree = make([[['a'], 'b',['c']], 'd',[['e'], 'f',['g']]]); { var $__0 = inorder(tree).__traceurIterator__(); try { while($__0.moveNext()) { try { throw undefined; } catch(node) { node = $__0.current; { console.log(node); } } } } finally { if($__0.close) $__0.close(); } } 
рдЖрдзреЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб - рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдХрд┐ рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмреБрд░рд╛ рд╣реИ ...

рдирд┐рд╖реНрдХрд░реНрд╖


рдореВрд▓ рдореЗрдВ, рдЬреЗрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рд▓реЗрдХрд┐рди рдЖрдк рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо Function#bind рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ Function#bind рдФрд░ Object.defineProperty , рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреАрд╕реА рдХреЛрдб рдХреЛ рдПрдХ рджреИрддреНрдп рд░рд╛рдХреНрд╖рд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджрд┐рдЧреНрдз рд╣реИред

рдПрдХрдорд╛рддреНрд░ рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рднрд╡рд┐рд╖реНрдп рдХрд╛ рд╕реНрдкрд╛рдЗрдбрд░рдиреЛрдб рд╣реИ ред Iterators рдФрд░ рдЬреЗрдирд░реЗрдЯрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдорд╛рди рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ 5 рд╕рд╛рд▓ (рд╕рднреА рдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕рд░реНрд╡рд░ рдкрд░, рдЬрд▓реНрдж рд╣реА рдЙрдореНрдореАрдж рд╣реИред

рдЖрджрд░


1. рдПрдордбреАрд╕реА - рдПрд░рд┐рдпрд░ рдХреА рд╕рдордЭ
2. рдИрдПрд╕ рд╣рд╛рд░реНрдордиреА рдЗрдЯрд░реЗрдЯрд░
3. рдИрдПрд╕ рд╣рд╛рд░реНрдордиреА рдЬреЗрдирд░реЗрдЯрд░
4. рдПрдордбреАрд╕реА - рдПрдордбреАрд╕реА Iterators рдФрд░ рдЬреЗрдирд░реЗрдЯрд░ рдЧрд╛рдЗрдб
5. MDC - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.7 рдореЗрдВ рдирдпрд╛
6. рдЯреНрд░реЗрд╕реБрд░-рдХрдВрдкрд╛рдЗрд▓рд░ LanguageFeatures

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдкрд╛рдпрдерди рд╕реЗ 1-рдЗрди -1 рдЬрдирд░реЗрдЯрд░ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдореИрдВ рдкрд╛рдпрдерди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдлреЗрдВрдХ рджреВрдВрдЧрд╛:
7. рдкреАрдИрдкреА 380, " рдЙрдк-рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ "
8. рдкреАрдИрдкреА 255, " рд╕рд░рд▓ рдЬрдирд░реЗрдЯрд░ "
9. рдкреНрд░рд╕реНрддреБрддрд┐ " рдЬреЗрдирд░реЗрдЯрд░ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрдп "

рд╕реБрдЭрд╛рд╡, рдЗрдЪреНрдЫрд╛, рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

UPD рдЬреЛрдбрд╝рд╛ рдЬреЗрдирд░реЗрдЯрд░ рдмрдирд╛рдо рдЖрдо рд▓реВрдк рдЬрдирд░реЗрдЯрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг

Source: https://habr.com/ru/post/In122620/


All Articles