code: public static <T, R> OptionalFunction<T, R> of(Function<T, R> function) {
      return new OptionalFunction<>(function, () -> null);
    }
docs: Creates a new OptionalFunction in a fluent way. To define the alternative behavior,
  use one of the orElse* methods.
  <p>
  The returned function will return {@code null} as the alternative behaviour.
  
  @param function the main function to use for non-null values.
  @param <T>      the type of the input
  @param <R>      the type of the result
  @return a new OptionalFunction