Because the base API has the signature: 

```
__init__(self, iterset, dataset, dim, values=None, name=None)
```

So if you try to construct a map with no values when using a device backend, then you get an error saying that init takes 5 arguments but only 4 were supplied. By having a default value of `None` and then raising a `MapValueError`, we can keep the API consistent, and catch this error in the unit tests.