Library Design: Naming Conventions

Part 3: Option & Result

Published on 2024-07-05. Last updated on 2025-07-31

Many languages’ Option and Result types suffer from an organically-grown and therefore inconsistently named set of functions.

To avoid this, a simple naming scheme can be used to derive a full set of useful methods with predictable names for these types.

The examples below uses variant names Some and None for Option, and variant names Pass and Fail for Result.1

Naming Scheme

  • get indicates a result type of T,
    its lack indicates a result type of Option[T]/Result[T]
  • else indicates a closure argument,
    its lack indicates an eagerly evaluated value
  • ...Panic indicates a possibly panicking function,
    its lack indicates a total function
  • additional combinator function names are adopted from Naming Conventions – Streaming as appropriate


Function Name Code Example
or Some(1).or(Some(2)) --> Some(1) None.or(Some(2)) --> Some(2) Pass(1).or(Pass(2)) --> Pass(1) Fail(1).or(Pass(2)) --> Pass(2)
orElse Some(1).orElse(() -> Some(2)) --> Some(1) None.orElse(() -> Some(2)) --> Some(2) None.orElse(() -> None) --> None Pass(1).orElse(() -> Pass(2)) --> Pass(1) Fail(1).orElse(() -> Pass(2)) --> Pass(2)
getOr Some(1).getOr(2) --> 1 None.getOr(2) --> 2 Pass(1).getOr(2) --> 1 Fail(1).getOr(2) --> 2
getOrElse Some(1).getOrElse(() -> 2) --> 1 None.getOrElse(() -> 2) --> 2 Pass(1).getOrElse(() -> 2) --> 1 Fail(1).getOrElse(() -> 2) --> 2
getOrPanic Some(1).getOrPanic() --> 1 None.getOrPanic() # program aborts Pass(1).getOrPanic() --> 1 Fail(1).getOrPanic() # program aborts
getOrPanicWith Some(1).getOrPanicWith("expected some") --> 1 None.getOrPanicWith("expected some") # program aborts with message "expected some" Pass(1).getOrPanicWith("expected some") --> 1 Fail(1).getOrPanicWith("expected pass") # program aborts with message "expected pass"


  1. Having variant names with the same length avoids pointless debates and diverging code style decisions on whether the arms of matches should be lined up or not.