Best of both worlds could be to default to null and have `ControllerCollection::match` set _controller to a closure that throws by default, a few more operations and it would only throw if the route is matched, but it is an alternative.

``` php

function match($pattern, $to = null)
{
    // ...
    if (null === $to) {
        $to = function() use ($controller) { 
            throw new \LogicException(sprintf('The "%s" route must have code to run when it matches', $controller->getRouteName());
        }
    } 

    $route->setDefault('_controller', $to);

```