Some refactorings

This commit is contained in:
Deluan
2023-03-26 21:26:55 -04:00
parent 05d381c26f
commit b998c05ca0
5 changed files with 66 additions and 43 deletions
+20 -2
View File
@@ -1,14 +1,32 @@
// Package gg implements simple "extensions" to Go language. Based on https://github.com/icza/gog
package gg
// IfZero returns v if it is a non-zero value, orElse otherwise.
// If returns v if it is a non-zero value, orElse otherwise.
//
// This is similar to elvis operator (?:) in Groovy and other languages.
// Note: Different from the real elvis operator, the orElse expression will always get evaluated.
func IfZero[T comparable](v T, orElse T) T {
func If[T comparable](v T, orElse T) T {
var zero T
if v != zero {
return v
}
return orElse
}
// FirstOr is a generic helper function that returns the first non-zero value from
// a list of comparable values, or a default value if all the values are zero.
func FirstOr[T comparable](or T, values ...T) T {
// Initialize a zero value of the same type as the input values.
var zero T
// Loop through each input value and check if it is non-zero. If a non-zero value
// is found, return it immediately.
for _, v := range values {
if v != zero {
return v
}
}
// If all the input values are zero, return the default value.
return or
}