Boolean controler

Ili jednostavno ovako

var speed = userSpeed1 || userSpeed2 || userSpeed3 || defaultSpeed

Kakvim metodama mora se pribjegavati ? undefined/null je falsy vrijednost tako da ako ne zadas nista vratit ce ti defaultnu vrijednost :smiley:

Fakat ne kontam o cemu pricas.

Naravno to je odlicno :smiley: Ja poznajem JS i kako type casting radi i dodjem raditi s tobom u okruzenje gdje je sve drugacije - bi se i slagali nema sta :smiley:

A što ako user definira da je brzina objekta jednaka nula? :slight_smile:

A o tome ti pricas :smiley:

To je kako jezik sam radi, tako da bih malo refaktorirao funkciju da odgovara mojim potrebama.Ocito je da ovo var speed = userSpeed1 || userSpeed2 || userSpeed3 || defaultSpeed nije rijesenje za use-case koji ti imas, tako da ne treba nista "forsirati’.

I dalje stojim iza toga da cu se uvijek oslanjati na jezik i njegova pravila nego na nesto poput ovog

var state = myBoolean(x, "1dbunNUsDezot")

Razlog sam vec naveo :slight_smile:

1 Like

Pa ne trebam ti ja o tome pričat, code koji si napisao

je sasvim dovoljan da uočiš koji je tu edge-case.
Pogotovo što sam ti još ranije napisao:

…i onda ti nakon svega ne uočiš da je sasvim legitimno da brzina bude zadana kao nula.
I onda sam ti ja nakon godinu dana kriv što ne znam objašnjavati. :stuck_out_tongue: :stuck_out_tongue:

A sada dalje…što me još nisi shvatio…

Nećeš nikada morati pisati tako. :slight_smile:
Jer u 99.99% slučajeva ćeš trebati samo iz defaultnog flag izraza isključiti uljeza, tako će se gornji selektor brzina pisati na način:

Flag je znači samo: "-1", te nije nikakva kobasica.
minus (-) je instrukcija da iz defautlnog flaga isključuješ karaktere, a “1” je instrukcija da se 1 tretira kao true, a 0 kao false. Pa pošto zbog minusa to pravilo isključimo iz boolean provjere…0 će nam biti tretirana kao true i stvar će raditi po očekivanom.
Ako je to kompleksan pristup za pokriti 2048 različitih kombinacija, ubij me. :smiley:
Jedino velim, na sintaksi flaga ću još poraditi…imam tu zanimljivih ideja.

Ako možeš ponuditi elegantnije rješenje, rado prihvaćam.
Ponudi kako bi rješio gornji problem…ali generalno rješenje koje se može reciklirati.

I imaj na umu da chuse() nije jedina metoda koja se može oslanjati na boolean provjeru unutar sebe…gdje mi želimo izvana imati kontrolu nad tim kako će ona unutar sebe tretirati boolean stanja za različite tipove varijabli.

I još ovo da iskomentiram…

Proširenje nije ograničenje. Ne kužim kako to uporno ignoriraš shvatiti.
Ako se nešto uvede dodatno…ti nisi prisiljen to koristiti…i nisi ograničen koristiti nativni pristup koji ti je i dalje dostupan.

Ali ako naletiš na situaciju kao iz primjera sa odabirom prve definirane brzine … onda je na tebi hoćeš li koristiti tu dodanu mogućnost da to riješiš elegantno…ili ćeš pisati svaki puta špageti-code da izvučeš takvu situaciju.

Nije to nikakav edge-case vec problem koji ti ti zadao nije uopste use-case za ovakav dijelic koda:

U “normalnim” jezicima, kao sto si i sam spomenuo, to nije ni dozovoljeno.A posto u JS-u mozes raditi prakticno sta te volja, onda dobijes takav rezultat kakav jeste.

Da to je sasvim legitmno, ali ne bas legitimno za var x = y || z || c na koji si me naveo, ali ajde reci cemo da mi je promaklo :slight_smile:

Imamo razlicite definicije elegancije tako da bolje ne :slight_smile:

Ko je rekao da je ogranicenje ? Postoji nesto sto se zove stil kodiranja, koji svaki projekat/tim/firma ima.Vjerujem da bi super konzistentan kod izasao kad bi ti koristio te tvoje funkcije, a ja nesto totalno drugo da rijesim isti problem.

Izgleda da imamo razlicite definicije spageti koda takodjer :joy:

Umalo da zaboravim ovo :smiley:
Nakon godinu dana i toliko ispisanih tema o Normu, koliko je osoba shvatilo o cemu se radi ? Mozda bolje pitanje, koliko je osoba shvatilo odmah ? :smiley:

Gornji problem je trivijalan…rješenje kakvo god se nakuca u 2 minute. Volio bi stvarno vidjeti što tebi znači elegantni pristup takvim sitnicama.

Nego, rekao sam da me nečemu ova tema naučila …
…osvjestila me je da da može postojati globalna kontrola kako će se ti flagovi digitalnih stanja tretirati.
To je zaslužilo zasebnu temu: Flags as string

@belmin , toliko buke, a teško ti je pokazati taj lijepi code?

Možda ja sada masim srz, ali mislim da je u redu da onaj koji govori da jedan pristup ne valja, da pokaže koja solucija bi onda bila valjana?

Ti meni kazes da mi je tesko pokazati kod ? haha :smiley:

Pokazacu, al daj mi malo vremena da skontam nesto kripticno u tvom stilu :wink:

Kao sto rekoh treba mi vise konteksta malo, definisi neke zahtjeve pa cu ti vrlo rado kodom pokazati kako se to radi - bar za mene nikad to nije bio problem :wink:

1 Like

Ok, specka.

  • razmisli zašto je tvoje ponuđeno rješenje za deklaraciju brzine nedovoljno precizno napisano. (Hint: brzina može biti nula)

  • rješiti isti problem tako da složiš metodu koja će se moći lako reciklirati na drugim projektima za slične situacije

  • plus bodovi. Ako osmisliš metodu tako da je možemo lako podijeliti i sa ovim drugim odjelom softweraša koji ne tipkaju u JS-u

  1. 0 u boolean ekspresiji se castuje u false vrijednost, tako JS radi.
  2. vjerovatno necu “reciklirati” ili cu reciklirati u manjem scope-u (ukoliko je potrebno)
  3. Ne pada mi na pamet, jer kao sto rekoh oslanjam se na jezik i na prakse koje su vezane za taj jezik.

Za sada nista od koda, zao mi je :slight_smile:

A lagan zadatak…što bi bilo tek da vidiš koliko su kompleksni zadaci kada radiš kompajliranje nekog codea :slight_smile:

Zadnja verzija Typescripta je uvela Nullish Coalescing operator, a isti dolazi uskoro i u JS

function getSpeed(speed: number) {
  const defaultSpeed = 60;

  return speed ?? defaultSpeed;
}

console.log(getSpeed(0))

Nadam se da je ova solucija dovoljno kratka i genericna, tj. da se lako “reciklira” :smiley:

P.S Ko koristi Babel moze odmah koristiti ovu opciju

Evo jedan fantastičan twitter nalog a koji je u skladu s temom:

https://twitter.com/everyboolean

2 Likeova

Za mene ništa novo da stvari o kojima pričam tek dolaze u praksi.
U zadnjih 10g. se nije desilo da sam nešto izmislio što nije naknadno došlo…ili da je već postojalo. Možda svega par stvari tek čeka da bude globalno “izmišljeno” i prihvaćeno.

Pošto si ti imao poprilično tvrdoglav stav u smjeru da ovakvo nešto nema svoju primjenu i smisao…nadam se da sada uviđaš da govorim o stvarima koje prije ili kasnije zajednica shvati da trebaju postojati. Šteta jedino što ti treba potvrda od zajednice da nešto treba postojati…a da ne možeš tu istu potvrdu pronaći u samoj funkcionalnosti/potrebi neke ideje.

Jer svaka ideja govori sama za sebe da je korisna…nije potreban nitko da ju “aprova” da bi ideja dobila svoju svrhu i smisao. :wink:

1 Like

Eto ti lajk, dao bih i 2 al ne moze.

Ako stvarno smatras da je ovo tvoje rijesenje u rangu nullish coalescing operatora, onda fakat ne znam :sweat_smile:

Nisam ja tvrdoglav, vec ne trazim genericno rijesenje za sve zivo i radije cu se fokusirati na konkretnu implementaciju i uraditi dodatni check nego imati nesto ovako

var state = myBoolean(x, "1beot");

Ne zelim se vise ponavljati zasto tako ne bih rijesavao stvari, mislim da sam rekao vec dosta puta.
Medjutim kad je vec tu nesto u samom jeziku, koje rijesava taj specifican problem na jednostavan, citljiv i elegantan nacin zasto to ne bih koristio ?

I to je za diskusiju al’ upotreba null coalesce operatora je zvanično stara 10 godina 3 mjeseca i 6 dana kako se računa izlazak 5.10 verzije Perl-a.

Usput:

A evo još malo mudrosti:

Prvo si ignorirao da uopće postoji problem :wink:
Nadam se da smo barem to onda razjasnili.

…a logično ako do sada nisi bio svjestan ni problema, ne očekujem onda da razumiješ zašto gornje rješenje pokriva samo uzak spektar problema.
Drugo, gornje rješenje nije skalabilno na sve jezike…ja kada rješavam takve probleme (za koje drugi još niti ne znaju i ne priznaju da postoje) …već sada tražim rješenja koja su lako primjenjiva za bilo koji jezik koji prati neke najosnovnije principe koje prati svaki jezik.

I na kraju krajeva…ja uopće nemam problema sa rješenjima koje nudi neki jezik.
No najčešće kada ja stvaram rješenja…tada ih jezik još ne nudi. A ja nisam onaj koji čeka da mu drugi riješe problem…

Ignorirao (ako zelis tako nazvati to) sam zato sto je tvoje inicijalno objasnjanje kao i uvijek bilo konfuzno.Ocito ne samo meni, vec i ostalim koji su se ukljucilji odnosno nisu ukljucili u temu.

Opet cu ti ponovit da probleme ocito rijesavamo na razliciti nacin.Za razliku od tebe, ja ne ciljam da mi svaka funkcija bude genericna, i da moze prihvatati sve i svasta i proizvoditi sve i svasta.
Zasto to drugi i ja ne rade, a zasto ti radis to je posebna tema za raspravu.

Ti si jedini lik od koga sam cuo da zeli prenositi stvari iz jednog jezika u drugi :smiley:

Ni ja, samo ih rijesim na nacin koji se razlikuje od tvoga :wink:

Nisi ignorirao…nego si čak napisao komad code-a koji je sadržavao očitu grešku kojom si pokazao da nisi generalno upoznat s ovom problematikom. Sa mojim objašenjenjima ili bez njih…nebitno je, pokazao si kako razmišljaš.

Nemoj biti baba i ovakva izvlačenja radit…molim te.

Ovo vrijedi za sve (nas).