Sulund (informaatika): erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
P teisaldas lehekülje Sulund pealkirja Sulund (informaatika) alla
Resümee puudub
1. rida:
'''Sulund''' on [[informaatika]]s avaldis (harilikult [[funktsioon (programmeerimine)|funktsioon]]), millel võib olla vabasidvabu [[muutuja]]id koos keskkonnaga, mis seob neid muutujaidseob ("sulgub" ümber nende muutujate).<ref>{{netiviide|URL=http://www.jibbering.com/faq/faq_notes/closures.html|Pealkiri=''Javascript Closures''|Väljaanne=Notes on the comp.lang.javascript FAQ|Autor=Richard Cornford}}</ref>
 
Mõnikord nimetatakse sulunditeks ka lihtsalt [[anonüümne funktsioon|anonüümseid funktsioone]].<ref>{{netiviide|URL=http://php.net/manual/en/functions.anonymous.php|Pealkiri=''Anonymous functions''|Väljaanne=PHP Manual}}</ref>
 
KasutadesSulundeid sulundeidkasutades on võimalik implementeeridasaab [[objektorienteeritud programmeerimine|objektorienteeritud programmeerimiseks]] implementeerida [[objekt (programmeerimine)|objekte]] ja [[klass (programmeerimine)|klasse]].<ref>{{netiviide|URL=http://www.cs.aau.dk/~normark/prog3-03/html/notes/oop-scheme_themes-classes-objects-sec.html|Pealkiri=''Classes and objects in Scheme''|Väljaanne=Functional Programming in Scheme|Autor=Kurt Nørmark}}</ref>
 
==Näited==
 
Näiteks defineerime [[programmeerimiskeel]]es [[Scheme]] [[kõrgemat järku funktsioon]]i <code>make-counter</code>, mis tagastab meile loenduri: funktsiooni, mis suurendab igal väljakutsel tema loomise kontekstis nähtavat muutujat <code>count</code> ühe võrra ja tagastab saadud väärtuse:
 
(define make-counter ()
14. rida:
(set! cnt (+ count 1)))))
 
Seejärel kui loome <code>make-counter</code> abil kaks loendurit:
 
(define counter-a (make-counter))
(define counter-b (make-counter))
 
Võime hakata kumbagi funktsiooni välja kutsuma, ningja näeme, et kummagi loendur suureneb vastavaltomaette:
 
(counter-a) ;; --> 1
(counter-a) ;; --> 2
(counter-a) ;; --> 3
(counter-b) ;; --> 1
(counter-b) ;; --> 2
(counter-b) ;; --> 3
(counter-a) ;; --> 4
(counter-a) ;; --> 5
(counter-a) ;; --> 6
(counter-b) ;; --> 4