Naming the Unnamed

Many languages support the declaration of entities in a nested scope. Java supports inner classes. C++ supports nested classes. JavaScript lets you declare functions in just about any scope.

Several languages, including Java and JavaScript, allow you to declare entities anonymously. In Java, you create anonymous inner classes, commonly for simple or one-off callback classes like Swing event handlers (see Listing 9-8). JavaScript developers pervasively use anonymous functions as callbacks (Listing 9-9), for immediate execution, and to wrap function declarations to freeze closures.

Listing 9-8: Example of an anonymous inner class as a Java Swing event listener

button.addActionListener(
  new ActionListener() {
    public void ActionPerformed(ActionEvent event) {
      System.out.println(event.getActionCommand());
    }
  });

Listing 9-9: JavaScript anonymous function as a click event handler in jQuery

$('.clickable').bind(''click', function(event) {
  alert('Element has class(es): ' + event.target.className);
});

Anonymous entities are convenient to create, but difficult to test. They often have no visible reference in any scope external to the one in which they are declared. In many cases, the execution context dictates their signature (for functions) or interfaces (for classes). A simple Extract Class or Extract Method refactoring can bring anonymous entities into a visible scope with a name through which they can be referenced for testing purposes.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.219.239.118