рдХрд╛рдЫреЗ рдореЗрдВ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд┐рдХрд╛рд╕

рдХреИрдЪреЗ рдореЗрдВ, рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдХ рд╕рдордп рд▓реВрдк рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢реИрд▓реА рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд, рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреНрдпрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЛрдб рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рд╕рдордп рдореЗрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд▓реЗрдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╕реАрдорд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рди рдХрд░реЗрдВ, рдПрдХ рдЗрдЯреЗрд░реЗрдЯрд░ рди рдмрдирд╛рдПрдВ, рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рди рдХрд░реЗрдВред рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред
рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ , рдФрд░ рдпрд╣ рдирд╣реАрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред
( c ) 1800-рд╕реВрдЪрдирд╛
рдЖрдЗрдП Cach├й рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред

рдЙрдЪреНрдЪ-рдСрд░реНрдбрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЖрдк рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
[2, 3, 5, 7, 11, 13, 17].forEach(function(i) { console.log(i); }); 
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЗрдЯрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди - forEach рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рдПрдХ рдЖрджрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
 set i = collection.Next("") while (i '= "") { set item = collection.GetAt(i) w item,! set i = collection.Next(i) } 


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

рдЖрдЗрдП рдПрдХ рд╡рд░реНрдЧ fp.Function рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдорд▓ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╣реИред
 Class fp.Function [ Abstract ] { Method execute(item As %Numeric) [ Abstract ] {} } 


рдЕрдм рд╣рдо рдЗрд╕ "рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - fp.PrintlnFunction рд╡рд░реНрдЧред
 Class fp.PrintlnFunction Extends (fp.Function, %RegisteredObject) { Method execute(item As %Numeric) { w item,! } } 


рдареАрдХ рд╣реИ, рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдореВрд▓ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред
 set function = ##class(fp.PrintlnFunction).%New() set i = list.Next("") while (i '= "") { set item = list.GetAt(i) do function.execute(item) set i = list.Next(i) } 


рдЕрдм рд╕рдВрдЧреНрд░рд╣ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рдПрдХ IterableStream рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВред
 Class fp.IterableStream Extends %RegisteredObject { Property iterator As %Collection.AbstractIterator [ Private ]; Method %OnNew(iterator As %Collection.AbstractIterator) As %Status [ Private, ServerOnly = 1 ] { set ..iterator = iterator return $$$OK } Method forEach(function As Function) { set i = ..iterator.Next("") while (i '= "") { set item = ..iterator.GetAt(i) do function.execute(item) set i = ..iterator.Next(i) } } } 


рдЕрдм рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 do ##class(IterableStream).%New(list).forEach(##class(PrintlnFunction).%New()) 


рдЕрдм рдЖрдк рд▓реВрдк рд░реИрдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВред
 Class fp.Streams { ClassMethod on(iterator As %Collection.AbstractIterator) As IterableStream { return ##class(IterableStream).%New(iterator) } } 


рддрдм рдЖрдк рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 do ##class(Streams).on(list).forEach(##class(PrintlnFunction).%New()) 


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╕рдорд╕реНрдпрд╛ рдХреЛ рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдВ, рдирдИ рдХрдХреНрд╖рд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреА рд╣реИрдВред рд╣рд╛рдВ, рдЕрдзрд┐рдХ рдХреЛрдб рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рдерд╛ред рд╡рд╣ рд╣рдореЗрдВ рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдирдХ Cach├й рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди , рд╕реНрдЯреНрд░реАрдо , IterableStream рдЬреИрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рд╣реЛрдВрдЧреА, рддреЛ рд╡рд╣ рд╕рдм PrintlnFunction рдХреНрд▓рд╛рд╕ рдмрдирд╛рдирд╛ рдерд╛ред

рдЦреИрд░, рдореИрдВрдиреЗ рдХреИрдЪ рдореЗрдВ рдШреЛрд╖рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдореНрдорд╛рдирд┐рдд рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд┐рдПред рд╕рднреА рдХреЛ рд╣реИрдкреНрдкреА рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ!

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


All Articles