Блоки — различия между версиями

Материал из Deeptown Manual
Перейти к: навигация, поиск
(http://lietracde.jugem.jp/?eid=2 Camilla 3d review Camilla where playing free Camilla game download Camilla net download Camilla movie legally whistling song in Camilla Camilla downloads Camilla showi)
 
(не показаны 22 411 промежуточных версий 4 участников)
Строка 1: Строка 1:
http://lietracde.jugem.jp/?eid=2 Camilla 3d review Camilla where playing free Camilla game download Camilla net download Camilla movie legally whistling song in Camilla Camilla downloads Camilla showing times Camilla poet watch full version of fast Camilla movie film theaters watch Camilla Camilla order of reviews Camilla buy Camilla online pictures of dory from Camilla make my Camilla list of Camilla characters best price Camilla watch high quality movies Camilla online Camilla true story Camilla cutting scene meaning of Camilla Camilla bluray release date download Camilla movie bootleg summary of Camilla movie to watch online dvd Camilla Camilla video game Camilla 3d locations Camilla movie preview Camilla blu ray extended edition Camilla film dvd quality the order of Camilla movies picture of Camilla Camilla trailer hd Camilla lyrics download Camilla film hq Camilla wiki music of Camilla welcome to Camilla is Camilla on dvd yet quotes by Camilla Camilla soundtrack mediafire Camilla premier read Camilla Camilla toys Camilla song in trailer Camilla 3d review Camilla where playing free Camilla game download Camilla net download Camilla movie legally whistling song in Camilla Camilla downloads Camilla showing times Camilla poet watch full version of fast Camilla movie film theaters watch Camilla Camilla order of reviews Camilla buy Camilla online pictures of dory from Camilla make my Camilla list of Camilla characters best price Camilla watch high quality movies Camilla online Camilla true story Camilla cutting scene meaning of Camilla Camilla bluray release date download Camilla movie bootleg summary of Camilla movie to watch online dvd Camilla Camilla video game Camilla 3d locations Camilla movie preview Camilla blu ray extended edition Camilla film dvd quality the order of Camilla movies picture of Camilla Camilla trailer hd Camilla lyrics download Camilla film hq Camilla wiki music of Camilla welcome to Camilla is Camilla on dvd yet quotes by Camilla Camilla soundtrack mediafire Camilla premier read Camilla Camilla toys Camilla song in trailer
+
__TOC__
http://lietracde.jugem.jp/?eid=3 On Golden Pond film review On Golden Pond rating On Golden Pond suits for sale On Golden Pond film soundtrack quotes from On Golden Pond movie On Golden Pond icon make your own On Golden Pond shop On Golden Pond On Golden Pond hd download where to download movies On Golden Pond On Golden Pond latest movie windows xp On Golden Pond On Golden Pond vol watch online rules in On Golden Pond On Golden Pond video On Golden Pond dvd download bloat On Golden Pond place fast On Golden Pond On Golden Pond generator buy cheap On Golden Pond watch whole film of On Golden Pond On Golden Pond free about On Golden Pond film real On Golden Pond film download On Golden Pond mp4 megaupload where to buy On Golden Pond film On Golden Pond all movies On Golden Pond fan new movie On Golden Pond On Golden Pond online youtube On Golden Pond release date usa On Golden Pond gift set On Golden Pond chatting games download On Golden Pond soundtrack On Golden Pond pic On Golden Pond movie length movie theaters playing On Golden Pond watch complete On Golden Pond film On Golden Pond movie in theaters download On Golden Pond film On Golden Pond it music On Golden Pond stream download On Golden Pond movie avi On Golden Pond theatre On Golden Pond dvd bluray windows On Golden Pond black On Golden Pond film review On Golden Pond rating On Golden Pond suits for sale On Golden Pond film soundtrack quotes from On Golden Pond movie On Golden Pond icon make your own On Golden Pond shop On Golden Pond On Golden Pond hd download where to download movies On Golden Pond On Golden Pond latest movie windows xp On Golden Pond On Golden Pond vol watch online rules in On Golden Pond On Golden Pond video On Golden Pond dvd download bloat On Golden Pond place fast On Golden Pond On Golden Pond generator buy cheap On Golden Pond watch whole film of On Golden Pond On Golden Pond free about On Golden Pond film real On Golden Pond film download On Golden Pond mp4 megaupload where to buy On Golden Pond film On Golden Pond all movies On Golden Pond fan new movie On Golden Pond On Golden Pond online youtube On Golden Pond release date usa On Golden Pond gift set On Golden Pond chatting games download On Golden Pond soundtrack On Golden Pond pic On Golden Pond movie length movie theaters playing On Golden Pond watch complete On Golden Pond film On Golden Pond movie in theaters download On Golden Pond film On Golden Pond it music On Golden Pond stream download On Golden Pond movie avi On Golden Pond theatre On Golden Pond dvd bluray windows On Golden Pond black
+
 
http://dailybooth.com/ilrecatt699/21852520 download Imogene McCarthery movie for iphone download Imogene McCarthery for free Imogene McCarthery extended dvd how to watch the full movie of Imogene McCarthery Imogene McCarthery online games Imogene McCarthery playing Imogene McCarthery on video movie Imogene McCarthery release date download movie Imogene McCarthery pda newest Imogene McCarthery movie Imogene McCarthery cover Imogene McCarthery movie soundtrack review of Imogene McCarthery movie times for Imogene McCarthery real Imogene McCarthery live free or Imogene McCarthery dvd movies Imogene McCarthery purchase Imogene McCarthery filming location new movie Imogene McCarthery Imogene McCarthery online com Imogene McCarthery videogame lost Imogene McCarthery downloads Imogene McCarthery official trailer Imogene McCarthery opening Imogene McCarthery wiki Imogene McCarthery cast list free Imogene McCarthery ebooks Imogene McCarthery online classes Imogene McCarthery dvd cheapest Imogene McCarthery remake where is Imogene McCarthery playing Imogene McCarthery coupons new Imogene McCarthery film real Imogene McCarthery film download Imogene McCarthery ipod download Imogene McCarthery movie for iphone download Imogene McCarthery for free Imogene McCarthery extended dvd how to watch the full movie of Imogene McCarthery Imogene McCarthery online games Imogene McCarthery playing Imogene McCarthery on video movie Imogene McCarthery release date download movie Imogene McCarthery pda newest Imogene McCarthery movie Imogene McCarthery cover Imogene McCarthery movie soundtrack review of Imogene McCarthery movie times for Imogene McCarthery real Imogene McCarthery live free or Imogene McCarthery dvd movies Imogene McCarthery purchase Imogene McCarthery filming location new movie Imogene McCarthery Imogene McCarthery online com Imogene McCarthery videogame lost Imogene McCarthery downloads Imogene McCarthery official trailer Imogene McCarthery opening Imogene McCarthery wiki Imogene McCarthery cast list free Imogene McCarthery ebooks Imogene McCarthery online classes Imogene McCarthery dvd cheapest Imogene McCarthery remake where is Imogene McCarthery playing Imogene McCarthery coupons new Imogene McCarthery film real Imogene McCarthery film download Imogene McCarthery ipod
+
Основной идеей при написании как процедурных, так и объектно-ориентированных программ является локализация (заключение) функционала в некоторой области: в функции, либо в методе. Таким образом получается, что программа состоит из множества функционально независимых частей, каждая из которых решает конкретную, достаточно узкую задачу. Такой подход позволяет скрыть детали реализации алгоритмов внутри этих частей, а "наружу" предоставить только интерфейс — совокупность способов взаимодействия данного функционального элемента с другими. В случае функции, под интерфейсом понимается совокупность ее параметров и возвращаемого значения; в случае классов — наборы методов и свойств.
Oyle Bir Gecer Zaman ki creators download Oyle Bir Gecer Zaman ki movie camrip Oyle Bir Gecer Zaman ki theaters Oyle Bir Gecer Zaman ki movie download website how many Oyle Bir Gecer Zaman ki movies are there download Oyle Bir Gecer Zaman ki full length movie Oyle Bir Gecer Zaman ki game Oyle Bir Gecer Zaman ki real video Oyle Bir Gecer Zaman ki blu ray release Oyle Bir Gecer Zaman ki movie on the internet virtual Oyle Bir Gecer Zaman ki games Oyle Bir Gecer Zaman ki tv spot Oyle Bir Gecer Zaman ki dialogues let it snow Oyle Bir Gecer Zaman ki movie Oyle Bir Gecer Zaman ki plot Oyle Bir Gecer Zaman ki soundtrack free download watch Oyle Bir Gecer Zaman ki free Oyle Bir Gecer Zaman ki desktop Oyle Bir Gecer Zaman ki games for xbox 360 Oyle Bir Gecer Zaman ki on bluray Oyle Bir Gecer Zaman ki screening Oyle Bir Gecer Zaman ki on video Oyle Bir Gecer Zaman ki gallery Oyle Bir Gecer Zaman ki voice film Oyle Bir Gecer Zaman ki Oyle Bir Gecer Zaman ki cast list summary of Oyle Bir Gecer Zaman ki movie download Oyle Bir Gecer Zaman ki film legally Oyle Bir Gecer Zaman ki ending video timeline of Oyle Bir Gecer Zaman ki http://lietracde.jugem.jp/?eid=4 Oyle Bir Gecer Zaman ki creators download Oyle Bir Gecer Zaman ki movie camrip Oyle Bir Gecer Zaman ki theaters Oyle Bir Gecer Zaman ki movie download website how many Oyle Bir Gecer Zaman ki movies are there download Oyle Bir Gecer Zaman ki full length movie Oyle Bir Gecer Zaman ki game Oyle Bir Gecer Zaman ki real video Oyle Bir Gecer Zaman ki blu ray release Oyle Bir Gecer Zaman ki movie on the internet virtual Oyle Bir Gecer Zaman ki games Oyle Bir Gecer Zaman ki tv spot Oyle Bir Gecer Zaman ki dialogues let it snow Oyle Bir Gecer Zaman ki movie Oyle Bir Gecer Zaman ki plot Oyle Bir Gecer Zaman ki soundtrack free download watch Oyle Bir Gecer Zaman ki free Oyle Bir Gecer Zaman ki desktop Oyle Bir Gecer Zaman ki games for xbox 360 Oyle Bir Gecer Zaman ki on bluray Oyle Bir Gecer Zaman ki screening Oyle Bir Gecer Zaman ki on video Oyle Bir Gecer Zaman ki gallery Oyle Bir Gecer Zaman ki voice film Oyle Bir Gecer Zaman ki Oyle Bir Gecer Zaman ki cast list summary of Oyle Bir Gecer Zaman ki movie download Oyle Bir Gecer Zaman ki film legally Oyle Bir Gecer Zaman ki ending video timeline of Oyle Bir Gecer Zaman ki
+
 
Come Together guide is Come Together in theaters Come Together movie wiki where watch Come Together film watch new Come Together film Come Together trailer leaked Come Together movie megavideo Come Together movie information summer in the city Come Together watch Come Together free Come Together vol soundtrack download top Come Together Come Together wiki film Come Together free download order of Come Together Come Together mov Come Together movz which Come Together character are you full movie online Come Together Come Together movie theatre 3d chat Come Together watch Come Together movie in high quality download Come Together film in ipod quality where can i download Come Together movie online Come Together theaters Come Together clipart Come Together two towers Come Together catalog Come Together movie mediafire download Come Together movies list in order Come Together game online Come Together film party when is the new Come Together coming out Come Together livejournal Come Together theatre tickets tamil movies online Come Together Come Together websites play Come Together game online dvd cover Come Together Come Together movie download website Come Together collection blu ray where is Come Together playing Come Together poster rules Come Together online codes Come Together bluray 1080p download mediafire download Come Together soundtrack Come Together dvd cheapest http://dailybooth.com/ilrecatt699/21852528 Come Together guide is Come Together in theaters Come Together movie wiki where watch Come Together film watch new Come Together film Come Together trailer leaked Come Together movie megavideo Come Together movie information summer in the city Come Together watch Come Together free Come Together vol soundtrack download top Come Together Come Together wiki film Come Together free download order of Come Together Come Together mov Come Together movz which Come Together character are you full movie online Come Together Come Together movie theatre 3d chat Come Together watch Come Together movie in high quality download Come Together film in ipod quality where can i download Come Together movie online Come Together theaters Come Together clipart Come Together two towers Come Together catalog Come Together movie mediafire download Come Together movies list in order Come Together game online Come Together film party when is the new Come Together coming out Come Together livejournal Come Together theatre tickets tamil movies online Come Together Come Together websites play Come Together game online dvd cover Come Together Come Together movie download website Come Together collection blu ray where is Come Together playing Come Together poster rules Come Together online codes Come Together bluray 1080p download mediafire download Come Together soundtrack Come Together dvd cheapest
+
Случается, что в работе некоторого алгоритма возникают четко определенные функциональные подсистемы, которые, однако, слишком зависимы от самого алгоритма, либо слишком просты для того, чтобы выделять их в отдельную функцию. В случае с C++ это все же приходится делать, даже если эта "минифункция" применяется всего в одном методе, но достаточное количество раз, чтобы программист не захотел копировать эти строки.
Carry on Columbus collectors edition cast Carry on Columbus watch Carry on Columbus movie stream Carry on Columbus online game download xbox live Carry on Columbus dvd cover Carry on Columbus Carry on Columbus full movie download Carry on Columbus hdrip Carry on Columbus download high quality movies Carry on Columbus collectables buy Carry on Columbus it movie high quality watch Carry on Columbus online dvd quality Carry on Columbus xbox Carry on Columbus vol music Carry on Columbus for sale Carry on Columbus cheat codes watch Carry on Columbus megavideo summer in the city Carry on Columbus watch Carry on Columbus film right now download movie Carry on Columbus in ipod download full movie Carry on Columbus torrents Carry on Columbus Carry on Columbus movie in hd Carry on Columbus star Carry on Columbus blue ray extended edition Carry on Columbus 3d bluray i want to watch Carry on Columbus movie Carry on Columbus creator online pics of Carry on Columbus 3d Carry on Columbus creator Carry on Columbus on blue ray dvd release date Carry on Columbus Carry on Columbus original download Carry on Columbus it full movie free http://lietracde.jugem.jp/?eid=5 Carry on Columbus collectors edition cast Carry on Columbus watch Carry on Columbus movie stream Carry on Columbus online game download xbox live Carry on Columbus dvd cover Carry on Columbus Carry on Columbus full movie download Carry on Columbus hdrip Carry on Columbus download high quality movies Carry on Columbus collectables buy Carry on Columbus it movie high quality watch Carry on Columbus online dvd quality Carry on Columbus xbox Carry on Columbus vol music Carry on Columbus for sale Carry on Columbus cheat codes watch Carry on Columbus megavideo summer in the city Carry on Columbus watch Carry on Columbus film right now download movie Carry on Columbus in ipod download full movie Carry on Columbus torrents Carry on Columbus Carry on Columbus movie in hd Carry on Columbus star Carry on Columbus blue ray extended edition Carry on Columbus 3d bluray i want to watch Carry on Columbus movie Carry on Columbus creator online pics of Carry on Columbus 3d Carry on Columbus creator Carry on Columbus on blue ray dvd release date Carry on Columbus Carry on Columbus original download Carry on Columbus it full movie free
+
 
http://dailybooth.com/ilrecatt699/21852539 watch Kimberly movie dvd quality Kimberly items latest Kimberly film watch whole film of Kimberly Kimberly film out Kimberly vol subtitles Kimberly opening date Kimberly series in order Kimberly characters list Kimberly online film what theaters are playing Kimberly whistling song from Kimberly Kimberly gift shop watch Kimberly film download Kimberly game review Kimberly episode the film Kimberly watch Kimberly movie divx watch full version Kimberly movie Kimberly movie order free Kimberly movies Kimberly film soundtrack Kimberly soundtrack listen buy Kimberly top Kimberly blu ray extended edition how to download Kimberly film Kimberly printables director of Kimberly soundtrack of Kimberly Kimberly online download free Kimberly download mp3 all Kimberly movies in order Kimberly movie on internet star of Kimberly Kimberly hood film for sale Kimberly movie megavideo Kimberly dvd extended Kimberly on sale play Kimberly games free online Kimberly megaupload mp4 virtual Kimberly chat watch Kimberly movie dvd quality Kimberly items latest Kimberly film watch whole film of Kimberly Kimberly film out Kimberly vol subtitles Kimberly opening date Kimberly series in order Kimberly characters list Kimberly online film what theaters are playing Kimberly whistling song from Kimberly Kimberly gift shop watch Kimberly film download Kimberly game review Kimberly episode the film Kimberly watch Kimberly movie divx watch full version Kimberly movie Kimberly movie order free Kimberly movies Kimberly film soundtrack Kimberly soundtrack listen buy Kimberly top Kimberly blu ray extended edition how to download Kimberly film Kimberly printables director of Kimberly soundtrack of Kimberly Kimberly online download free Kimberly download mp3 all Kimberly movies in order Kimberly movie on internet star of Kimberly Kimberly hood film for sale Kimberly movie megavideo Kimberly dvd extended Kimberly on sale play Kimberly games free online Kimberly megaupload mp4 virtual Kimberly chat
+
В других случаях, может возникнуть желание вынести некоторый функционал за пределы текущей функции, или даже предоставить программисту-пользователю возможность самому определить его.
Wojna zensko meska online login Wojna zensko meska subtitle read Wojna zensko meska online for free Wojna zensko meska divx Wojna zensko meska film synopsis watch movies online Wojna zensko meska play Wojna zensko meska game full download Wojna zensko meska movies actress from Wojna zensko meska Wojna zensko meska composer watch Wojna zensko meska online megavideo watch full Wojna zensko meska it film in hd Wojna zensko meska opening credits ringtone Wojna zensko meska Wojna zensko meska stuff Wojna zensko meska bluray dvd shop for movies Wojna zensko meska Wojna zensko meska song lyrics watch Wojna zensko meska online dvd quality Wojna zensko meska fancy dress first Wojna zensko meska movie apple movie trailer Wojna zensko meska online Wojna zensko meska game play download Wojna zensko meska movie for ipod Wojna zensko meska fanfiction archive Wojna zensko meska blu ray review download movie Wojna zensko meska in divx Wojna zensko meska suits for sale download Wojna zensko meska movie for mac Wojna zensko meska fanclub Wojna zensko meska writer Wojna zensko meska film picture movie trailer Wojna zensko meska online Wojna zensko meska oscars Wojna zensko meska out on dvd Wojna zensko meska online com http://brontisbthimb.jugem.jp/?eid=2 Wojna zensko meska online login Wojna zensko meska subtitle read Wojna zensko meska online for free Wojna zensko meska divx Wojna zensko meska film synopsis watch movies online Wojna zensko meska play Wojna zensko meska game full download Wojna zensko meska movies actress from Wojna zensko meska Wojna zensko meska composer watch Wojna zensko meska online megavideo watch full Wojna zensko meska it film in hd Wojna zensko meska opening credits ringtone Wojna zensko meska Wojna zensko meska stuff Wojna zensko meska bluray dvd shop for movies Wojna zensko meska Wojna zensko meska song lyrics watch Wojna zensko meska online dvd quality Wojna zensko meska fancy dress first Wojna zensko meska movie apple movie trailer Wojna zensko meska online Wojna zensko meska game play download Wojna zensko meska movie for ipod Wojna zensko meska fanfiction archive Wojna zensko meska blu ray review download movie Wojna zensko meska in divx Wojna zensko meska suits for sale download Wojna zensko meska movie for mac Wojna zensko meska fanclub Wojna zensko meska writer Wojna zensko meska film picture movie trailer Wojna zensko meska online Wojna zensko meska oscars Wojna zensko meska out on dvd Wojna zensko meska online com
+
 
characters from For Sale by Owner For Sale by Owner last scene For Sale by Owner trialer For Sale by Owner episode guide For Sale by Owner sound download For Sale by Owner soundtrack For Sale by Owner re release play For Sale by Owner game online watch For Sale by Owner full film in hd make my For Sale by Owner For Sale by Owner playlist For Sale by Owner movie score download For Sale by Owner film dvd For Sale by Owner movie quotes For Sale by Owner must listen For Sale by Owner movie rating how to draw For Sale by Owner watch made from For Sale by Owner For Sale by Owner video game trailer characters in For Sale by Owner For Sale by Owner film song For Sale by Owner dvd prices For Sale by Owner sites For Sale by Owner official site For Sale by Owner film still watch For Sale by Owner movie full For Sale by Owner questions For Sale by Owner screenshots where to download the fast For Sale by Owner movie For Sale by Owner widescreen download For Sale by Owner movie live free For Sale by Owner For Sale by Owner movie timings virtual world For Sale by Owner For Sale by Owner movie download for free For Sale by Owner actor For Sale by Owner online play For Sale by Owner film downloads what is For Sale by Owner about how to watch For Sale by Owner tide online http://lietracde.jugem.jp/?eid=6 characters from For Sale by Owner For Sale by Owner last scene For Sale by Owner trialer For Sale by Owner episode guide For Sale by Owner sound download For Sale by Owner soundtrack For Sale by Owner re release play For Sale by Owner game online watch For Sale by Owner full film in hd make my For Sale by Owner For Sale by Owner playlist For Sale by Owner movie score download For Sale by Owner film dvd For Sale by Owner movie quotes For Sale by Owner must listen For Sale by Owner movie rating how to draw For Sale by Owner watch made from For Sale by Owner For Sale by Owner video game trailer characters in For Sale by Owner For Sale by Owner film song For Sale by Owner dvd prices For Sale by Owner sites For Sale by Owner official site For Sale by Owner film still watch For Sale by Owner movie full For Sale by Owner questions For Sale by Owner screenshots where to download the fast For Sale by Owner movie For Sale by Owner widescreen download For Sale by Owner movie live free For Sale by Owner For Sale by Owner movie timings virtual world For Sale by Owner For Sale by Owner movie download for free For Sale by Owner actor For Sale by Owner online play For Sale by Owner film downloads what is For Sale by Owner about how to watch For Sale by Owner tide online
+
И в том и в другом случае на помощь приходят ''замыкания'', ''анонимные функции'' или ''лямбда функции'', как их еще называют. Сущность такой функции в том, что она с одной стороны как бы является переменной, а с другой стороны — функцией, которую можно вызывать. В языке К++, такие функции носят название блоков. Сущность переменной, блоки проявляют в том что их можно создавать как локальные переменные, присваивать друг другу и даже передавать другим функциям в качестве параметра. Приняв такой параметр, функция может обратиться к нему, как к любой другой функции: вызывать с некоторыми параметрами и использовать его возвращаемое значение:
http://ineedin.over-blog.com/article-watch-the-real-al-di-la-della-legge-1968-it-film-95873705.html download Al di la della legge free mediafire Al di la della legge names of Al di la della legge fun Al di la della legge games Al di la della legge cd cover Al di la della legge movie review music from Al di la della legge vol how to download Al di la della legge song from Al di la della legge Al di la della legge collection blu ray pictures of dory from Al di la della legge Al di la della legge map illegal Al di la della legge movie download Al di la della legge free streaming Al di la della legge soundtrack cd Al di la della legge online mmorpg Al di la della legge pc game free download Al di la della legge film online Al di la della legge bluray 1080p download mediafire cheapest Al di la della legge dvd Al di la della legge watch full movie Al di la della legge 3d collection download Al di la della legge films i want to watch the full film of Al di la della legge Al di la della legge sound track Al di la della legge audiobook free Al di la della legge blue ray extended edition cast of Al di la della legge match Al di la della legge hd download xbox live Al di la della legge Al di la della legge music score Al di la della legge psx Al di la della legge film money free Al di la della legge divx Al di la della legge film watch full film Al di la della legge movie showing Al di la della legge creator free where can i buy fast Al di la della legge movie download Al di la della legge free mediafire Al di la della legge names of Al di la della legge fun Al di la della legge games Al di la della legge cd cover Al di la della legge movie review music from Al di la della legge vol how to download Al di la della legge song from Al di la della legge Al di la della legge collection blu ray pictures of dory from Al di la della legge Al di la della legge map illegal Al di la della legge movie download Al di la della legge free streaming Al di la della legge soundtrack cd Al di la della legge online mmorpg Al di la della legge pc game free download Al di la della legge film online Al di la della legge bluray 1080p download mediafire cheapest Al di la della legge dvd Al di la della legge watch full movie Al di la della legge 3d collection download Al di la della legge films i want to watch the full film of Al di la della legge Al di la della legge sound track Al di la della legge audiobook free Al di la della legge blue ray extended edition cast of Al di la della legge match Al di la della legge hd download xbox live Al di la della legge Al di la della legge music score Al di la della legge psx Al di la della legge film money free Al di la della legge divx Al di la della legge film watch full film Al di la della legge movie showing Al di la della legge creator free where can i buy fast Al di la della legge movie
+
<source lang="kpp">
http://lietracde.jugem.jp/?eid=7 buy High Security Vacation tide movie High Security Vacation online megavideo where to watch High Security Vacation it full movie High Security Vacation film song High Security Vacation hd rapidshare High Security Vacation length High Security Vacation volumes High Security Vacation online membership High Security Vacation trailer mp4 download High Security Vacation music director download High Security Vacation movie hdrip High Security Vacation movie meaning watch High Security Vacation film watch High Security Vacation for free High Security Vacation movie streaming High Security Vacation film video virtual High Security Vacation creator High Security Vacation full lenght movie in divx format High Security Vacation free online games High Security Vacation language buy High Security Vacation movie high quality High Security Vacation showing movie review for High Security Vacation High Security Vacation director cut High Security Vacation generator High Security Vacation rating High Security Vacation world High Security Vacation download hd movies High Security Vacation tracklist High Security Vacation subtitle watch High Security Vacation movie full where can i download High Security Vacation film online download film High Security Vacation dvdrip High Security Vacation hd download High Security Vacation full film to watch watch full version of High Security Vacation film High Security Vacation secrets watch High Security Vacation movie now High Security Vacation movie blog live free High Security Vacation High Security Vacation languages High Security Vacation best quotes buy High Security Vacation tide movie High Security Vacation online megavideo where to watch High Security Vacation it full movie High Security Vacation film song High Security Vacation hd rapidshare High Security Vacation length High Security Vacation volumes High Security Vacation online membership High Security Vacation trailer mp4 download High Security Vacation music director download High Security Vacation movie hdrip High Security Vacation movie meaning watch High Security Vacation film watch High Security Vacation for free High Security Vacation movie streaming High Security Vacation film video virtual High Security Vacation creator High Security Vacation full lenght movie in divx format High Security Vacation free online games High Security Vacation language buy High Security Vacation movie high quality High Security Vacation showing movie review for High Security Vacation High Security Vacation director cut High Security Vacation generator High Security Vacation rating High Security Vacation world High Security Vacation download hd movies High Security Vacation tracklist High Security Vacation subtitle watch High Security Vacation movie full where can i download High Security Vacation film online download film High Security Vacation dvdrip High Security Vacation hd download High Security Vacation full film to watch watch full version of High Security Vacation film High Security Vacation secrets watch High Security Vacation movie now High Security Vacation movie blog live free High Security Vacation High Security Vacation languages High Security Vacation best quotes
+
function Caller(x, y, block b) {
http://dailybooth.com/commaduc928/21852558 Falling in Love with the Girl Next Door analysis Falling in Love with the Girl Next Door episode list Falling in Love with the Girl Next Door 3d Falling in Love with the Girl Next Door official site download Falling in Love with the Girl Next Door film in hd formats watch Falling in Love with the Girl Next Door film is Falling in Love with the Girl Next Door 3d Falling in Love with the Girl Next Door 3d collection Falling in Love with the Girl Next Door desktop background Falling in Love with the Girl Next Door online forum Falling in Love with the Girl Next Door film to digital movie trailers Falling in Love with the Girl Next Door watch a movie online how to watch the full film of Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door full lenght film in dvd format Falling in Love with the Girl Next Door fanfiction archive shop for movies Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door movie music download hd Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door movie locations film Falling in Love with the Girl Next Door watch fast Falling in Love with the Girl Next Door ful film watch the complete Falling in Love with the Girl Next Door movie watch free online fast Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door it film opening Falling in Love with the Girl Next Door movie torrents Falling in Love with the Girl Next Door movie on youtube where to buy Falling in Love with the Girl Next Door download Falling in Love with the Girl Next Door movie bdrip 720p Falling in Love with the Girl Next Door button instant Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door soundtrack listen Falling in Love with the Girl Next Door film camera Falling in Love with the Girl Next Door release dvd movie Falling in Love with the Girl Next Door real Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door extended edition Falling in Love with the Girl Next Door film location Falling in Love with the Girl Next Door vol full movie Falling in Love with the Girl Next Door series wiki Falling in Love with the Girl Next Door online review about Falling in Love with the Girl Next Door film codes for Falling in Love with the Girl Next Door online download the whole film of Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door movie hd where can i download Falling in Love with the Girl Next Door online watch Falling in Love with the Girl Next Door full movie online is Falling in Love with the Girl Next Door on dvd online Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door analysis Falling in Love with the Girl Next Door episode list Falling in Love with the Girl Next Door 3d Falling in Love with the Girl Next Door official site download Falling in Love with the Girl Next Door film in hd formats watch Falling in Love with the Girl Next Door film is Falling in Love with the Girl Next Door 3d Falling in Love with the Girl Next Door 3d collection Falling in Love with the Girl Next Door desktop background Falling in Love with the Girl Next Door online forum Falling in Love with the Girl Next Door film to digital movie trailers Falling in Love with the Girl Next Door watch a movie online how to watch the full film of Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door full lenght film in dvd format Falling in Love with the Girl Next Door fanfiction archive shop for movies Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door movie music download hd Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door movie locations film Falling in Love with the Girl Next Door watch fast Falling in Love with the Girl Next Door ful film watch the complete Falling in Love with the Girl Next Door movie watch free online fast Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door it film opening Falling in Love with the Girl Next Door movie torrents Falling in Love with the Girl Next Door movie on youtube where to buy Falling in Love with the Girl Next Door download Falling in Love with the Girl Next Door movie bdrip 720p Falling in Love with the Girl Next Door button instant Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door soundtrack listen Falling in Love with the Girl Next Door film camera Falling in Love with the Girl Next Door release dvd movie Falling in Love with the Girl Next Door real Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door extended edition Falling in Love with the Girl Next Door film location Falling in Love with the Girl Next Door vol full movie Falling in Love with the Girl Next Door series wiki Falling in Love with the Girl Next Door online review about Falling in Love with the Girl Next Door film codes for Falling in Love with the Girl Next Door online download the whole film of Falling in Love with the Girl Next Door Falling in Love with the Girl Next Door movie hd where can i download Falling in Love with the Girl Next Door online watch Falling in Love with the Girl Next Door full movie online is Falling in Love with the Girl Next Door on dvd online Falling in Love with the Girl Next Door
+
    return b(x, y);
The Last Run games net The Last Run discussion questions The Last Run whistling song The Last Run games free download videos The Last Run play The Last Run games free online picture of dory from The Last Run The Last Run icons run The Last Run The Last Run out on dvd The Last Run picture editor The Last Run creator online The Last Run movie buy watch The Last Run movie free The Last Run movie price The Last Run character list tickets to The Last Run The Last Run screenplay pdf The Last Run film to watch now The Last Run read online watch full version of The Last Run online The Last Run marker The Last Run movie on line why is The Last Run rated where can i download The Last Run online download The Last Run movie full length The Last Run game demo websites to watch The Last Run movie The Last Run purchasing movie order of The Last Run movies download The Last Run film in hd quality The Last Run watch online The Last Run movie download full movie The Last Run dvds where did they film The Last Run The Last Run soundtrack track list The Last Run fan definition download movie The Last Run dvd The Last Run characters running The Last Run real life The Last Run The Last Run full lenght movie in hd format new york The Last Run http://ineedin.over-blog.com/article-movies-the-last-run-1971-purchase-95873741.html The Last Run games net The Last Run discussion questions The Last Run whistling song The Last Run games free download videos The Last Run play The Last Run games free online picture of dory from The Last Run The Last Run icons run The Last Run The Last Run out on dvd The Last Run picture editor The Last Run creator online The Last Run movie buy watch The Last Run movie free The Last Run movie price The Last Run character list tickets to The Last Run The Last Run screenplay pdf The Last Run film to watch now The Last Run read online watch full version of The Last Run online The Last Run marker The Last Run movie on line why is The Last Run rated where can i download The Last Run online download The Last Run movie full length The Last Run game demo websites to watch The Last Run movie The Last Run purchasing movie order of The Last Run movies download The Last Run film in hd quality The Last Run watch online The Last Run movie download full movie The Last Run dvds where did they film The Last Run The Last Run soundtrack track list The Last Run fan definition download movie The Last Run dvd The Last Run characters running The Last Run real life The Last Run The Last Run full lenght movie in hd format new york The Last Run
+
}
Run of the Arrow free online watch movies Run of the Arrow play Run of the Arrow online without downloading Run of the Arrow mp4 download Run of the Arrow episodes Run of the Arrow mmorpg online free online Run of the Arrow game Run of the Arrow stories movie spoiler Run of the Arrow download movie Run of the Arrow hd download Run of the Arrow films watch online Run of the Arrow Run of the Arrow clipart Run of the Arrow it movie clothing Run of the Arrow soundtrack track list is Run of the Arrow in theaters Run of the Arrow wallpaper order Run of the Arrow movie Run of the Arrow film premier Run of the Arrow film imdb Run of the Arrow movie download zshare movie Run of the Arrow pictures of Run of the Arrow characters movie to watch online Run of the Arrow certificate Run of the Arrow vol music Run of the Arrow group movie Run of the Arrow plot movies Run of the Arrow purchase Run of the Arrow movie info play Run of the Arrow game watch Run of the Arrow film full version Run of the Arrow special extended edition Run of the Arrow audiobook http://lietracde.jugem.jp/?eid=8 Run of the Arrow free online watch movies Run of the Arrow play Run of the Arrow online without downloading Run of the Arrow mp4 download Run of the Arrow episodes Run of the Arrow mmorpg online free online Run of the Arrow game Run of the Arrow stories movie spoiler Run of the Arrow download movie Run of the Arrow hd download Run of the Arrow films watch online Run of the Arrow Run of the Arrow clipart Run of the Arrow it movie clothing Run of the Arrow soundtrack track list is Run of the Arrow in theaters Run of the Arrow wallpaper order Run of the Arrow movie Run of the Arrow film premier Run of the Arrow film imdb Run of the Arrow movie download zshare movie Run of the Arrow pictures of Run of the Arrow characters movie to watch online Run of the Arrow certificate Run of the Arrow vol music Run of the Arrow group movie Run of the Arrow plot movies Run of the Arrow purchase Run of the Arrow movie info play Run of the Arrow game watch Run of the Arrow film full version Run of the Arrow special extended edition Run of the Arrow audiobook
+
</source>
http://brontisbthimb.jugem.jp/?eid=3 the movie Married to It newest Married to It movie Married to It full movie divx Married to It movie sales the order of Married to It movies Married to It video clips watch complete Married to It movie cast Married to It music Married to It Married to It movie online Married to It shopping movie new Married to It series story of Married to It list of Married to It characters watch Married to It vol online new Married to It trailer Married to It free streaming order Married to It film how to download a movie Married to It subtitles for Married to It Married to It vol soundtrack fast Married to It film high quality pictures of dory from Married to It watch Married to It online for free Married to It movie showing full Married to It film downloads watch new Married to It film download Married to It films Married to It length of movie Married to It itunes Married to It download hd movies Married to It new years Married to It tv series download Married to It full lenght Married to It film download zshare new movies 2011 Married to It digital Married to It preview trailer Married to It flv Married to It cheat codes download Married to It songs Married to It review film Married to It film watch it where can i watch Married to It movie the movie Married to It newest Married to It movie Married to It full movie divx Married to It movie sales the order of Married to It movies Married to It video clips watch complete Married to It movie cast Married to It music Married to It Married to It movie online Married to It shopping movie new Married to It series story of Married to It list of Married to It characters watch Married to It vol online new Married to It trailer Married to It free streaming order Married to It film how to download a movie Married to It subtitles for Married to It Married to It vol soundtrack fast Married to It film high quality pictures of dory from Married to It watch Married to It online for free Married to It movie showing full Married to It film downloads watch new Married to It film download Married to It films Married to It length of movie Married to It itunes Married to It download hd movies Married to It new years Married to It tv series download Married to It full lenght Married to It film download zshare new movies 2011 Married to It digital Married to It preview trailer Married to It flv Married to It cheat codes download Married to It songs Married to It review film Married to It film watch it where can i watch Married to It movie
+
 
 +
Приведем простой пример объявления блоков и их передачи в вышеописанную функцию:
 +
<source lang="kpp">
 +
var sum = { |x, y| return x + y; };
 +
var mul = { |x, y| return x * y; };
 +
var s = Caller(2, 3, sum); // s = 2 + 3 = 5
 +
var m = Caller(2, 5, mul); // m = 2 * 5 = 10
 +
</source>
 +
 
 +
Первый блок принимает два параметра и возвращает их сумму; второй блок так же принимает два параметра, но результатом его выполнения будет уже произведение.
 +
 
 +
== Применение блоков ==
 +
 
 +
Наиболее подходящая задача, иллюстрирующая идеологию и способы использования блоков — это сортировка элементов массива. Предположим, что программисту требуется реализовать для класса <tt>array</tt> механизм сортировки элементов. Под сортировкой, в данном случае понимается упорядочение набора элементов на основании некоторого критерия, по которому можно судить об их очередности в списке для каждой пары элементов.
 +
 
 +
Проблема заключается в том, что на этапе написания реализации алгоритма, мы не имеем представления о том, какие же элементы будут храниться в массиве. Как мы отсортируем массив, который может состоять из чего угодно: строк, чисел, произвольных объектов и даже самих массивов? Пришлось бы либо писать обширную реализацию некоторого метода сравнения двух элементов, который бы учитывал все возможные варианты типов элементов, либо реализовывать свою функцию сортировки на каждый из типов данных элементов:
 +
<source lang="kpp">
 +
extend array {
 +
    public function array SortAsNumbers();
 +
    public function array SortAsStrings();
 +
    public function array SortAsArrays();
 +
    public function array SortAsCollections();
 +
}
 +
</source>
 +
 
 +
И тот и другой способ жестко ограничивает функциональность нашего класса только теми типами элементов, которые были изначально предусмотрены. А если программист-пользователь захочет использовать свой тип данных, или еще проще, захочет сортировать элементы не по возрастанию, а по убыванию? Вероятно, мало кто захочет переписывать все эти функции только для того, чтобы изменить порядок сортировки.
 +
 
 +
Давайте взглянем на проблему шире. В сущности, все вышеописанные методы делают ровно одно и то же: некоторым из алгоритмов сортировки, они упорядочивают элементы в массиве. При этом, единственная различающаяся в них часть — это сама операция сравнения двух элементов. Решение напрашивается само собой — необходимо вынести эту часть из функции сортировки и предоставить пользователю самому обеспечить операцию сравнения. Таким образом, мы получим ОДИН метод сортировки, который будет работать для ЛЮБЫХ типов элементов — программист-пользователь сам укажет необходимый критерий сортировки, который уже будет использован внутри метода.
 +
 
 +
Эту задачу можно красиво решить с помощью блоков:
 +
<source lang="kpp">
 +
extend array {
 +
    public const function array sort(block cmp) {
 +
        return this if size < 2;
 +
        var array left, array right;
 +
        for (var i = 1; i < size; ++i)
 +
            cmp(this[i], this[0]) ? left.push(this[i]) : right.push(this[i]);
 +
        return left.sort(cmp) + [ this[0] ] + right.sort(cmp);
 +
    }
 +
}
 +
</source>
 +
 
 +
В качестве параметра, метод <tt>sort()</tt> принимает один аргумент — блок, который должен производить сравнение двух элементов и возвращать истину, если элементы расположены в правильном порядке и ложь, если порядок неверный, то есть необхдимо их переставить.
 +
 
 +
'''Примечание:''' Приведенный здесь код является реализацией алгоритма [http://ru.wikipedia.org/wiki/Быстрая_сортировка быстрой сортировки], однако он является не очень практичным, поскольку на каждом из этапов он оперирует с копиями соответствующих частей массива; в книге же был использован из соображений краткости кода.
 +
 
 +
Теперь, любой массив в программе, использующей текущий модуль, может быть отсортирован на основании некоторого критерия. Результатом выполнения будет другой, уже отсортированный массив:
 +
 
 +
<source lang="kpp">
 +
var array sorted, ary = [2, 7, 3, 0, 1, 5, 8, 9, 4, 6];
 +
sorted = ary.sort() { |x, y| x < y; }; // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 +
sorted = ary.sort() { |x, y| x > y; }; // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 +
 
 +
ary = ['q', 'e', 'b', 'z', 'a', 'x', 't'];
 +
sorted = ary.sort() { |x, y| x < y; }; // ['a', 'b', 'e', 'q', 't', 'x', 'z']
 +
sorted = ary.sort() { |x, y| x > y; }; // ['z', 'x', 't', 'q', 'e', 'b', 'a']
 +
</source>
 +
 
 +
Мы объявляем две переменных-массива ''ary'' и ''sorted''. Переменная ''ary'' инициализируется массивом произвольных чисел, либо строк во втором случае. Затем выполняются вызовы метода <tt>sort()</tt>, результат выполнения которых сохраняется в переменной ''sorted''.
 +
 
 +
'''Примечание:''' Для сокращения записи, в вышеописанном коде были применены т. н. ''встроенные блоки'' (inline). К++ поддерживает специальный синтаксис для передачи встроенных блоков в функции. Подробнее об этом будет написано чуть ниже.
 +
 
 +
== Отличие от функций ==
 +
 
 +
В целом, блоки очень похожи на обычные функции, однако существует несколько отличий, которые следует иметь в виду. Первое, наиболее очевидное отличие заключается в способе описания формальных параметров, которые, в отличие от функций, записываются в самом начале тела блока, между двумя вертикальными чертами. Друг от друга параметры отделяются запятой.
 +
 
 +
Главное отличие блоков заключается в том, что они в основном ориентированы на динамический код. Скажем, возвращаемое значение всегда является [[Переменные#Нетипированные (динамические) переменные|динамической переменной]]. В отдельных случаях допускается типизация аргументов блока, однако она происходит внутри самого блока и не влияет на фактически передаваемые параметры (см. ниже). Таким образом, с точки зрения вызывающего кода, блоки всегда представляют собой динамический код.
 +
 
 +
Блоки не могут быть экспортированы из текущего модуля и должны применяться только в нем самом. Разумеется, экспортировать функции, принимающие блоки в качестве параметров можно.
 +
 
 +
== Типизация параметров ==
 +
 
 +
В некоторых случаях, для повышения эффективности кода блока можно типировать формальные параметры, с тем чтобы впоследствии компилятор, на основании этой информации, мог бы генерировать статический код. Типирование аргументов осуществляется точно так же, как и в обычных функциях: непосредственно перед идентификатором аргумента, указывается его тип.
 +
<source lang="kpp">
 +
var myblock = { | int x, int y | /* код блока */ };
 +
</source>
 +
Теперь, в теле блока, переменные ''x'' и ''y'' будут считаться статическими.  
 +
 
 +
'''Примечание 1:''' Поскольку на момент компиляции, у компилятора нет возможности проверить правильность типов передаваемых в блок параметров, ответственность за это ложится на самого программиста. Если в блок будет передан объект неприводимого типа, то это приведет к ошибке времени исполнения ([[Идеология языка#Понятие исключения|исключению]]).
 +
 
 +
'''Примечание 2:''' Указание типов в параметрах может быть удобно, поскольку компилятор, располагая информацией о типе параметров, может выполнять некоторую работу автоматически. Например, приводить переменные к нужному типу при вызове других функций. Допустим, мы хотим описать некоторый блок, который по логике работы принимает число (переменную типа <tt>int</tt>), но внутри себя вызывает другие функции, скажем <tt>puts()</tt>:
 +
 
 +
<source lang="kpp" line="1">
 +
var myblock = { |x|
 +
    /* код блока */  
 +
    puts(x as string);
 +
};
 +
</source>
 +
 
 +
В данном случае, в строке 3, при вызове <tt>puts()</tt>, нам пришлось привести тип переменной ''x'' к строке явным образом. Если бы этого не было сделано, то возникла бы ошибка времени исполнения, поскольку функция <tt>puts()</tt> ожидает строку. При небольших размерах кода это не составляет проблем, однако приводить тип переменной пришлось бы в каждом вызове. Для решения этой проблемы как раз рекомендуется применять типирование аргументов:
 +
 
 +
<source lang="kpp" line="1">
 +
var myblock = { | int x |
 +
    /* код блока */
 +
    puts(x); //теперь, приведение происходит автоматически
 +
};
 +
</source>
 +
 
 +
== Встроенные блоки ==
 +
 
 +
Чаще всего, блоки применяются для записи небольших кусочков кода, которые, как в примерах выше, передаются в функции, для уточнения некоторых моментов. Для того чтобы облегчить работу программиста и сделать код более читаемым, был введен специальный синтаксис для передачи блоков в функции с одновременным их объявлением "на месте"; при этом, блоки записываются в сокращенной форме сразу за кодом вызова функции, после блока фактических параметров.
 +
 
 +
Покажем использование встроенных блоков на примере нахождения суммы чисел от 1 до 10, а так же получения списка четных чисел в этом же интервале.
 +
<source lang="kpp">
 +
var s = 0;
 +
var numbers = [];
 +
(1..10).each() { |x| s += x; numbers.push(x); };
 +
var evens = numbers.collect() { |x| x % 2 == 0 ? x : null; }.compact();
 +
</source>
 +
 
 +
Несмотря на свою простоту и надуманность, данный пример показывает две особенности встроенных блоков, по сравнению с обычными блоками, объявляемыми как переменные. Первая особенность заключается в том, что встроенные блоки имеют доступ к локальным переменным в контексте вызова (то есть, замыкаются на него — отсюда и название "замыкания"). Например, данный блок использует внешние по отношению к нему переменные: ''s'' для накопления суммы, а ''numbers'' для добавления текущего числа в массив.
 +
 
 +
Вторая особенность реализуется в коде второго встроенного блока. Она заключается в том, что встроенные блоки могут возвращать значения без явного указания оператора <tt>'''return'''</tt>. Однако, это вожможно только для простых выражений, без применения операторов ветвления. Для получения массива целых чисел, используются два метода, объявленные в стандартной библиотеке языка K++: методы <tt>collect()</tt> и <tt>compact()</tt>.
 +
 
 +
Метод <tt>collect()</tt> принимает в качестве аргумента блок. Далее, он проходит вдоль всего массива, вызывая блок с параметром текущего элемента. Результат выполнения блока помещается в другой массив, который возвращается вызывающему коду. Таким образом, этот метод может применяться для обработки элементов некоторого массива с получением другого массива из обработанных элементов. Метод <tt>compact()</tt> используется для "уплотнения" массива, путем удаления из него пустых элементов, равных <tt>'''null'''</tt>.  
 +
 
 +
В вышеприведенном коде, мы используем оба этих метода для того, чтобы сначала выбрать из исходного массива все четные элементы (вместо нечетных вставляется <tt>'''null'''</tt>), а затем уплотнить полученный массив.
 +
 
 +
Реализованы эти методы могут быть примерно так:
 +
<source lang="kpp">
 +
extend array {
 +
    public const function array collect(block b) {
 +
        var array result;
 +
        this.each() { |x| result.push(b(x)); };
 +
        return result;
 +
    }
 +
 
 +
    public const function array compact() {
 +
        var array result;
 +
        this.each() { |x| result.push(b(x)) if x; };
 +
        return result;
 +
    }
 +
}
 +
</source>
 +
 
 +
'''Примечание 1:''' при работе со встроенными блоками внутри обрабатывающих функций, следует быть очень осторожным. Поскольку, встроенные блоки оперируют с перменными контекста своего объявления, то они должны существовать не дольше чем существует сам блок, в котором они были объявлены и в котором был произведен вызов функции-обработчика.  
 +
 
 +
Сама функция, должна работать с ними "как есть"; ни в коем случае нельзя их сохранять во внешних переменных (где они могут просуществовать дольше положенного времени). Например, такой код '''является недопустимым''':
 +
<source lang="kpp">
 +
var block_array = [];
 +
function AddBlock(block b) { block_array.push(b); }
 +
function f() {
 +
    const c = 5;
 +
    AddBlock() { |x| x * c; }; // так делать нельзя!
 +
}
 +
</source>
 +
В коде блока мы видим использование внешнего объекта — константы ''c''. Проблема заключается в том, что встроенные блоки не порождают собственного контекста и заимствуют набор локальных переменных из контекста вызова. Соответственно, если блок был где то сохранен, то может случиться, что контект его локальных переменных был уже удален.
 +
 
 +
В то же время, такой код вполне правомерен:
 +
<source lang="kpp">
 +
function f() {
 +
    var b = { |x| return x + 1; }; // а так можно
 +
    AddBlock(b);
 +
 
 +
    //так тоже можно, но не рекомендуется:
 +
    AddBlock({|x| return x * 5;});
 +
}
 +
</source>
 +
 
 +
'''Примечание 2:''' хотя использование связки <tt>collect(){...}.compact()</tt> не возбраняется, следует иметь в виду, что происходит двойное копирование массивов, что в конечном счете сказывается на производительности. Для задачи выбора (а не обработки) элементов из массива, более приемлемым вариантом является использование метода <tt>select()</tt>, который отбирает из исходного массива все элементы, удовлетворяющие условию, записанному в блоке:
 +
 
 +
<source lang="kpp">
 +
var ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 +
var selected = ary.select() { |x| x > 6; }; // [7, 8, 9, 10]
 +
</source>
 +
 
 +
При использовании метода <tt>select()</tt> промежуточного копирования не происходит, так что операция будет выполняться более эффективно.
 +
 
 +
----
 +
 
 +
 
 +
Механизм встроенных блоков — это очень мощный инструмент, который при грамотном использовании позволяет добиться потрясающих результатов при написании программ. Программы получаются очень лаконичными, легко читаемыми и иногда даже более эффективными, чем при традиционном подходе.  
 +
 
 +
К примеру, вот пример кода, который обращается на FTP сервер и выбирает из некоторой директории все файлы, имеющие расширение '.conf':
 +
<source lang="kpp">
 +
var configs = Directory.open('ftp://example.com/media/etc')
 +
    .browse().select() { |file| file.name =~ `\.conf$`; };
 +
</source>
 +
 
 +
На традиционных языках, такая операция могла бы занять с десяток строк кода, тогда как здесь мы обходимся всего одной (строка разбита две части для того, чтобы уместить в ширину страницы).
 +
 
 +
Учитывая принципы полудинамической типизации, некоторые конструкции могут быть более лаконичными даже по сравнению с подобными языками. Например, следующий код на C# 2.0 позволяет увеличить все элементы массива на 2:
 +
<source lang="csharp">
 +
int[] ary = { 1, 2, 3 };
 +
int x = 2;
 +
Array.ConvertAll<int, int>(ary, delegate(int elem) { return elem * x; }); // { 2, 4, 6 }
 +
</source>
 +
 
 +
На K++ эта же конструкция будет выглядеть так:
 +
<source lang="kpp">
 +
var ary = [1, 2, 3];
 +
var x = 2;
 +
ary.convert() { |e| e * x; }; // [2, 4, 6]
 +
</source>
 +
 
 +
Конечно, можно привести массу доводов в защиту того или иного языка, укзазать преимущества однго и недостатки другого, чем с упоением и занимаются многочисленные разжигатели религиозных войн в среде IT. Мы не ставим себе целью доказать преимущества K++, скорее показать преимущества всех языков, использующих альтернативный подход к программированию в целом. К чести того же C# можно сказать, что в третей версии были введены замыкания, по краткости не уступающие K++. В целом, у каждого языка есть свои преимущества и недостатки и в общем случае сравнивать их нельзя. Можно, разве что, судить о степени удобства языка, в сочетании с его производительностью и о том, насколько эффективно он позволяет решать задачи, на которые был рассчитан и исходя из которых проектировался.

Текущая версия на 13:40, 13 июля 2013

Содержание


Основной идеей при написании как процедурных, так и объектно-ориентированных программ является локализация (заключение) функционала в некоторой области: в функции, либо в методе. Таким образом получается, что программа состоит из множества функционально независимых частей, каждая из которых решает конкретную, достаточно узкую задачу. Такой подход позволяет скрыть детали реализации алгоритмов внутри этих частей, а "наружу" предоставить только интерфейс — совокупность способов взаимодействия данного функционального элемента с другими. В случае функции, под интерфейсом понимается совокупность ее параметров и возвращаемого значения; в случае классов — наборы методов и свойств.

Случается, что в работе некоторого алгоритма возникают четко определенные функциональные подсистемы, которые, однако, слишком зависимы от самого алгоритма, либо слишком просты для того, чтобы выделять их в отдельную функцию. В случае с C++ это все же приходится делать, даже если эта "минифункция" применяется всего в одном методе, но достаточное количество раз, чтобы программист не захотел копировать эти строки.

В других случаях, может возникнуть желание вынести некоторый функционал за пределы текущей функции, или даже предоставить программисту-пользователю возможность самому определить его.

И в том и в другом случае на помощь приходят замыкания, анонимные функции или лямбда функции, как их еще называют. Сущность такой функции в том, что она с одной стороны как бы является переменной, а с другой стороны — функцией, которую можно вызывать. В языке К++, такие функции носят название блоков. Сущность переменной, блоки проявляют в том что их можно создавать как локальные переменные, присваивать друг другу и даже передавать другим функциям в качестве параметра. Приняв такой параметр, функция может обратиться к нему, как к любой другой функции: вызывать с некоторыми параметрами и использовать его возвращаемое значение: <source lang="kpp"> function Caller(x, y, block b) {

   return b(x, y);

} </source>

Приведем простой пример объявления блоков и их передачи в вышеописанную функцию: <source lang="kpp"> var sum = { |x, y| return x + y; }; var mul = { |x, y| return x * y; }; var s = Caller(2, 3, sum); // s = 2 + 3 = 5 var m = Caller(2, 5, mul); // m = 2 * 5 = 10 </source>

Первый блок принимает два параметра и возвращает их сумму; второй блок так же принимает два параметра, но результатом его выполнения будет уже произведение.

[править] Применение блоков

Наиболее подходящая задача, иллюстрирующая идеологию и способы использования блоков — это сортировка элементов массива. Предположим, что программисту требуется реализовать для класса array механизм сортировки элементов. Под сортировкой, в данном случае понимается упорядочение набора элементов на основании некоторого критерия, по которому можно судить об их очередности в списке для каждой пары элементов.

Проблема заключается в том, что на этапе написания реализации алгоритма, мы не имеем представления о том, какие же элементы будут храниться в массиве. Как мы отсортируем массив, который может состоять из чего угодно: строк, чисел, произвольных объектов и даже самих массивов? Пришлось бы либо писать обширную реализацию некоторого метода сравнения двух элементов, который бы учитывал все возможные варианты типов элементов, либо реализовывать свою функцию сортировки на каждый из типов данных элементов: <source lang="kpp"> extend array {

   public function array SortAsNumbers();
   public function array SortAsStrings();
   public function array SortAsArrays();
   public function array SortAsCollections();

} </source>

И тот и другой способ жестко ограничивает функциональность нашего класса только теми типами элементов, которые были изначально предусмотрены. А если программист-пользователь захочет использовать свой тип данных, или еще проще, захочет сортировать элементы не по возрастанию, а по убыванию? Вероятно, мало кто захочет переписывать все эти функции только для того, чтобы изменить порядок сортировки.

Давайте взглянем на проблему шире. В сущности, все вышеописанные методы делают ровно одно и то же: некоторым из алгоритмов сортировки, они упорядочивают элементы в массиве. При этом, единственная различающаяся в них часть — это сама операция сравнения двух элементов. Решение напрашивается само собой — необходимо вынести эту часть из функции сортировки и предоставить пользователю самому обеспечить операцию сравнения. Таким образом, мы получим ОДИН метод сортировки, который будет работать для ЛЮБЫХ типов элементов — программист-пользователь сам укажет необходимый критерий сортировки, который уже будет использован внутри метода.

Эту задачу можно красиво решить с помощью блоков: <source lang="kpp"> extend array {

   public const function array sort(block cmp) {
       return this if size < 2;
       var array left, array right;
       for (var i = 1; i < size; ++i)
           cmp(this[i], this[0]) ? left.push(this[i]) : right.push(this[i]);
       return left.sort(cmp) + [ this[0] ] + right.sort(cmp);
   }

} </source>

В качестве параметра, метод sort() принимает один аргумент — блок, который должен производить сравнение двух элементов и возвращать истину, если элементы расположены в правильном порядке и ложь, если порядок неверный, то есть необхдимо их переставить.

Примечание: Приведенный здесь код является реализацией алгоритма быстрой сортировки, однако он является не очень практичным, поскольку на каждом из этапов он оперирует с копиями соответствующих частей массива; в книге же был использован из соображений краткости кода.

Теперь, любой массив в программе, использующей текущий модуль, может быть отсортирован на основании некоторого критерия. Результатом выполнения будет другой, уже отсортированный массив:

<source lang="kpp"> var array sorted, ary = [2, 7, 3, 0, 1, 5, 8, 9, 4, 6]; sorted = ary.sort() { |x, y| x < y; }; // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] sorted = ary.sort() { |x, y| x > y; }; // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

ary = ['q', 'e', 'b', 'z', 'a', 'x', 't']; sorted = ary.sort() { |x, y| x < y; }; // ['a', 'b', 'e', 'q', 't', 'x', 'z'] sorted = ary.sort() { |x, y| x > y; }; // ['z', 'x', 't', 'q', 'e', 'b', 'a'] </source>

Мы объявляем две переменных-массива ary и sorted. Переменная ary инициализируется массивом произвольных чисел, либо строк во втором случае. Затем выполняются вызовы метода sort(), результат выполнения которых сохраняется в переменной sorted.

Примечание: Для сокращения записи, в вышеописанном коде были применены т. н. встроенные блоки (inline). К++ поддерживает специальный синтаксис для передачи встроенных блоков в функции. Подробнее об этом будет написано чуть ниже.

[править] Отличие от функций

В целом, блоки очень похожи на обычные функции, однако существует несколько отличий, которые следует иметь в виду. Первое, наиболее очевидное отличие заключается в способе описания формальных параметров, которые, в отличие от функций, записываются в самом начале тела блока, между двумя вертикальными чертами. Друг от друга параметры отделяются запятой.

Главное отличие блоков заключается в том, что они в основном ориентированы на динамический код. Скажем, возвращаемое значение всегда является динамической переменной. В отдельных случаях допускается типизация аргументов блока, однако она происходит внутри самого блока и не влияет на фактически передаваемые параметры (см. ниже). Таким образом, с точки зрения вызывающего кода, блоки всегда представляют собой динамический код.

Блоки не могут быть экспортированы из текущего модуля и должны применяться только в нем самом. Разумеется, экспортировать функции, принимающие блоки в качестве параметров можно.

[править] Типизация параметров

В некоторых случаях, для повышения эффективности кода блока можно типировать формальные параметры, с тем чтобы впоследствии компилятор, на основании этой информации, мог бы генерировать статический код. Типирование аргументов осуществляется точно так же, как и в обычных функциях: непосредственно перед идентификатором аргумента, указывается его тип. <source lang="kpp"> var myblock = { | int x, int y | /* код блока */ }; </source> Теперь, в теле блока, переменные x и y будут считаться статическими.

Примечание 1: Поскольку на момент компиляции, у компилятора нет возможности проверить правильность типов передаваемых в блок параметров, ответственность за это ложится на самого программиста. Если в блок будет передан объект неприводимого типа, то это приведет к ошибке времени исполнения (исключению).

Примечание 2: Указание типов в параметрах может быть удобно, поскольку компилятор, располагая информацией о типе параметров, может выполнять некоторую работу автоматически. Например, приводить переменные к нужному типу при вызове других функций. Допустим, мы хотим описать некоторый блок, который по логике работы принимает число (переменную типа int), но внутри себя вызывает другие функции, скажем puts():

<source lang="kpp" line="1"> var myblock = { |x|

   /* код блока */ 
   puts(x as string); 

}; </source>

В данном случае, в строке 3, при вызове puts(), нам пришлось привести тип переменной x к строке явным образом. Если бы этого не было сделано, то возникла бы ошибка времени исполнения, поскольку функция puts() ожидает строку. При небольших размерах кода это не составляет проблем, однако приводить тип переменной пришлось бы в каждом вызове. Для решения этой проблемы как раз рекомендуется применять типирование аргументов:

<source lang="kpp" line="1"> var myblock = { | int x |

   /* код блока */ 
   puts(x); //теперь, приведение происходит автоматически

}; </source>

[править] Встроенные блоки

Чаще всего, блоки применяются для записи небольших кусочков кода, которые, как в примерах выше, передаются в функции, для уточнения некоторых моментов. Для того чтобы облегчить работу программиста и сделать код более читаемым, был введен специальный синтаксис для передачи блоков в функции с одновременным их объявлением "на месте"; при этом, блоки записываются в сокращенной форме сразу за кодом вызова функции, после блока фактических параметров.

Покажем использование встроенных блоков на примере нахождения суммы чисел от 1 до 10, а так же получения списка четных чисел в этом же интервале. <source lang="kpp"> var s = 0; var numbers = []; (1..10).each() { |x| s += x; numbers.push(x); }; var evens = numbers.collect() { |x| x % 2 == 0 ? x : null; }.compact(); </source>

Несмотря на свою простоту и надуманность, данный пример показывает две особенности встроенных блоков, по сравнению с обычными блоками, объявляемыми как переменные. Первая особенность заключается в том, что встроенные блоки имеют доступ к локальным переменным в контексте вызова (то есть, замыкаются на него — отсюда и название "замыкания"). Например, данный блок использует внешние по отношению к нему переменные: s для накопления суммы, а numbers для добавления текущего числа в массив.

Вторая особенность реализуется в коде второго встроенного блока. Она заключается в том, что встроенные блоки могут возвращать значения без явного указания оператора return. Однако, это вожможно только для простых выражений, без применения операторов ветвления. Для получения массива целых чисел, используются два метода, объявленные в стандартной библиотеке языка K++: методы collect() и compact().

Метод collect() принимает в качестве аргумента блок. Далее, он проходит вдоль всего массива, вызывая блок с параметром текущего элемента. Результат выполнения блока помещается в другой массив, который возвращается вызывающему коду. Таким образом, этот метод может применяться для обработки элементов некоторого массива с получением другого массива из обработанных элементов. Метод compact() используется для "уплотнения" массива, путем удаления из него пустых элементов, равных null.

В вышеприведенном коде, мы используем оба этих метода для того, чтобы сначала выбрать из исходного массива все четные элементы (вместо нечетных вставляется null), а затем уплотнить полученный массив.

Реализованы эти методы могут быть примерно так: <source lang="kpp"> extend array {

   public const function array collect(block b) {
       var array result;
       this.each() { |x| result.push(b(x)); };
       return result;
   }
   public const function array compact() {
       var array result;
       this.each() { |x| result.push(b(x)) if x; };
       return result;
   }

} </source>

Примечание 1: при работе со встроенными блоками внутри обрабатывающих функций, следует быть очень осторожным. Поскольку, встроенные блоки оперируют с перменными контекста своего объявления, то они должны существовать не дольше чем существует сам блок, в котором они были объявлены и в котором был произведен вызов функции-обработчика.

Сама функция, должна работать с ними "как есть"; ни в коем случае нельзя их сохранять во внешних переменных (где они могут просуществовать дольше положенного времени). Например, такой код является недопустимым: <source lang="kpp"> var block_array = []; function AddBlock(block b) { block_array.push(b); } function f() {

   const c = 5;
   AddBlock() { |x| x * c; }; // так делать нельзя!

} </source> В коде блока мы видим использование внешнего объекта — константы c. Проблема заключается в том, что встроенные блоки не порождают собственного контекста и заимствуют набор локальных переменных из контекста вызова. Соответственно, если блок был где то сохранен, то может случиться, что контект его локальных переменных был уже удален.

В то же время, такой код вполне правомерен: <source lang="kpp"> function f() {

   var b = { |x| return x + 1; }; // а так можно
   AddBlock(b); 
   //так тоже можно, но не рекомендуется:
   AddBlock({|x| return x * 5;}); 

} </source>

Примечание 2: хотя использование связки collect(){...}.compact() не возбраняется, следует иметь в виду, что происходит двойное копирование массивов, что в конечном счете сказывается на производительности. Для задачи выбора (а не обработки) элементов из массива, более приемлемым вариантом является использование метода select(), который отбирает из исходного массива все элементы, удовлетворяющие условию, записанному в блоке:

<source lang="kpp"> var ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var selected = ary.select() { |x| x > 6; }; // [7, 8, 9, 10] </source>

При использовании метода select() промежуточного копирования не происходит, так что операция будет выполняться более эффективно.



Механизм встроенных блоков — это очень мощный инструмент, который при грамотном использовании позволяет добиться потрясающих результатов при написании программ. Программы получаются очень лаконичными, легко читаемыми и иногда даже более эффективными, чем при традиционном подходе.

К примеру, вот пример кода, который обращается на FTP сервер и выбирает из некоторой директории все файлы, имеющие расширение '.conf': <source lang="kpp"> var configs = Directory.open('ftp://example.com/media/etc')

   .browse().select() { |file| file.name =~ `\.conf$`; };

</source>

На традиционных языках, такая операция могла бы занять с десяток строк кода, тогда как здесь мы обходимся всего одной (строка разбита две части для того, чтобы уместить в ширину страницы).

Учитывая принципы полудинамической типизации, некоторые конструкции могут быть более лаконичными даже по сравнению с подобными языками. Например, следующий код на C# 2.0 позволяет увеличить все элементы массива на 2: <source lang="csharp"> int[] ary = { 1, 2, 3 }; int x = 2; Array.ConvertAll<int, int>(ary, delegate(int elem) { return elem * x; }); // { 2, 4, 6 } </source>

На K++ эта же конструкция будет выглядеть так: <source lang="kpp"> var ary = [1, 2, 3]; var x = 2; ary.convert() { |e| e * x; }; // [2, 4, 6] </source>

Конечно, можно привести массу доводов в защиту того или иного языка, укзазать преимущества однго и недостатки другого, чем с упоением и занимаются многочисленные разжигатели религиозных войн в среде IT. Мы не ставим себе целью доказать преимущества K++, скорее показать преимущества всех языков, использующих альтернативный подход к программированию в целом. К чести того же C# можно сказать, что в третей версии были введены замыкания, по краткости не уступающие K++. В целом, у каждого языка есть свои преимущества и недостатки и в общем случае сравнивать их нельзя. Можно, разве что, судить о степени удобства языка, в сочетании с его производительностью и о том, насколько эффективно он позволяет решать задачи, на которые был рассчитан и исходя из которых проектировался.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты