Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

12-lekciya_paradigma_qq

.pdf
Скачиваний:
0
Добавлен:
18.01.2026
Размер:
262.75 Кб
Скачать
f(x)=x2

12-lekciya. Funkcionallıq programmalastırıw. Taza funkсiyalar. Rekursiya.

Jobası:

1.Taza funkciyalar (Pure Functions): Anıqlaması, qásiyetleri hám deterministik tábiyatı.

2.Sırtqı tásirler (Side Effects) hám Siltemelik móldirlik (Referential

Transparency).

3.Rekursiya: Funkcionallıq iteraciyanıń tiykarı hám onıń islew mexanizmi.

4.Aqırǵı rekursiya (Tail Recursion) hám yadtı optimallastırıw.

Taza funkciyalar hám determinizm

Funkcionallıq programmalastırıw paradigmasınıń (FP) eń oraylıq túsinigi – bul "Taza funkciyalar" (Pure Functions). Taza funkciya dep sonday funkciyaǵa aytıladı, onıń qaytaratuǵın nátiyjesi tek ǵana oǵan berilgen kirisiw argumentlerine ǵárezli boladı hám ol heshqanday sırtqı tásirge (side effect) iye bolmaydı. Ápiwayı sóz benen aytqanda, eger siz taza funkciyaǵa birdey argumentlerdi (mısalı, 2 hám 3 sanların) júz márte berseńiz de, ol hárbir jaǵdayda anıq birdey nátiyjeni (mısalı, 5) qaytarıwı kerek. Bul matematikalıq funkciyasına júdá uqsas: x=2 bolǵanda nátiyje hár qashan 4 ke teń.

Taza funkciyalardıń eń baslı qásiyeti – bul "Determinizm". Imperativ programmalastırıwda funkciyalar kóbinese global ózgeriwshilerge, waqıtqa yamasa paydalanıwshınıń háreketine ǵárezli bolıwı múmkin. Mısalı, random() funkciyası taza emes, sebebi onı eki ret shaqırǵanda hár túrli san shıǵadı. Yamasa fayldan oqıytuǵın funkciya da taza bolmaydı, sebebi fayl mazmunı ózgergen bolıwı múmkin. Taza funkciyalar bolsa turaqlı hám boljawǵa bolatuǵın (predictable) bolıp, olar programmanıń isenimliligin arttıradı. Programmist kodtı oqıǵanda, onıń tek óz argumentleri menen jumıs isleytuǵının bilip, arqayın boladı. Taza funkciyalar "Sırtqı tásirlerden" (Side Effects) azat bolıwı shárt. Sırtqı tásir degenimiz – funkciyanıń óz shegarasınan tısqarıdaǵı dúnyaǵa tásir etiwi. Mısalı, ekranda jazıw shıǵarıw (print), maǵlıwmatlar bazasına jazıw, global ózgeriwshiniń mánisin ózgertiw yamasa HTTP soraw jiberiw – bulardıń barlıǵı sırtqı tásirler. Taza funkciya bulardı islemeydi; ol tek maǵlıwmatlardı aladı, esaplaydı hám jańa mánisti qaytaradı (return). Bul sheklew qatal bolıp kóringeni menen, ol qátelerdiń (bugs) payda bolıw itimalın ádewir azaytadı, sebebi funkciya basqa kod bóleklerin "jasırın túrde" buzıp qoya almaydı.

Taza funkciyalardıń ámeliy paydası oǵada úlken. Birinshiden, olardı testlew (Unit Testing) júdá ańsat, sebebi olar ushın quramalı ortalıqtı (Mock objects) jaratıw shárt emes. Ekinshiden, olar "Parallel esaplawlar" ushın eń qolaylı qural bolıp tabıladı. Taza funkciyalar global yadqa tiymeytuǵınlıqtan, olardı bir waqıtta bir neshe processor yadlarında qorıqpastan islete beriwge boladı. Úshinshiden, olar "Keshlengish" (Cacheable) boladı: eger funkciya qımbat esaplawlardı talap etse, onıń nátiyjesin bir ret esaplap, yadta saqlap qoyıwǵa boladı (Memoization), sebebi nátiyje argumentler ózgermese, ózgermeydi.

Siltemelik móldirlik hám Rekursiya tiykarları

Taza funkciyalar menen baylanıslı jáne bir áhmiyetli túsinik – bul "Siltemelik móldirlik" (Referential Transparency). Bul princip boyınsha, eger funkciya taza bolsa, programma kodındaǵı funkciya shaqırıwın onıń qaytaratuǵın nátiyjesi menen almastırsaq, programmanıń islew tártibi ózgermewi kerek. Mısalı, eger qosiw(2, 3) funkciyası 5 ti qaytarsa, kodtıń ishinde x = qosiw(2, 3) + 4 degendi x = 5 + 4 dep ózgertsek te, nátiyje birdey bolıp qala beredi. Bul kompilyatorlarǵa kodtı optimallastırıwǵa hám baǵdarlamashılarǵa kodtıń mánisin ańsat túsiniwge múmkinshilik beredi.

Endi funkcionallıq programmalastırıwdaǵı iteraciya (tákirarlaw) máselesine ótsek. Imperativ tillerde biz for yamasa while cikllerin qollanamız hám i esaplaǵıshınıń mánisin turaqlı ózgertip (mutate) turamız. Biraq taza funkcionallıq paradigmada ózgeriwshilerdiń mánisin ózgertiw (mutability) qollapquwatlanbaydı. Sol sebepli, cikllerdiń ornına "Rekursiya" qollanıladı. Rekursiya – bul funkciyanıń ózin-ózi shaqırıw procesi. Másele kishirek bóleklerge bólinedi hám funkciya máseleniń eń kishi bólegin sheshkenge shekem ózin qayta-qayta shaqıra beredi.

Rekursiv funkciya ádette eki tiykarǵı bólekten turadı: "Baza jaǵdayı" (Base case) hám "Rekursiv adım" (Recursive step). Baza jaǵdayı – bul toqtaw noqatı. Eger baza jaǵdayı bolmasa, funkciya ózin sheksiz shaqıra beredi hám bul "Stack Overflow" (Stektiń tolıp ketiwi) qátesine alıp keledi. Mısalı, faktorialdı esaplawda (n!) baza jaǵdayı n=1yamasa n=0 bolǵanda 1 di qaytarıw bolıp tabıladı. Rekursiv qádem bolsa, máseleni qalay qısqartıw kerekligin kórsetedi: n!=n×(n−1)!. Bunda funkciya (n−1)argumenti menen ózin qayta shaqıradı.

Rekursiyanıń islew mexanizmi kompyuterdiń "Stek" (Stack) yadına tiykarlanǵan. Hárbir funkciya shaqırılǵanda, yadtan jańa "freym" (frame - kishi blok) ajıratıladı, ol jerde funkciyanıń lokal ózgeriwshileri hám qaytıw adresi saqlanadı. Rekursiyada bul freymler biri-biriniń ústine jıynala beredi. Mısalı, 5! di esaplaw ushın dáslep 5, soń 4, 3, 2, 1 ushın bes qabat freym ashıladı. Eń tómengi qabat (1) juwap qaytarǵannan keyin ǵana, freymler joqarıdan tómenge qaray jabıla baslaydı hám esaplaw orınlanadı.

Aqırǵı rekursiya hám onıń áhmiyeti

Dástúrli rekursiyanıń eń úlken kemshiligi – bul yadtı (stekti) kóp paydalanıwı. Eger iteraciyalar sanı júdá kóp bolsa (mısalı, 10 000 ret), stek tolıp ketedi hám programma qulaydı. Imperativ for cikli bolsa bunday mashqalaǵa iye emes, sebebi ol bir ǵana yadtı qayta-qayta paydalanadı. Bul mashqalanı sheshiw ushın funkcionallıq tiller "Aqırǵı rekursiya" (Tail Recursion) degen arnawlı usıldı qollanadı. Aqırǵı rekursiya – bul sonday jaǵday, bunda rekursiv shaqırıw funkciyanıń orınlaytuǵın eń sońǵı ámeli bolıp tabıladı.

Ápiwayı rekursiyada funkciya ózin shaqırıp bolǵannan keyin de qanday da bir esaplawdı (mısalı, kóbeytiw yamasa qosıw) orınlawı kerek boladı. Sol sebepli, eski freymdi yadda saqlap turıwǵa májbúr boladı. Al aqırǵı rekursiyada bolsa,

funkciya ózin shaqırǵannan keyin heshqanday jumıs qaldırmaydı, barlıq esaplawlar argument retinde keyingi qádemge uzatıladı. Mısalı, faktorialdı esaplaǵanda, aǵımdaǵı kóbeymeni akkumulyator (jıynawshı) argumenti retinde funkciyaǵa qosıp jiberiw kerek. Aqırǵı rekursiyanıń eń úlken paydası – bul "Aqırǵı shaqırıwdı optimallastırıw" (Tail Call Optimization - TCO). Zamanagóy funkcionallıq tillerdiń (Haskell, Scala, Scheme) kompilyatorları aqırǵı rekursiyanı tanıydı hám onı avtomat túrde ápiwayı ciklge (loop) aylandıradı. Bunda kompilyator jańa stek freymin jaratpaydı, al eski freymdi tazalap, onıń ornına jańa mánislerdi jazadı. Nátiyjede, rekursiv kod jazılǵan bolsa da, kompyuterdiń ishinde ol while cikli sıyaqlı effektiv hám yadtı únemli paydalanıp isleydi.

Juwmaqlap aytqanda, taza funkciyalar hám rekursiya – funkcionallıq programmalastırıwdıń eki qanatı. Taza funkciyalar kodtıń logikasın durıs, testlewge qolaylı hám qáwipsiz etse, rekursiya (ásirese aqırǵı rekursiya) matematikalıq elegantlıqtı joǵaltpastan, quramalı iterativ processlerdi ámelge asırıwǵa imkaniyat beredi. Bul usıllar baǵdarlamashını "mashina qalay isleydi" dep emes, al "másele qalay súwretlenedi" (deklarativ) dep oylawǵa úyretedi, bul bolsa kodtıń sapasın jańa dárejege kóteredi.

BAQLAW SORAWLARÍ:

1.Taza funkciya (Pure Function) degenimiz ne hám onıń imperativ funkciyadan ayırmashılıǵı qanday?

2."Sırtqı tásir" (Side Effect) túsinigine anıqlama beriń hám mısallar keltiriń.

3.Siltemelik móldirlik (Referential Transparency) kodtı optimallastırıwǵa qalay járdem beredi?

4.Rekursiya hám iteraciya (cikller) arasındaǵı tiykarǵı ayırmashılıq nede?

5.Aqırǵı rekursiya (Tail Recursion) degen ne hám ol "Stack Overflow" mashqalasın qalay sheshedi?

Соседние файлы в предмете Programmalastiriw paradigmalari