Faktorijel brojeva

2

Faktorijel brojeva

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3654
  • Gde živiš: 127.0.0.1

Shift + Esc = Chrome task manager. Ubijes tab koji srce memoriju i to je to.

Inace, ovo ne valja. Upisi string u prompt i rezultat nije tacan. NEVER TRUST USER INPUT.

A plus i nema potrebe za rekurzijom - http://jsfiddle.net/chu8Lc5n/. Moze da se uradi pomocu rekurzije, to stoji, ali i jedan while zavrsava posao.

Dodatno pitanje za bonus poene - koji je jedini scenario da uslov x !== x vraca false?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Ivan Kušaković
  • Pridružio: 11 Feb 2006
  • Poruke: 116

Napisano: 10 Dec 2015 23:17

Rastafarii,

Mislim da sam ovo od 1. novembra otkad ucim HTML, CSS i Javascript negde ucio, ali sam zaboravio Sad
if (n <= 0 || n !== n) {

Prvi deo uslova razumem, a drugi mi nije jasan. Znam da je !== strict not equal ali mi nije jasno sto n i n ?

Bonus poeni ce morati da sacekaju Smile Bar dok mi ne objasnis ovo?

Ali, ako se secam iz predavanja, ima ono kada je && onda se vraca prva true vrednost,
a ako je || onda se vraca prva false, tako nesto, jeb** li ga, zaboravio sam.

Dopuna: 10 Dec 2015 23:18

Ima i tacan naziv za tu stvar. Statement, sta vec.

Dopuna: 10 Dec 2015 23:25

Inace, probao sam opet Dev Tools i besk. petlju sa alert boxom. Ne moze ni SHIFT + ESC Wink
Blokira se i to. Sta je bre ovo ovde? Niko nece da proba pa da da resenje, sve moram ja Very Happy

Dopuna: 10 Dec 2015 23:25

Nisam ni planirao stringove da ubacujem, ja sam pocetnik Smile
Ali jedno !isNaN vrsi posao.



offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3654
  • Gde živiš: 127.0.0.1

U PHP-u ima razlike izmedju:

if ($cond1 and $cond2)

i malo drugacijeg uslova:

if ($cond1 && $cond2)

Iako oba vracaju istu vrednost (jer je oba puta konjukcija u pitanju) - prvi proverava sve delove, koliko god da ih ima, dok drugi prekida proveru na prvom delu koji vraca false - jer nema potrebe za daljom proverom. Konjukcija je tacna ako i samo ako su svi iskazi tacni, te prvi netacan iskaz neizostavno ukazuje da je konacna konjukcija netacna. Ali - to je PHP. U javascriptu nema "and" keyworda, te nije moguce drugacije povezati iskaze u konjukciji osim koriscenjem "&&" operatora.

Inace, u pravu si za !== operator. Kao i === operator - u pitanju je strict provera (u prvom slucaju strict not equal, u drugom strict equal). Koja je razlika izmedju strict i non strict? JS je, kao i PHP - weak (loose) typed language. Tip promenljivih nije striktno definisan, i mozes otprilike kako ti dune da im menjas tip - malo je string, pa dva reda kasnije niz, pa pretvoris u integer - JS nece da se buni (nece ni PHP). Zato se prilikom loose poredjenja (== i !=) ne proverava sam tip promenljivih, vec njihova vrednost - sto dalje dovodi do sledeceg:

var x = false,     y = 0;     alert(x == y);//true

Promenljiva y, koja ima vrednost 0 - je tzv false-ish vrednost. Jeste to integer koji ima vrednost 0 - ali kad koristis loose poredjenje, evaluira u false (kao i prazan string i prazan niz). Slicno je kad poredis string i broj iste vrednosti.

Kada koristis strict poredjenje - nije dovoljno da samo vrednost bude ili evaluira u istu vrednost. Potrebno je da i tip promenljivih bude isti. Nijedan od gore navedenih primera u strict poredjenju nece vratiti true.

Sto se tice bonus poena, zasto pravim strict poredjenje promenljive sa samom sobom? Zar nije logicno da jedna promenljiva ima isti tip i vrednost kao i ona sama? Zar je moguce da postoji scenario u kome taj deo vraca false? Postoji - a trag ove zagonetke se krije na dva mesta u mojoj prethodnoj poruci u ovoj temi. Inace, na dobrom si putu.

I jos jedna stvar - nativni JS boxovi (alert, prompt i confirm) su tzv. blocking process. Izvrsavanje JS-a (i samim tim rad browsera) se blokira dok god ne sklonis box. Ako imas box koji iskace cim ga ubijes - jedina varijanta je da izaberes "Prevent this page from creating additional dialogs" u boxu i ubijes tab.

offline
  • Ivan Kušaković
  • Pridružio: 11 Feb 2006
  • Poruke: 116

Napisano: 10 Dec 2015 23:59

I u Javascriptu sada ima to sto pricas da ima samo u PHP-u. Probacu sutra da ti nadjem, ucio sam to na codeschool.com

Ti u stvari hoces da ja ucim PHP Smile Pa i hocu, ali cekaj, redom Smile Smile Smile Razmislicu do sutra pa se javljam za bonus!

A inace ovo mi je sve poznato sto si mi sada napisao, presao sam vise puta te primere, gde porede i sa null i undefined, ali ovo je dobro podsecanje. Hvala!

Dopuna: 11 Dec 2015 0:08

@Rastafarii

Citat: I jos jedna stvar - nativni JS boxovi (alert, prompt i confirm) su tzv. blocking process. Izvrsavanje JS-a (i samim tim rad browsera) se blokira dok god ne sklonis box. Ako imas box koji iskace cim ga ubijes - jedina varijanta je da izaberes "Prevent this page from creating additional dialogs" u boxu i ubijes tab.

Sto otvara novu temu... Koju sam pitao na Stackoverflow i dobio -2 glasa za pitanje od uobrazenih idiota.
Kako kada se blokira Javascript tim checkiranjem Prevent this page from creating additional dialogs.. da se odblokira bez resetovanja Chrome podesavanja? Negde procitah da postoji kao neka varijanta da se pokrene opet localhost, ali to mi nista nije jasno. Mozda ti kao php programer imas predstavu.
Takodje su tamo na SO pisali da ugasimo tab i onda ga ponovo otvorimo, ali to meni nije resilo problem pa sam morao jednom da resetujem sva podesavanja i time disablujem sve extensije, pobrisem sifre (srecom imam ekstenziju PasswordBox koja cuva sve sifre, toplo preporucujem).

Pozdrav

Dopuna: 11 Dec 2015 9:04

@Rastafarii

Obecao sam da cu ti naci i nasao sam, evo, ovo je to sto pricas da Javascript nema, a ima tvoj PHP Smile

Short-circuiting of logical operators

The logical operators && and || handle values of different types in a peculiar way. They will convert the value on their left side to Boolean type in order to decide what to do, but depending on the operator and the result of that conversion, they return either the original left-hand value or the right-hand value.

The || operator, for example, will return the value to its left when that can be converted to true and will return the value on its right otherwise. This conversion works as you’d expect for Boolean values and should do something analogous for values of other types.

console.log(null || "user")
// -> user
console.log("Karl" || "user")
// -> Karl
This functionality allows the || operator to be used as a way to fall back on a default value. If you give it an expression that might produce an empty value on the left, the value on the right will be used as a replacement in that case.

The && operator works similarly, but the other way around. When the value to its left is something that converts to false, it returns that value, and otherwise it returns the value on its right.

Another important property of these two operators is that the expression to their right is evaluated only when necessary. In the case of true || X, no matter what X is—even if it’s an expression that does something terrible—the result will be true, and X is never evaluated. The same goes for false && X, which is false and will ignore X. This is called short-circuit evaluation.

The conditional operator works in a similar way. The first expression is always evaluated, but the second or third value, the one that is not picked, is not.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3654
  • Gde živiš: 127.0.0.1

Posto ogromna razlika izmedju onoga o cemu ja pricam i tvog posta. Ogromna. Naravno da i JS, i PHP, i jos milion jezika imaju short-circuiting.

Citat:U javascriptu nema "and" keyworda, te nije moguce drugacije povezati iskaze u konjukciji osim koriscenjem "&&" operatora.

Ti cak ne pricas ni o konjukciji, vec o disjunkciji. Ja pricam o operatoru konjukcije. U JS-u postoji samo jedan (&&), u PHP-u imaju dva (&&, and). Za disjunkciju takodje - JS ima jedan ( || ), PHP ima dva (||, or). Uostalom, probaj ovo u JS-u:

console.log(true and false);

I dobices syntax error. U PHP-u sledeci kod:

var_dump(true and false);

uredno vraca "false".

Citat:Kako kada se blokira Javascript tim checkiranjem Prevent this page from creating additional dialogs..

Ubijes tab, otvoris ponovo. Nista vise.

offline
  • Ivan Kušaković
  • Pridružio: 11 Feb 2006
  • Poruke: 116

Napisano: 11 Dec 2015 10:39

Nista ja ne pricam, kopirao sam ti ovo iz Eloquent Javascript knjige. To sto je napisano postoji i za konjukciju, koliko vidim. To sto radi && i and u PHP-u je u Javascriptu sve postignuto obicnom konjukcijom.

Primer?
if (false && foo.foo){     // Passes, no errors because foo isn't defined. }

Kad si tako siguran sto se tice Javascript dialog boxeva idi na moj sajt codeschool-ivan.xyz blokiraj Javascript koji ce ti izaci i onda ubi tab i refreshuj stranicu da vidis da li ce ti izaci opet Wink

Dopuna: 11 Dec 2015 10:45

Inace, Javascript je najpopularniji jezik po svim anketama.

Dopuna: 11 Dec 2015 10:48

Ne znam sta je cilj tvog pisanja o tome kako PHP ima i and i && operatore. Jel ti je neko platio da promovises PHP? Smile

Dopuna: 11 Dec 2015 10:56

@Rastafarii,

PRIMI VELIKO IZVINJENJE u vezi Dialog Boxes-a u Javascriptu, sad mi je proradilo, ali kad ih blokiraš sa onim Prevent... izgleda je blokirano neko određeno vreme pošto kad sam odmah učitao sajt posle blokiranja se nije pojavio taj javascript alert.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3654
  • Gde živiš: 127.0.0.1

Kad bi samo malo paznje obratio na ono sto procitas (a ja pisem) - ne bi se ovoliko raspisivali.

Rastafarii ::Ubijes tab, otvoris ponovo. Nista vise.

LeQu ::onda ubi tab i refreshuj stranicu

Ja nigde nisam spomenuo refresh. Zatvoris tab i otvoris ponovo.

Ovo je generalno slucaj kroz celu temu. Ja pricam o if statementu, ti ubacujes short circuit. Ja pricam o tome da u PHP-u postoje dva operatora konjukcije - "&&" i "and", u JS-u jedan "&&" (pri cemu je "&&" identican u oba slucaja), ti me ubedjujes sta ja mislim da postoji ili ne postoji u JS-u. PHP navodim kao primer u kom slucaju se ispitivanje konjukcije ne prekida nalazenjem prvog false iskaza.

Primer koji si naveo je prvi koji zapravo ima veze sa onim o cemu pricamo. Medjutim, ima tu par problema:

if (false && foo.foo){     // Passes, no errors because foo isn't defined. }

Komentar unutar if block-a je pogresan skoro u celini (jedino su znaci interpunkcije na mestu). Niti prolazi uslov (kada uslov "prolazi" to znaci da je uslov ispunjen, tj vraca true), niti je to zbog toga sto foo nije definisan.

Kompletan deo koda unutar if block-a je preskocen - i to zato sto foo.foo nije proveravan uopste.

Rastafarii ::prekida proveru na prvom delu koji vraca false - jer nema potrebe za daljom proverom. Konjukcija je tacna ako i samo ako su svi iskazi tacni, te prvi netacan iskaz neizostavno ukazuje da je konacna konjukcija netacna.

Prvi deo konjukcije je netacan i "&&" operator prekida dalju proveru jer nakon prvog netacnog iskaza nije moguce dobiti konjukciju koja je tacna ni u kom slucaju. PHP sam naveo kao primer jer u njemu postoji operator "and" (bukvalno se tako pise) koji iz nekog razloga nastavlja proveru.

To koji jezik je najpopularniji niti ima veze sa ovom temom, niti mene nesto posebno interesuje, niti znaci bilo sta.

offline
  • Ivan Kušaković
  • Pridružio: 11 Feb 2006
  • Poruke: 116

Ok, što se tiče refresh-ovanja nisam bio precizan u pisanju. Mislio sam da probaš da ugasiš Javascript kroz Prevent, da ubiješ tab i da otvoriš novi tab, i otvoriš tu stranicu i videćeš da neće odmah raditi. Već posle nekog vremena. S tobom baš mora detaljno?

Što se tiče and operatora ne moraš ga više spominjati, shvatio sam da u PHP-u ima i to.

Što se tiče ovog uslova, to sam iskopirao sa nekog sajta. Nisam ja pisao.

Hvala na strpljenju i što čitaš poruke.

Pozdrav!

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4533

LeQu ::S tobom baš mora detaljno?

Kad se radi o ovakvim stvarima treba biti što precizniji da ne bi nekog ko čita ovo doveo u zabludu.

offline
  • Ivan Kušaković
  • Pridružio: 11 Feb 2006
  • Poruke: 116

Ok, izvinjavam se.

Ko je trenutno na forumu
 

Ukupno su 741 korisnika na forumu :: 36 registrovanih, 6 sakrivenih i 699 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., amaterSRB, babaroga, Bane san, bojanM84, boki199777, branko7, Brankoni, Drug pukovnik, Gall, gasha, hyla, ibssa, ILGromovnik, JOntra, komkom, Marko Marković, mercedesamg, Mikulino, milijarder, MILO-VAN, Mitraljeta, mnn2, moldway, nikoli_ca, oddsock, Panter, Profica, sakota79, Toni, trajkoni018, udbas, USSVoyager, voja64, VP3987, Živković