Sulund (informaatika)

Sulund on informaatikas avaldis (harilikult funktsioon), millel võib olla vabu muutujaid koos keskkonnaga, mis neid seob ("sulgub" ümber nende muutujate).[1]

Mõnikord nimetatakse sulunditeks ka lihtsalt anonüümseid funktsioone.[2]

Sulundeid kasutades saab objektorienteeritud programmeerimiseks implementeerida objekte ja klasse.[3]

Näiteks defineerime programmeerimiskeeles Scheme kõrgemat järku funktsiooni make-counter, mis tagastab loenduri: funktsiooni, mis suurendab igal väljakutsel tema loomise kontekstis nähtavat muutujat count ühe võrra ja tagastab saadud väärtuse:

(define make-counter ()
  (let ((count 0))
    (lambda ()
      (set! cnt (+ count 1)))))

Seejärel loome make-counter abil kaks loendurit:

(define counter-a (make-counter))
(define counter-b (make-counter))

Võime hakata kumbagi funktsiooni välja kutsuma ja näeme, et kummagi loendur suureneb omaette:

(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
  1. Richard Cornford. "Javascript Closures". Notes on the comp.lang.javascript FAQ.
  2. "Anonymous functions". PHP Manual.
  3. Kurt Nørmark. "Classes and objects in Scheme". Functional Programming in Scheme.[alaline kõdulink]