It does makes sense that head of a list may or may not be there. Isn’t that what Option is for? Then why is it that head throws an exception? Can’t it just return a Option?
If we could redesign the collections from scratch, yes,
head would return an option and we would also have a
headPartiallyDefined, which would behave like the current
head (and is useful for performance reasons). So, in the end we still want to have both versions.
headOption are well established. If we want to migrate to new operation names we have to do it in several steps, each step corresponding to a major Scala version: (1) introduce
headPartiallyDefined and deprecate
head, (2) remove
head, (3) re-introduce it with
Option as its return type and deprecate
headOption, (4) remove
I don’t think it’s worth the effort.