Closures Are Kind of Like Objects


What Do People Mean By An Object?

Lots of things!
  • A collection of data
  • A grouping of data and functions that act on that data
  • When many objects have the same structure of data and/or functions we might start thinking of them as members of a class/type
  • When objects have their data accessed by their functions we start talking about "encapsulation".
  • When object types can share their structures we start talking about inheritance/etc.
So Objects can be typed or untyped.

Let's Look At A Closure!

Compare what is gained and lost.

(define (adder x)
  (lambda (y) (+ x y)))

class PythonClass(object):
    __slots__ = ('x')
    def __init__(self, x):
        self.x = x
    def add_x_to(self, y):
        return self.x + y

Comparison

  • We have state, x
  • We have encapsulation
  • We lost a name
  • One is a function with some state, the other is some named state and a named function

When To Use?

  • When an API expects a function (ex: a callback)
  • When you need to preserve state, but only one time, a closure is a lighter weight solution than an entire class.
  • When you want much stricter enforcement of encapsulation.

Grokking Closures

By Philip Doctor

Grokking Closures

  • 1,175