# Optional Optional is a type that may or may not contain a non-nil value.
## Source - [https://github.com/duke-git/lancet/blob/main/datastructure/optional/optional.go](https://github.com/duke-git/lancet/blob/main/datastructure/optional/optional.go) ## Usage ```go import ( "github.com/duke-git/lancet/v2/datastructure/optional" ) ``` ## Index - [Of](#Of) - [FromNillable](#FromNillable) - [Default](#Default) - [IsNotNil](#IsNotNil) - [IsNil](#IsNil) - [IsNotNil](#IsNotNil) - [IfNotNilOrElse](#IfPresentOrElse) - [Umwarp](#Umwarp) - [OrElse](#OrElse) - [OrElseGet](#OrElseGet) - [OrElseTrigger](#OrElseTrigger) ## Documentation ### OfReturns an Optional with a non-nil value.
Signature: ```go func Of[T any](value T) Optional[T] ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { value := 42 opt := optional.Of(value) fmt.Println(opt.Get()) // Output: // 42 } ``` ### FromNillableReturns an Optional for a given value, which may be nil.
Signature: ```go func FromNillable[T any](value *T) Optional[T] ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { var value *int = nil opt := optional.FromNillable(value) fmt.Println(opt.IsNotNil()) value = new(int) *value = 42 opt = optional.FromNillable(value) fmt.Println(opt.IsNotNil()) // Output: // false // true } ``` ### DefaultReturns an default Optional instance.
Signature: ```go func Default[T any]() Optional[T] ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { optDefault := optional.Default[int]() fmt.Println(optDefault.IsNil()) // Output: // true } ``` ### IsNilChecks if the Optional is nil.
Signature: ```go func (o Optional[T]) IsNil() bool ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { optDefault := optional.Default[int]() fmt.Println(optDefault.IsNil()) // Output: // true } ``` ### IsNotNilChecks if there is a value not nil.
Signature: ```go func (o Optional[T]) IsNotNil() bool ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { var value *int = nil opt := optional.FromNillable(value) fmt.Println(opt.IsNotNil()) value = new(int) *value = 42 opt = optional.FromNillable(value) fmt.Println(opt.IsNotNil()) // Output: // false // true } ``` ### IfNotNilPerforms the given action with the value if a value is present.
Signature: ```go func (o Optional[T]) IfNotNil(action func(value T)) ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { called := false action := func(value int) { called = true } optDefault := optional.Default[int]() optDefault.IfNotNil(action) fmt.Println(called) called = false // Reset for next test optWithValue := optional.Of(42) optWithValue.IfNotNil(action) fmt.Println(optWithValue.IsNotNil()) // Output: // false // true } ``` ### IfNotNilOrElsePerforms the action with the value if not nil, otherwise performs the fallback action.
Signature: ```go func (o Optional[T]) IfNotNilOrElse(action func(value T), fallbackAction func()) ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { calledWithValue := false valueAction := func(value int) { calledWithValue = true } emptyAction := func() { t.Errorf("Empty action should not be called when value is present") } optWithValue := optional.Of(42) optWithValue.IfNotNilOrElse(valueAction, emptyAction) fmt.Println(calledWithValue) calledWithEmpty := false valueAction = func(value int) { t.Errorf("Value action should not be called when value is not present") } emptyAction = func() { calledWithEmpty = true } optDefault := optional.Default[int]() optDefault.IfNotNilOrElse(valueAction, emptyAction) fmt.Println(calledWithEmpty) // Output: // true // true } ``` ### UnwrapReturns the value if not nil, otherwise panics.
Signature: ```go func (o Optional[T]) Unwrap() T ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { value := 42 opt := optional.Of(value) fmt.Println(opt.Unwrap()) // Output: // 42 } ``` ### OrElseReturns the value if not nill, otherwise returns other.
Signature: ```go func (o Optional[T]) OrElse(other T) T ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { optDefault := optional.Default[int]() val := optDefault.OrElse(100) fmt.Println(val) optWithValue := optional.Of(42) val = optWithValue.OrElse(100) fmt.Println(val) // Output: // 100 // 42 } ``` ### OrElseGetReturns the value if not nil, otherwise invokes action and returns the result.
Signature: ```go func (o Optional[T]) OrElseGet(action func() T) T ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { optDefault := optional.Default[int]() action := func() int { return 100 } val := optDefault.OrElseGet(action) fmt.Println(val) // Output: // 100 } ``` ### OrElseTriggerReturns the value if present, otherwise returns an error.
Signature: ```go OrElseTrigger(errorHandler func() error) (T, error) ``` Example: ```go package main import ( "fmt" "github.com/duke-git/lancet/v2/datastructure/optional" ) func main() { optDefault := optional.Default[int]() _, err := optDefault.OrElseTrigger(func() error { return errors.New("no value") }) fmt.Println(err.Error()) optWithValue := optional.Of(42) val, err := optWithValue.OrElseTrigger(func() error { return errors.New("no value") }) fmt.Println(val) fmt.Println(err) // Output: // no value // 42 // nil } ```