Wpis z mikrobloga

Jakie są dobre praktyki w sprawie nulli i undefined? Jedne funkcje zwracają nulla, inne undefined, podobnie jest z argumentami, czasem trzeba przekazać null, a czasem undefined (mowa o kodzie niezależnym ode mnie). Później powstają takie kwiatki jak type A = string | null | undefined i później porównuj z jednym i drugim lub podwójnym ==. Czy wobec tego dobrym pomysłem jest używanie możliwie jednej wartości np. zakrywać nullem wszystkie undefined: return array.find(x => x.done) ?? null ? Tylko że jak później się okaże, że trzeba do obcej funkcji przekazać string | undefined, a ja mam x: string | null to teraz w drugą stronę będę pisać fn(x ?? undefined). Jest na to dobry patent?

#javascript #typescript #webdev
  • 6
  • Odpowiedz
@ToJestNiepojete: Jak to aż tak gigantyczny problem to sobie napisz funkcje helpera coś ala

function ifUndefinedMakeNull(variable) {
return typeof variable === 'undefined' ? null : variable
}
//ew
function ifUndefinedMakeNull(variable = null) {
return variable;
}

//i w drugą stronę
function ifNullReturnUndefined(variable) {
return variable === null ? undefined : variable;
}

Nie ma raczej uniwersalnego rozwiązania, ale tak sobie zwyczajnie ograniczysz powtarzalne sprawdzanie
  • Odpowiedz
@ToJestNiepojete: Ew. mógłbyś sobie zrobić funkcje pakującą oryginalną funkcje która będzie przyjmować null/undefined i będziesz sobie na podstawie parametru decydował co powinno być dla takiego casu i używać kopi, taki na szybko przykład

np.

function oryginal(a) { //to przykładowo ciało importowanej funkcji
console.log(a);
}

function wrapper(fn, useNull) {
return (param) => {
const newParam = param ?? (useNull ? null : undefined);
return fn.call(null, newParam);
}
}

const copyNull = wrapper(oryginal,
  • Odpowiedz
@ToJestNiepojete: jak to kod niezależny od ciebie to lipa. W swoim kodzie ja stosuje taki pattern że undefined jest zarezerwowany do braku wartości (nie mylić z pustą wartością) i co do zasady powinien być zwracany TYLKO przez API samego języka. Wszelki kod pisany przez programistów powinien operować tylko na nullach (no i do tego ew. takie rzeczy jak null object pattern)
  • Odpowiedz
@ToJestNiepojete: generalnie, typescript rekomenduje uzywanie tylko undefined i calkowicie zignorowanie nulla.

https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines#null-and-undefined

Natomiast ja osobiscie sie z tym nie zgadzam. Uwazam, ze lepiej uzywac je kontekstowo i tak robi tez API js.

Generalnie, undefined uzywamy tam gdzie np mamy opcjonalne pole w obiekcie itd. Generalnie cos czego nie ma.

Null uzywamy w momencie, gdy *brak wartosci jest jedna z mozliwosci*. Przykladowo, document.querySelector moze zwrocic Ci node albo null gdy nie znajdzie.
  • Odpowiedz
Przykladowo, document.querySelector moze zwrocic Ci node albo null gdy nie znajdzie. Null to jest swiadome zwrocenie pustego wyniku.


@larvaexotech: Dla odmiany Array.find zwróci undefined gdy niczego nie znajdzie. Ja nie widzę reguły.

Czy w takim razie jak przychodzi odpowiedź z backendu i np. user nie wybrał płci to będzie gender null? Niektóre API pomijają pola, których nie ma. Czyli w zależności od sposobu odpowiedzi z api będziesz w aplikacji operował
  • Odpowiedz