Flags as string

function getWidth(
  {
    inner = 1, 
    padding = 1,
    border = 1,
    margin = 1,
    ...rest
  } = flags
 ) {
    console.log(inner, padding, border, margin, rest);
}

getWidth({inner: 5})

Mozes mi se zahvaliti kasnije, i dobrodosao u ES6 :slight_smile:

Entuzijazam je pohvalan, mozda pogledaj typescript, to je superset javascripta ( podrzava cak i enume ) ili sto kaze belmin barem ES6. Puno stvari vec postoji, i nema potrebe raditi to na svoj nacin.

Haha, zanimljivo mi je kada moje rješenje pronađete kod nekoga drugoga…onda valja. Ako je malo ispred vremena, onda ne valja, haha.

Pa većina toga što sam ja izmislio se prije ili kasnije pojavilo na neki način.
Nebitno što sam neke stvari izmislio, a da su paralelno bile već izmišljene. Sigurno nisam izmišljao stvari koje postoje već 20 i kusur godina (a i te su mlade, ako ćemo realno)…tako da ako sam nešto izmislio što je par godina na sceni…mene to nimalo ne boli. Štoviše, meni su takve situacije izrazito drage, jer mi pokazuju da gazim ispravnim putem. :slight_smile:

Druga stvar…ponekada sam i svjestan da razvijam nešto što postoji ili postoji dobra šansa da postoji.
I tada isto volim prvo kreirati svoje rješenje…pa tek onda se zagledati kako su to drugi rješili.

Zašto?
Pa zato ako prvo pogledaš tuđa rješenja, sva potencijalna kreativnost kolapsira u tuđe ideje…i slijep si onda uočiti ono što bi uočio da si gazio nekim svojim putem.

Slično kao kada hodaš kroz visoku travu…pa naiđeš na nečiji utabani trag…i onda te taj trag vodi, pa si ograničen biti taj koji je “stvarao i birao put”.

A nakon što iznjedrim svoja rješenja, ja uvijek volim baciti oko kako su to drugi rješili…i onda redovito nađem:

  • skup preklapanja. (Isto što sam napravio ja i što su napravili oni)
  • skup njihovih kvaliteta (Ono što su se sjetili oni, a ja nisam)
  • skup svojih kvaliteta (Ono što sam se ja sjetio, a nisu oni)

…i onda tek u konačnom koraku nastojim objediniti prednosti jedne i druge strane, te na taj način ponuditi najbolje rješenje koji je takav pristup iznjedrio.

Tako da…svjestan sam poprilično što radim i kada u očima drugih izmišljam “toplu vodu”. :slight_smile:

A sada konkretno što se tiče ovoga gore djela code-a.

Volim kada imam rješenje koje može biti reciklirano između više različitih jezika sa minimalnim izmjenama…do nikakvim izmjenama.

Što često nije slučaj kada je stvar rješena na razini sintakse pojedinog jezika…a može biti rješena metodom koja radi isto.

Ne kažem da je loše za jezik što to ima rješeno na levelu sintakse, ali za recikliranje pristupa između različitih jezika je to ograničenje.

Barem za sada dok svoj normirani library ne provlačim kroz kompajler. Kada ću i to raditi, onda ću moći normirati različite jezike i na razini sintakse.

Btw. već neke jezike provlačim i kroz vlastiti kompajler…što mi omogućava da bogatim sintaksu i na toj razini, te da idem izvan okvira sintakse koju je ponudio sam jezik.

U budućnosti planiram napraviti kompajler koji će tu sintaksu prevoditi u sve jezike (koji će mi biti zanimljivi), pa će to biti onda jedan fini korak unificiranju onoga što se može unificirati.
Za sada se time ne zamaram.

P.S. dali tvoj code gore omogućava da se input zada na način:
getWidth("ipbm") …ili bilo što slično što spada pod “shorthands” za jednostavni unos tih flagova?

Jer u suprotnom imaš flagove, ali nemaš to pojednostavljenje unosa parametara koje navodim.

haha sta si ti izmislio ? destructuring, rest/spred i defaultne parametre ? daj nemoj me nasmijavati, pogledaj malo kod koj sam ti dao i kod koji si ti napisao i sta rade tj. na koliko elegantan nacin rade to sto rade :smiley:

Ne, i moj kod nece nikad raditi nesto tako slicno.Cak sta vise taj kod bi dobio lagan reject kad dodje kod mene na code review.
Ja kad vidim poziv na funkciju sa getWidth("ipbm") ili sta vec, apsolutno nemam pojma sta to ipbm treba da znaci u tom momentu, nego moram pronaci definiciju funkcije i provaliti sta te skracenice znace ,
dok getWidth({inner: 5}) jasno govori sta sam ja proslijedio u tu funkciju.
Da ne spominjem cinjenicu sta ako imas key-eve koje pocinju sa istim slovom, pa moras onda paziti na redoslijed tih karaktera kad ih proslijedjujes u funkciju.

Nije to nikakvo pojednostavljenje, vec je to obicni code-smell i ko god smatra da je ovo pojednostavljenje treba da pod hitno kupi knjigu Clean Code

Ako mislis da ovdje niko nema pojma, otidji na Code Review - Stack Exchange pa im postavi ovaj tvoj kod i ideju na review - mislim da bi bili jako odusevljeni :smiley:

Ja ti skidam kapu zbog toga sto te neko placa da se bavis ovim i izmisljas ove stvari.Ne znam sta si im rekao, i kako si im prodao ovo, ali svaka cast moj naklon do poda :slight_smile:

3 Likeova

Nisam ni rekao da sam izmislio sintaksu var x = y

Pogledao sam code koji si dao. Omašio si cijeli footbal sa njime. Nije tema o tome kako zadati defaultne parametre…a dao si samo to.
Zanimljivo je kada sam o tome pisao još tamo negdje davne 2014-te, kako se mogu elegantno zadavati defaultni parametri + opcionalni parametri, onda je @tpojka vrištao kako sam lud…kako opcionalni parametri nemaju mjesta u kvalitetnom programiranju.
Džabe su bili moji napori da mu ukažem da Google upravo radi to sa svakim svojim API-em gdje prima takav set parametara…džabe mi bio trud svirači.

A onda 2015-te to ECMA6 uvodi. :smiley: :D.
Naravno, nisam ni to izmislio…opcionalni parametri su tu praktički otkada je i programiranja. Ja sam samo tada pokazivao kako se to elegantno može izvesti u bilo kojem jeziku, neovisno od sintakse jel to jezik nativno omogućava ili ne.

Onda očito ne možeš koristiti niti nativni javascript …jer ako pogledaš kako se npr. zadaju flagovi u regularnim izrazima, zadaju se upravo kako tvrdim da je praktično:

Npr.
var regPattern = new RegExp("selector", "gi");

Znači “gi” ti je upravo flag_as_string :stuck_out_tongue:

  • g - stands for global selection
  • i - stands for incase sensitive selection
    Možda je vrijeme da promjeniš jezik, vidim da ni JS kod tebe ne prolazi :stuck_out_tongue:

Tebi ako je ljepši code da uvijek pišeš sve…pa idi u assembler, pa ispucaj dušu koliko ćeš morati toga finoga napisati. :slight_smile:

Više manje, dokumentaciju moramo znati za bilo koju funkciju. A zapamtiti da je “i” flag od “inner”, je isti klinac kao da si zapamtio i “inner”. Naravno da pamtiš cijeli smisao riječi, a flagovi su uvijek neko slovo koje je karakteristično toj riječi.Najčešće prvo slovo riječi. A to nije nauka znati. Tako da ako možeš zapamtiti ključ, možeš znati i koje je prvo slovo ključa. :slight_smile:

Ne moraš paziti na redosljed nikada kod flagova!
Ako bi baš imao dva ključa koja počinju istim slovom…ili bi se izbjegavalo odabrati tavke ključeve da počinju istim slovom, ili bi flag bio neko drugo karakteristično slovo ključa, ne mora biti nužno prvo.
A može biti i prva dva slova, pa da se flag zadaje npr. na sljedeći način: "[au]a"

Gdje se

  • “au” odnosi na jedno binarno stanje,
  • “a” odnosi na drugo binarno stanje

(Al ja osobno nebi flagove komplicirao sa više od jednog znaka.)

Reci to onda i ovoj ekipi iza ECMA da ne pomišljaju više na takve stvari. :smiley:

Ne prodaješ riječi, prodaješ djela. :wink:

Tako da im nisam ništa rekao što točno radim, vjerujem da nebi ni shvatili.
Oni samo vide kakav napredak donosim firmi i na osnovu toga su mi razrješili ruke da radim samo ono što ja smatram da je bitno raditi. Štoviše, po dogovoru više nemaju niti pravo me uključivati u client-projekte, nego sam samo prisutan da generalno unaprijeđujem radnu okolinu i da ih postavljam na “eksponencijalni graf” ubrzanja produktivnosti.
Pri tome sam postavio još uvjet da rješenja na kojima ću raditi, se neće ticati specijalno njihove radne okoline, nego ta rješenja moraju moći biti generalno lako reciklirana. Što znači da i moja firma od istih rješenja mora moći imati direktnu dobit.

Pri tome, to nije mala firma. Broji par milijona kuna dobiti svake godine.

A tvoj hejt spada u istu kategoriju onoga što sam napisao zašto ljudi teško mogu smisliti Rimca: Zasto Hrvati ne vole Rimca

Potpisujem.

Početnik, il’ čak neko ko se prvi put susreće s tematikom, da uradi apsolutno sve suprotno od svega što propagiraš, definitivno ima puno veće šanse da napiše nešto ispravno i da valja.

Vidi, ti se needukoavan i time se dičiš, nebrojeno puta si dao do znanja da izbjegavaš i preskačeš dokumentaciju. Industrijski standard i dobra praksa za tebe je špansko selo.
Ti si otprilike D. Bergam na steroidima (razlika je što on piše kako piše i ne smara svijet okolo).

2 Likeova

I još da nadodam. U mojoj vlastitoj firmi mi je satnica jedno 2-3 puta veća nego u toj vanjskoj firmi. A u toj vanjskoj firmi imam satnicu među najvišima. Samo neke starješine imaju veću od mene…jer ja sam tamo tek 2g.

Što onda uopće radim tamo?
Pa kad pogledaš, oni više trebaju mene…nego ja njih. Ako ćemo kalkulirati matematički, ja ih nit ne trebam.
Ali ja nisam nikada u ovom bio radi novca, pa neću nikada ni biti. Od prvog dana programiram radi ljubavi prema tome, a novac se pojavio samo kao nus produkt. Koji će svakako pomoći za naredne planove koje imam.

No osim te financijske kalkulacije, vjerujem da će moja rješenja lakše ugledati globalno svjetlo dana kroz tako veliku firmu…nego kroz moju, koja je u svojim počecima.
Al svakako ću se pobrinuti da se sazna da su ta riješenja originalno došla od firme TechnoAngels…a još originalnije od samih Anđela koji me vode. :slight_smile:

Moj put bi bio totalno nezanimljiv da nemam vas sa vašim opaskama…i da se nemam priliku ka tome osvrtati u prošlost.

Iste stvari ponavljate otkada nisam znao što je “Host” …kao i sada kada sam tu gdje jesam.
Kako je meni to cool. :slight_smile:

Ne govori li ti to nešto?

Najveća umjetnost i vještina je znati šta ne znaš.
Ti ne da se ne postavljaš na taj vektor već bježiš od njega k’o djavo od krsta.
U to ime još jednom:

Pročitaš li i ostale odgovore s teme još koji put nećeš si naškoditi.

Kako sam omasio cijeli fudbal kad si ti napisao sljedece:

Oko tih skracenica se ne zelim uopste zamarati, jer mi je ideja totalni nonsense.

Regex u JS-u ima 6 flagova, od kojih se 3 koriste maksimalno.Objekat moze imati dosta vise key-eva i samim tim tvoje skracenice mogu postatiti ono o cemu cijelo vrijeme pricam - tj. ono sto vec jesu.

Meni je najljepsi kod koji se jednostavno cita i ima smisla.Na zalost ipbm mi nema apsolutno nikakvog smisla.

To se inace scale-a odlicno :smiley: Nakon nekog vremena neces znati sta jedan flag znaci, a kamo li pet ali hajde :smiley:

LOL

LOL opet, izgradi ti novu sintaksu i ovdje :smiley: Na kraju ce Regex biti laksi od ovih tvoji zafrkancija.

Gdje to se to u ECMAScript specifikaciji moze naci ovo sto ti radis ? Mozda je bolje da se ti pridruzis TC39 i das im proposal da uvrste ovo savrseno rijesenje u ECMAScript :smiley:

Ja prema tebi nemam apsolutno nikakav hejt, cak si mi simpatican sa ovim idejama.
To sto se nekom ne svidjaju tvoja rijesenja ne znaci da je to bilo kakav hejt.Cak sam ti i argumentovao, a to sto si ti umislio da si popio svu pamet svijeta i neces da cujes kritiku to nije moj problem :slight_smile:

Ok, ovo postoji i koristi se (“Y-m-d H:i:s” npr.)
Druga stvar je što ga uopšte ne argumentuje tako.

Al’ ovo je zato za +1
Blaženi su svi koji ne moraju da ga slušaju i gledaju šta je napis’o.

I kad nabode nešto k’o ćorava koka (što se da budem iskren izuzetno rijetko dešava: sa ovim ukupno drugi put da pamtim na forumu), on uopšte nije svjestan da je nab’o. Loose cannon.

Jesi l’ im rek’o da za iste pare mogu uzeti nekog k’o ima pojma?

2 Likeova

A kako će se dvije osobe (od kojih je samo jedna nezna da nezna) …dogovoriti koja je to koja nezna da nezna?

Kada logično obje smatraju da upravo ona zna? Ali jedna očito griješi, te svaka misli za onu drugu da ta druga griješi. :slight_smile:

Za razrješiti taj problem očito treba neko objektivno opažanje, koje je dokaz tomu da netko radi “dobro” ili “loše”.
Također pod pretpostavkom da radi “dobro” ona osoba koja ne živi u neznanju.

Nadam se da iznošenje mojih postignuća niste shvatili kao pumpanje ega …nego vam upravo stavljam pod nos objektivne činjenice koje nastaju kada netko radi “dobro”. Tako da ja vjerujem za sebe da nisam onaj koji nezna da nezna. A vi ste dobivene dokaze i priliku da osvjestite svoje neznanje…vrlo olako “gurnuli pod stol.”
Malo sprdnje bacili na to i tjerate dalje po svom.
Ignorirate uočiti da sam samo unutar dvije godine nakon zaposlenja napravio poprilično lud odmak od toga kako bi u prosjeku to izgledalo.
Tim je luđe što mi je to prvo zaposlenje u životu u IT sektoru. …a nakon samo 2mj. rada mi je plaća narasla za skoro 100%…itd itd.

Ali ja sam taj koji nezna da nezna… :slight_smile:

Ne argumentiram tako jer ne radi se točno o istoj stvari. Ali ima zajednički presjek i to si dao fini primjer kako slova mogu biti praktičan input u nekim slučajevima.

Pogledaj naslov teme. “Flags as string” - jasna indikacija da težim tome da se binarna stanja mogu simpatično predstaviti jednim kratkim i praktičnim stringom.

A to što si me citirao…pa to sam naveo kao posljedični benefit što se dobije prilikom inicijalizacije jednog “flag as string” parametra.
Što je onda sasvim logično da ako je to benefit, da to ionako postoji u sintaksi…jer je to dobrodošlo i do toga se došlo ovim ili onim putem.

Al to neznači da je o tome tema…tema je o “flags as string”.

Mogao si tako negdje primjetiti bilo što sporedno pa zabrijati da je to fokus teme? I reć da je ta sporedna stvar već izmišljena. Zar ne?

Dao sam ti već primjer flagova u konstrukciji regexp izraza. Dao ti je tpojka sličan primjer koristenja karaktera kod formatiranja datuma. Iako je to tamo više specifična sintaksa za definiranje formata, nego predstavljanje binarnih stanja.

Dom bi flags as string spadali uvijek pod istu sintaksu, a sposobni bi bili modelirati neki objekt koji se sastoji od binarnih stanja.

Može li…može li…može li…non stop se ograničavaš unutar nepostojećih granica. Come on…go out of box…vani je svijet!
Pa tko te tjera da bi koristio “flags as string” na objektu koji ima 74 ključa.
Koristit će se tamo gdje može biti praktičan. Kao što su taj pristup odabrali kod regexp-a i točka. Tamo se paše i to je to.
Tamo gdje se neuklapa, tamo se neće koristiti.

Život je jednostavan. :slight_smile:

Ja sam s razlogom citirao odredjeni dio teksta i uz to dao ti objasnjenje zasto ja te parametre koje ti navodis necu nikada u zivotu koristiti.

Za mene totalno drugi use-caseovi.Regex prica za sebe.

Pa to samo govori da se tvoje rijesenje ne scale-a, tj. da moze raditi na max. 5 flagova poslije toga ne zna se ni ko pije ni ko placa :smiley: Koja je svrha toga, kad sa objektom koji ima 10 propertya ces morati pisati stvar kao i svi sto to rade ? Sta onda ovo tvoje rijesava ? Skracuje sintaksu na malim inputima, jako korisno :smiley:

Hvatas se konstantno za taj Regex, a ovdje se radi o totalno drugoj stvari.

Možda za tebe. Ja koliko vidim i u jednom i drugom slučaju string predstavlja true/false stanja nekih flagova. I to je ono što im je zajedničko.

Mogli su i regexp smisliti da se piše:
new RegExp("selector", {global:true, incase_sensitive:true});

Pa očito to nije svakome praktičnija sintaksa.

Ono što si vjerovatno propustio primjetiti kod flags as string inicijalizatora…on može progutati i flag as string i puni objekt …pa uvođenjem njega ostaje sloboda developeru hoće li koristiti shorthands ili tipkat sve.

A samo čitanje codea će ionako danas/sutra biti expandirano sa raznim pluginovima editora…itd.

Tako da “flags as string” nudi i “ovce i novce”. Kod pisanja brzinu, a kod interpretacije/čitanja codea potpunost.