Strukturalıq programmalastırıw

Strukturalıq programmalastırıw — bul izbe-izlik, tańlaw (yaǵnıy, if-then-else hám switch) hám iteraciya (yaǵnıy, for hám while) sıyaqlı basqarıw aǵımın kodlaw ushın blokqa tiykarlanǵan derek kodı strukturasın qollanatuǵın, derek kodı menen xarakterlenetuǵın programmalastırıw paradigması. 

Dáslep, strukturalıq programmalastırıw háreketiniń oraylıq maqseti — goto operatorına bolǵan mútájlikti hám onıń qollanılıwın joq etiw edi. goto kúshli hám qolaylı aǵım basqarıwın usınǵanlıqtan, ol qálegen quramalı algoritmdi jazıw ushın qollanılıwı múmkin, biraq nátiyjedegi kod kóbinese spagetti kodı dep táriyiplenetuǵın áhmiyetli sapa máselelerine iye boladı. Strukturalıq programmalastırıw goto-nı jaqsıraq kodqa alıp keletuǵın konstrukciyalar menen almastıradı. Bul paradigma keń tarqaldı hám kóp jaǵdaylarda goto-nı almastırıw maqsetine eristi. Haqıyqatında da, onıń keń tarqalǵanlıǵı sonshelli, programmalıq támiynattı islep shıǵıwdıń kóp bólimi ushın bul ápiwayı kod jazıwdıń usılı bolıp tabıladı, endi burınǵıday dodalaw teması emes.

Strukturalıq programmalastırıw geyde modulli programmalastırıw menen baylanıslı, degen menen olar hár qıylı. Ulıwma alǵanda, strukturalıq modullik sezimin hám nátiyjeli hám ańsat túsiniliwi hám ózgertiliwi ushın jazılǵanın bildiredi, biraq bul tar mániste strukturalıq programmalastırıwdıń mánisi emes.

Strukturalıq programmalastırıw keń tarqalǵannan keyin, onnan aldıńǵı programmalastırıw stili keyinirek strukturalanbaǵan programmalastırıw dep ataldı. Texnikalıq jaqtan programmalastırıw paradigması bolsa da, ol basqa paradigmalardan qasaqana proektlestirilmegenligi menen ayrıqshalanadı. Ol tek strukturalıq programmalastırıw oylap tabılǵanǵa shekemgi eń sońǵı jaǵday edi.

 Tariyxı 
Paradigma 1950-jıllardıń aqırında ALGOL 58 hám ALGOL 60 programmalastırıw tilleriniń payda bolıwı menen payda boldı, sońǵısı blok strukturaların qollawdı óz ishine aldı. 

Onıń keń tarqalıwına hám keń qabıl etiliwine, dáslep akademiyada hám keyin ámeliyatta, tásir etken faktorlarǵa 1966-jılı házir strukturalıq programma teoreması dep atalatuǵın nárselerdiń baspadan shıǵıwı hám 1968-jılı Niderlandiyalı kompyuter ilimpazı Edsger V. Deykstra tárepinen «Goto Operatorı Zıyanlı Dep Esaplanadı» atlı tásirli ashıq xattıń baspadan shıǵıwı kiredi, ol strukturalıq programmalastırıw terminin oylap tapqan.

 Teoriyalıq tiykarı 
Strukturalıq programma teoreması strukturalıq programmalastırıwdıń teoriyalıq tiykarın usınadı. Ol programmalardı biriktiriwdiń úsh usılı — izbe-izlik, tańlaw hám iteraciya — hár qanday esaplanatuǵın funkciyanı ańlatıw ushın jetkilikli ekenin aytadı. Bul baqlaw strukturalıq programmalastırıw háreketinen kelip shıqpaǵan; bul strukturalar oraylıq processordıń kórsetpeler ciklin, sonday-aq Tyuring mashinasınıń jumısın táriyiplew ushın jetkilikli. Sonlıqtan, processor bárqulla usı mániste «strukturalıq programmanı» orınlaydı, hátte onıń yadtan oqıytuǵın kórsetpeleri strukturalıq programmanıń bir bólimi bolmasa da. Degen menen, avtorlar ádette nátiyjeni Byom hám Yakopinidiń 1966-jılǵı maqalasına baylanıstıradı, bálkim Deykstranıń ózi de usı maqalaǵa silteme bergenlikten. Strukturalıq programma teoreması paydalı strukturalanǵan programmanı qalay jazıwdı hám analizlewdi qarastırmaydı. Bul máseleler 1960-jıllardıń aqırında hám 1970-jıllardıń basında qarastırıldı, bunda tiykarǵı úleslerdi Deykstra, Robert V. Floyd, Toni Xoar, Ole-Yoxan Dal hám Devid Gris qostı.

 Dodalaw 
Strukturalıq programmalastırıwdıń dáslepki qabıllawshılarınıń biri P. Dj. Plauger strukturalıq programma teoremasına óziniń reakciyasın bılay táriyipleydi:

Donald Knut programmalardıń dálilleniwi múmkinligi menen jazılıwı kerek degen principke kelisti, biraq ol GOTO operatorın alıp taslawǵa qarsı shıqtı hám 2018-jılǵa shekem onı óz programmalarında qollanıwdı dawam etti. Óziniń 1974-jılǵı «Goto Operatorları Menen Strukturalıq Programmalastırıw» atlı maqalasıda ol tikkeley sekiriw dálilleniwin joytpay, anıǵıraq hám nátiyjelirek kodqa alıp keletuǵın jaǵdaylarǵa mısallar keltirdi. Knut jeńilirek strukturalıq sheklewdi usındı: Programmanıń aǵım sxemasın barlıq alǵa tarmaqlanıwlar shep jaǵında, barlıq artqa tarmaqlanıwlar oń jaǵında hám hesh qanday tarmaqlanıwlar bir-birin kesip ótpeytuǵınday etip sızıw múmkin bolıwı kerek. Kompilyatorlar hám graf teoriyasın biletugın geyparalar tek qısqartılatuǵın aǵım graflarına ruqsat beriwdi qolladı.

Strukturalıq programmalastırıw teoretikleri 1970-jıllarda IBM izertlewshisi Xarlan Mills óziniń strukturalıq programmalastırıw teoriyası interpretaciyasın «Nyu-York Tayms» izertlew faylı ushın indekslew sistemasın islep shıǵıwda qollanǵannan keyin úlken bir awqamlasqa iye boldı. Joybar úlken injenerlik jetiskenlik boldı hám basqa kompaniyalardaǵı menedjerler onı strukturalıq programmalastırıwdı qabıllawdı qollap-quwatlaw ushın atap ótti, degen menen Deykstra Millstiń interpretaciyasınıń baspadan shıqqan jumıstan ayırmashılıq etetuǵın usılların sınǵa aldı.

1987-jılǵa kelip te kompyuter ilimi jurnalında strukturalıq programmalastırıw máselesin kóteriw ele múmkin edi. Frank Rubin sol jılı «'GOTO Zıyanlı Dep Esaplanadı' Zıyanlı Dep Esaplanadı» atlı ashıq xatı menen usılay isledi. Bir neshe qarsılıqlar boldı, sonıń ishinde Deykstranıń Rubinni de, oǵan juwap bergende basqa jazıwshılardıń bergen kelisimlerin de qatań sınǵa alǵan juwabı da bar.

 Nátiyje 
XX ásirdiń aqırına kelip, derlik barlıq kompyuter ilimpazları strukturalıq programmalastırıw túsiniklerin úyreniw hám qollanıw paydalı ekenine isendi. Dáslep programmalastırıw strukturaları joq bolǵan joqarı dárejeli programmalastırıw tilleri, mısalı FORTRAN, COBOL hám BASIC, endi olarǵa iye.

 Basqarıw strukturaları 
Strukturalıq programma teoremasına sáykes, programma úsh basqarıw strukturasınan ibarat:

 Izbe-izlik
 Izbe-izlikte orınlanatuǵın tártiplesken operatorlar.

 Strukturalıq programma teoremasınıń bir bólimi bolmasa da, tiller ulıwma alǵanda kod izbe-izligin bir operator sıyaqlı isleytuǵınday etip gruppalaytuǵın blok koncepciyasın óz ishine aladı. Bir til operatorlar izbe-izligin blok retinde belgilew usılın óz ishine aladı, eger ol aǵım basqarıwın óz ishine almasa, izbe-iz, joqarıdan tómenge orınlanadı. Mısalı, C hám basqa figuralı qawsırmalı tillerde blok figuralı qawsırmalar {...} ishine alınadı, PL/I hám Pascal-da BEGIN...END ishine alınadı hám Python-da sheginiw menen kórsetiledi. Geypara bloklar hárbir struktura ushın hár qıylı sintaksis paydalanadı. Mısalı, ALGOL 68-de if-operatorı if...fi ishine alınadı.

 Tańlaw
 Bir blok (ol bir operator bolıwı múmkin) programmanıń jaǵdayına baylanıslı orınlanadı. Bul konstrukciya kóbinese if, then hám else sıyaqlı gilt sózler menen ańlatıladı. Shártli operatordıń keminde bir durıs shártli jolı bolıwı kerek hám hárbir shártli joldıń tek bir shıǵıw noqatı bolıwı kerek.

 Iteraciya
 (qaytalaw dep te ataladı) Blok (ol bir operator bolıwı múmkin) programma belgili bir jaǵdayǵa jetkenshe qayta-qayta orınlanadı. Bul konstrukciya kóbinese while, repeat, for yamasa do-until sıyaqlı gilt sózler menen ańlatıladı. Strukturalıq programmalastırıw aǵımdı tek bir kirisiw noqatı hám tek bir shıǵıw noqatı bolıwı menen sheklegenine qaramastan, kópshilik tiller bir neshe, erte shıǵıwǵa imkaniyat beredi.

ortağa|nobaý|649x649 nükte|Úsh tiykarǵı úlginiń — izbe-izlik, tańlaw hám iteraciyanıń — NS diagrammaları (kók) hám aǵım sxemaları (jasıl) járdeminde grafikalıq kórinisi.

 Til qollap-quwatlawı 
Ulıwma alǵanda, bir til bir yamasa bir neshe programmalastırıw paradigmasın qollap-quwatlawǵa arnalǵan. Sol waqıtta, eger bir til paradigmanı qollap-quwatlawǵa arnalmaǵan bolsa da, ol bárqulla sol usılda paydalanılıwı múmkin. Teoriyada, qálegen tildi strukturalıq programmalastırıw ushın paydalanıwǵa boladı. Strukturalıq programmalastırıw ushın dáslep qollanılǵan tillerdiń geyparalarına ALGOL, Pascal, PL/I, Ada hám RPL kiredi, biraq sol waqıttan berli kópshilik jańa proceduralıq programmalastırıw tilleri strukturalıq programmalastırıwdı xoshametlew ushın ózgesheliklerdi qostı hám geyde onıń qıyınshılıqlarınan qashıw ushın qasaqana GOTO sıyaqlı ózgesheliklerdi alıp tasladı.

 Keń tarqalǵan awıwlar 
GOTO-nı qollanıw tiykarınan strukturalıq konstrukciyalar menen almastırılǵanına qaramastan, kópshilik tiller strukturalıq programma teoremasına qatań sáykes kelmeytuǵın ózgesheliklerdi usınadı. 

 Erte qaytıw 
Kóp tiller funkciyadan bir neshe, erte qaytıw shıǵıw noqatlarına imkaniyat beretuǵın return operatorın usınadı. Funksiya blok bolǵanlıqtan, bul ózgeshelik teoremada táriyiplengen jalǵız shıǵıw noqatına qarama-qarsı.

 Erte shıǵıw 
Kóp tiller bloktan erte shıǵıwdı támiyinleydi (return arqalı emes). Mısalı, cikl konstrukciyası onıń aqırına jetpesten aldın cikl blogınan shıǵatuǵın break operatorın qollap-quwatlawı múmkin. Teorema táriyiplegenindey, bunday erte shıǵıw logikası tarmaqlanıwlar yamasa testler qosıw arqalı saplastırıwǵa boladı, biraq bul ádewir quramalılıq qosıwı múmkin. C bul konstrukciyalardıń erte hám belgili mısalı bolıp tabıladı. Geypara jańa tillerde sonıń menen birge «belgilengen breykler» de bar, olar tek ishki cikldan ǵana emes, al kóbirek cikllardan shıǵıwǵa imkaniyat beredi.

Bir neshe shıǵıwlardıń zárúrligi hár túrli sebeplerge baylanıslı payda bolıwı múmkin, kóbinese ya funkciyanıń basqa isleytuǵın jumısı qalmaǵanlıǵı sebepli (eger mánis qaytarıp atırǵan bolsa, ol esaplawdı tamamlaǵan), ya bolmasa onıń dawam etiwine kesent etetuǵın «ayrıqsha» jaǵdaylarǵa ushıraǵanlıǵı sebepli, sonlıqtan ayrıqsha jaǵdaylardı qayta islewdi talap etedi.

Erte shıǵıwdıń bir mashqalası — tazalaw operatorları orınlanbawı múmkin. Mısalı, ajıratılǵan yad bosatılmaydı yamasa ashıq fayllar jabılmaydı, bul yad aǵıwına hám resurs aǵıwına alıp keledi. Tazalaw hárbir qaytıw ornında orınlanıwı kerek, bul hálsiz hám ańsat qátelerge alıp keliwi múmkin. Mısalı, keyingi islep shıǵıwda, baǵdarlamashı tárepinen bir return operatorı itibarǵa alınbawı múmkin hám funkciyanıń aqırında orınlanıwı kerek bolǵan háreket (mısalı, baqlaw operatorı) barlıq jaǵdaylarda orınlanbawı múmkin. Pascal, Lisp hám OCaml sıyaqlı return operatorı joq tillerde bul másele joq.

Kópshilik zamanagóy tiller bunday aǵıwlardıń aldın alıw ushın til dárejesinde qollap-quwatlawdı usınadı (resurslardı basqarıwǵa qarań). GOTO-nı hám tazalaw blogın paydalanıwdıń strukturalıq alternatvası retinde, qorǵanıw orınlanıw bir bloktan shıqqanda belgili bir kodtıń orınlanıwın támiyinleydi; kóbinese try-finally retinde ayrıqsha jaǵdaylardı qayta islew menen baylanıslı ámelge asırıladı. C++-te alternativ usıl — resurslardı alıw — bul inicializaciya, ol resurslardı bosatıw ushın funkciyadan shıqqanda ádettegi stekti tazalawdı (ózgeriwshilerdi bosatıw) paydalanıp, lokal ózgeriwshilerdegi destruktorlardı shaqıradı.

Kent Bek, Martin Fauler hám olardıń avtorlas joldasları ózleriniń refaktoring kitaplarında ishki jaylasqan shártli operatorlardıń qarawıl shártler menen belgilengen bir neshe shıǵıwları bar belgili bir tegisirek strukturaǵa qaraǵanda túsinip alıw qıyınıraq bolıwı múmkin ekenin aytqan. Olardıń 2009-jılǵı kitabı anıq aytadı: «bir shıǵıw noqatı haqıyqıy paydalı qaǵıyda emes. Anıqlıq — bul tiykarǵı princip: Eger metod bir shıǵıw noqatı menen anıǵıraq bolsa, bir shıǵıw noqatın paydalanıń; basqa jaǵdayda paydalanbań». Olar tek ishki jaylasqan shártli operatorlardan ibarat funkciyanı qarawıllawshı qaytıw (yamasa throw) operatorları izbe-izligine túrlendiriw ushın sheshim usınadı, onnan keyin bir qorǵalmaǵan blok keledi, ol ádettegi jaǵday ushın kodtı óz ishine alıwǵa arnalǵan, al qorǵalǵan operatorlar azıraq keń tarqalǵan jaǵdaylardı (yamasa qátelerdi) qayta islew ushın jobalanǵan. Gerb Satter hám Andrey Aleksandresku da ózleriniń 2004-jılǵı C++ boyınsha keńesler kitabında jalǵız shıǵıw noqatı eskirgen talap ekenin aytadı.

Óziniń 2004-jılǵı sabaqlıǵında Devid Uatt bılay dep jazadı: «jalǵız kirisiwli kóp shıǵıwlı basqarıw aǵımları kóbinese qálewge ılayıq». Tennenttiń dizbekler haqqındaǵı freymvork túsinigin paydalanıp, Uatt zamanagóy programmalastırıw tillerinde tabılatuǵın basqarıw aǵımı konstrukciyaların birdey táriyipleydi hám kóp shıǵıwlı basqarıw aǵımları kontekstinde nege belgili bir sekvenser túrleriniń basqalardan artıqmashlıqqa iye ekenin túsindiriwge háreket etedi. Uatt sheklenbegen gotolar (sekiriw dizbekleri) jaman ekenin jazadı, sebebi sekiriwdiń maqseti programmanı oqıwshıǵa sekiriwdiń maqseti bolǵan haqıyqıy belgini yamasa adresti tawıp, teksergenshe óz-ózinen túsinikli emes. Kerisinshe, Uatt qaytarıw dizbeginiń konceptual niyetiniń onıń óz kontekstinen, onıń maqsetin tekseriwge mútáj bolmastan, anıq ekenin aytadı. Uatt escape dizbekleri dep atalatuǵın dizbekler klasınıń, «tekst boyınsha orap turǵan buyrıq yamasa proceduranıń orınlanıwın toqtatatuǵın dizbekler» retinde anıqlanǵan, cikllardan shıǵıwlardı (sonıń ishinde kóp dárejeli shıǵıwlardı) da, return operatorların da óz ishine alatuǵının jazadı. Uatt sonıń menen birge C sıyaqlı tillerde sekiriw dizbekleri (gotolar) biraz sheklengenine qaramastan, bunda maqset lokal blok yamasa onı qamtıytuǵın sırtqı blok ishinde bolıwı kerek, bul sheklewdiń ózi C-degi gotolardıń niyetiniń óz-ózinen táriyiplewshi bolıwı ushın jetkilikli emes ekenin hám sonlıqtan olar ele de «spagetti kodın» payda ete alatuǵının atap ótedi. Uatt sonıń menen birge ayrıqsha jaǵday dizbekleriniń escape hám sekiriw dizbeklerinen qalay ayırmashılıq etetuǵının da tekseredi; bul usı maqalada keyingi bólimde túsindiriledi.

Joqarıdaǵılarǵa qarama-qarsı, Bertran Meyer óziniń 2009-jılǵı sabaqlıǵında break hám continue sıyaqlı kórsetpelerdiń «tek ǵana eski goto-nıń qoy terisin kiygen kórinisi» ekenin jazdı hám olardıń qollanılıwına qatań túrde qarsı shıqtı.

 Ayrıqsha jaǵdaylardı qayta islew 
Piter Ritchi, principte, hátte qaytarıwdan dál aldın bir ǵana taslawdıń ózi jalǵız shıǵıw principin buzıw bolıp tabılatuǵının atap ótedi, biraq Djeykstranıń qaǵıydaları ayrıqsha jaǵdaylardı qayta islew programmalastırıw tillerinde paradigmaǵa aylanǵanǵa shekem jazılǵanın dálilleydi, sonlıqtan ol bir qaytarıw noqatına qosımsha túrde qálegen sanlı throw noqatlarına ruqsat beriwdi usınadı. Ol jalǵız shıǵıw dúziw maqsetinde ayrıqsha jaǵdaylardı oralatuǵın sheshimlerdiń tereńirek jaylasıw tereńligine iye ekenin hám sonlıqtan túsinip alıw qıyınıraq ekenin atap ótedi hám hátte ayrıqsha jaǵdaylardı qollap-quwatlaytuǵın programmalastırıw tillerine bunday sheshimlerdi qollanıwdı usınatuǵınlardı júk kultı pikirlewi menen shuǵıllanıwda ayıplaydı.

Devid Uatt sonday-aq ayrıqsha jaǵdaylardı qayta islewdi dizbekler freymvorkında analizleydi (usı maqalada aldınǵı bólimde erte shıǵıwlar haqqında kirgizilgen.) Uatt anormal jaǵday (ádette arifmetikalıq tolıp ketiwler yamasa fayl tabılmaǵan sıyaqlı kirgiziw/shıǵarıw sátsizlikleri menen mısal etiledi) «qanday da bir tómen dárejeli programma birliginde anıqlanatuǵın, biraq [ol ushın] qayta islewshi joqarı dárejeli programma birliginde anaǵurlım tábiyiy jaylasqan» qáte túri ekenin atap ótedi. Mısalı, programma bir neshe ret fayl oqıwǵa shaqırıwlar óz ishine alıwı múmkin, biraq fayl tabılmaǵanda orınlanatuǵın háreket sóz etilip atırǵan fayldıń programma ushın mánisi (maqseti)ne baylanıslı hám sonlıqtan bul anormal jaǵday ushın qayta islew rutinası tómen dárejeli sistema kodında jaylasa almaydı. Uatts jáne de shaqırıwshıda status bayraqların tekseriwdi kirgiziw, jalǵız shıǵıwlı strukturalı programmalastırıw yamasa hátte (kóp shıǵıwlı) qaytarıw dizbekleri talap etetuǵınday, «qosımsha kodı status bayraqlarınıń testleri menen tolıp qaladı» hám «baǵdarlamashı umıtshaqlıq penen yamasa erinsheklik penen status bayraǵın tekseriwdi qaldırıp ketiwi múmkin. Haqıyqatında da, status bayraqları menen kórsetilgen anormal jaǵdaylar ádepki túrde itibarǵa alınbaydı!» Ol status bayraqların tekseriwge kerisinshe, ayrıqsha jaǵdaylardıń kerisinshe ádepki háreketke iye ekenin atap ótedi, baǵdarlamashı ayrıqsha jaǵdaydı qanday da bir usılda anıq qayta islemese, programmanıń toqtawına sebep boladı, múmkin onı qasaqana itibarǵa almaw ushın kod qosıw arqalı. Usı argumentlerge tiykarlanıp, Uatt sekiriw sekvenserleri (dizbekleri) yamasa qashıw sekvenserleri (aldınǵı bólimde talqılanǵan) joqarıda talqılanǵan semantikaǵa iye arnawlı ayrıqsha jaǵday sekvenseri sıyaqlı sáykes emes degen juwmaqqa keledi.

Louden hám Lambert sabaqlıǵı ayrıqsha jaǵdaylardı qayta islewdiń while ciklleri sıyaqlı strukturalıq programmalastırıw konstrukciyalarınan ayırmashılıq etetuǵının ayrıqsha kórsetedi, sebebi basqarıwdıń ótkiziliwi «programmanıń haqıyqıy ótkeriw bolatuǵın orınnan basqa bir noqatında ornatıladı. Haqıyqıy ótkeriw bolatuǵın noqatta, basqarıwdıń shınında da ótkeriletuǵını haqqında hesh qanday sintaksislik kórsetpe bolmawı múmkin». Kompyuter ilimi professorı Arvind Kumar Bansal sonıń menen birge ayrıqsha jaǵdaylardı qayta islewdi ámelge asıratuǵın tillerde, hátte ayrıqsha jaǵdaylar bolmaǵanda jalǵız shıǵıw qásiyetine iye bolǵan for sıyaqlı basqarıw strukturalarınıń da ayrıqsha jaǵdaylar bar bolǵanda oǵan iye bolmaytuǵının atap ótedi, sebebi ayrıqsha jaǵday basqarıw strukturasınıń hár qanday bóliminde erte shıǵıwǵa sebep bolıwı múmkin; mısalı, eger init() for (init(); check(); increm()) de ayrıqsha jaǵday taslasa, onda check()-ten keyingi ádettegi shıǵıw noqatına jetpeydi. Basqalardıń bir neshe aldıńǵı izertlewlerine (1999–2004) hám óz nátiyjelerine silteme berip, Uestli Veymer hám Djordj Nekula ayrıqsha jaǵdaylar menen baylanıslı áhmiyetli bir másele — olardıń «baǵdarlamashılar ushın oylaw qıyın bolǵan jasırın basqarıw aǵımı jolların» payda etiwi ekenin jazdı.

Kodtı jalǵız shıǵıw noqatlarına sheklew zárúrligi parallel esaplawǵa baǵdarlanǵan OpenMP sıyaqlı geypara zamanagóy programmalastırıw ortalıqlarında payda boladı. OpenMP-dan alınǵan hár túrli parallel konstrukciyalar, mısalı parallel do, parallel konstrukt ishinen sırtqa erte shıǵıwǵa imkaniyat bermeydi; bul sheklew barlıq túrdegi shıǵıwlardı, sonıń ishinde break hám ayrıqsha jaǵdaylardı da óz ishine aladı, biraq eger sekiriw maqseti de parallel konstrukciya ishinde bolsa, olardıń hámmesi parallel konstrukciya ishinde ruqsat etiledi.

 Kóp kiriw 
Salıstırmalı túrde siyrek, funkciyalar kóp kiriwge ruqsat beredi. Bul kóbinese tek korutinaǵa (yamasa generator/yarım korutinaǵa) qayta kiriw bolıp tabıladı, bunda funkciya basqarıwdı (hám múmkin mánisti) beredi, biraq keyin ózi toqtaǵan jerden dawam etiliwi múmkin. Bunday programmalastırıwdıń bir qatar keń tarqalǵan qollanılıwları bar, ásirese aǵımlar (ásirese kirgiziw/shıǵarıw), jaǵday mashinaları hám parallellik ushın. Kod orınlanıwı kózqarasınan, korutinadan shıǵıw funkciyadan qaytıwǵa qaraǵanda strukturalıq programmalastırıwǵa jaqınıraq, sebebi funkciya haqıyqatında da tamamlanbaǵan hám qayta shaqırılǵanda dawam etedi – bul erte shıǵıw emes. Degen menen, korutinalar bir neshe funkciyanıń orınlanıw jaǵdayına iye ekenin bildiredi – funkciyalardıń bir shaqırıw stegi ornına – hám solay etip quramalılıqtıń basqa bir túrin kirgizedi.

Funkciyalardıń funkciyanıń qálegen poziciyasına kiriwge ruqsat beriwi siyrek ushırasadı, sebebi bul jaǵdayda programma jaǵdayı (mısalı, ózgeriwshi mánisleri) inicializaciyalanbaǵan yamasa anıq emes boladı hám bul goto-ǵa uqsas.

 Jaǵday mashinaları 
Geypara programmalar, ásirese parserler hám baylanıs protokolları, tiykarǵı strukturalarǵa ańsat qısqartılmaytuǵın usılda bir-biriniń izinen keletuǵın bir qatar jaǵdaylarǵa iye hám geypara baǵdarlamashılar jaǵday ózgerislerin jańa jaǵdayǵa sekiriw menen ámelge asıradı. Bunday jaǵday almastırıw Linux yadrosında kóp qollanıladı.

Degen menen, bul sistemalardı hárbir jaǵday ózgerisin bólek funkciya etip hám aktiv jaǵdaydı kórsetiw ushın bir ózgeriwshini paydalanıp strukturalastırıw múmkin (tramplinge qarań). Alternativ túrde, olar tramplindi joq etetuǵın korutinalar arqalı ámelge asırılıwı múmkin.

 Derekler 

Kategoriya:Programmalastırıw paradigmaları
__BÖLİDİMÖNDEMEW__