# 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 ### Of

Returns 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 } ``` ### FromNillable

Returns 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 } ``` ### Default

Returns 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 } ``` ### IsNil

Checks 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 } ``` ### IsNotNil

Checks 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 } ``` ### IfNotNil

Performs 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 } ``` ### IfNotNilOrElse

Performs 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 } ``` ### Unwrap

Returns 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 } ``` ### OrElse

Returns 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 } ``` ### OrElseGet

Returns 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 } ``` ### OrElseTrigger

Returns 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 } ```