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.
Now, head
and 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 headOption
.
I don’t think it’s worth the effort.
@fhalde Beyond what @julienrf wrote, WartRemover can give you a warning if you call those methods (search for TraversableOps
on http://www.wartremover.org/doc/warts.html).