JavaScript

3

JavaScript

offline
  • WordPress Support
  • Pridružio: 03 Feb 2015
  • Poruke: 495

vasa.93 ::Drug Elite ti reče: E.L.I.T.E. ::Ovo nije vezano samo za JavaScript već za bilo šta što programiraš. Da bi naučio da razmišljaš kao programer potrebno je vreme, ali moraš i sam da uložiš određeni trud Smile
A valjda znaš i shvataš šta radi metoda setInterval?


Naravno, ona sluzi da izabrana funkcija radi non stop, u ovom mom slucaju, ona prikazaju date slike koje sam joj ja dao da izbacuje i vraca se ispocetka sa prikazivanjem. Trudim se da shvatim svaki kod koji iskucam, interesujem se da ga razumem.


Rastafarii ::document.getElementById("current").src = images[i++]; if (i === images.length) {     i = 0; }

Bonus pitanje: zasto je ovo moguce?


Druze, nisam stigao do dela kada se koristi " ===" , ali predpostavljam da zamenjuje i<image.length-1, druga mogucnost za koju mislim je ta da images i dalje ima vecu cifru od "if" dodavsi images[i++]



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 28 Jan 2018 22:17

Rastafarii ::Stativa. Prvo vrati vrednost, pa je onda inkrementira. Da je ++i, onda bi prvo inkrementirao.Tačno. Permutovao sam prefiksni i postfiksni ++. Kako god, koliko sam skontao, tvoja suština nije bila u tome kada će inkrementiranje da se vrši (isti efekat bi mogao da se postigne i korišćenjem prefiksnog inkrementiranja, ali na drugom mestu), već u tome da ono vraća svoju vrednost koja može da se smesti u indekser i time skrati dodatna linija koja će da radi samo inkrementiranje i da se shodno tome prilagodi uslov i pojednostavi kod. Zar ne? Very Happy

Dopuna: 28 Jan 2018 22:37

Stephanos ::Naravno, ona sluzi da izabrana funkcija radi non stop...Uh, jako diskutabilno razumevanje. Predata funkcija ne radi non stop, već se samo poziva u zadatom intervalu (ako staviš 3000ms, poziva se na svake tri sekunde).
Stephanos ::Druze, nisam stigao do dela kada se koristi " ===" , ali predpostavljam da zamenjuje i<image.length-1, druga mogucnost za koju mislim je ta da images i dalje ima vecu cifru od "if" dodavsi images[i++]Uh, uh, nemoj da pretpostavljaš molim te. Mr. Green Kako bre = može da zamenjuje <? Very Happy Okej, da, === je takođe relacioni operator, i neki uslovi zapisani upotrebom operatora < mogu da se napišu uz pomoć == (ili === u ovom slučaju), ali to nikako nisu potpuno ekvivalentni uslovi.

A ovaj drugi deo je skroz nerazumljiv. Kako "if" može da ima cifru? Praviš li razliku između cifre (engl. digit) i broja (engl. number)?



offline
  • WordPress Support
  • Pridružio: 03 Feb 2015
  • Poruke: 495

vasa.93 ::Predata funkcija ne radi non stop, već se samo poziva u zadatom intervalu (ako staviš 3000ms, poziva se na svake tri sekunde).

Hocu da kazem da setInterval omogucuje pozvanoj funkciji da se ponavalja na svakih 3 sekundi.


vasa.93 ::Uh, uh, nemoj da pretpostavljaš molim te. Mr. Green Kako bre = može da zamenjuje <? Very Happy
Predpostavljao sam, posto = i == nije isto, to su dve razlicite stvari koje razlicito uticu na kod, medjutim kad sam video === pomislih da je to nesto potpuno drugacije.

vasa.93 ::A ovaj drugi deo je skroz nerazumljiv. Kako "if" može da ima cifru? Praviš li razliku između cifre (engl. digit) i broja (engl. number)?

Opet sam se pogresno izrazio, hteo sam da kazem da ima vecu vrednost. U svakom slucaju, ja sam tek krenuo da ucim, prosao sam 11 video tutorijala sto je jako malo, to su bile neke osnove. Ne postavljaj mi vise takva pitanja, da se ne brukam ovde Very Happy Very Happy Znam i da cu za nekoliko meseca da se smejem kada budem citao sta sam pisao ovde. Very Happy

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Stephanos ::Hocu da kazem da setInterval omogucuje pozvanoj funkciji da se ponavalja na svakih 3 sekundi.E opet si se loše izrazio. Mr. Green Nije to pozvana funkcija, već prosleđena. Very Happy
Stephanos ::Predpostavljao sam, posto = i == nije isto, to su dve razlicite stvari koje razlicito uticu na kod, medjutim kad sam video === pomislih da je to nesto potpuno drugacije.Pa kako da nešto vrlo slično bude potpuno drugačije? Very Happy Elem, == i === imaju sličnu ulogu, osim što je ovo drugo jednako više jednako nego ovo prvo. Very Happy I bukvalno - === prilikom poređenja uzima u obzir i tipove vrednosti koje se porede, dok == prilikom poređenja vrednosti različitih tipova može da vrši konverzije. Npr. "1" === 1 je false, a "1" == 1 je true.
Stephanos ::Ne postavljaj mi vise takva pitanja, da se ne brukam ovde Very Happy Very Happy Znam i da cu za nekoliko meseca da se smejem kada budem citao sta sam pisao ovde. Very HappyMa opušteno, ne brukaš se. Svako od nas je nekada bio početnik u nečemu, nema ničeg sramotnog u tome. Smile Ziveli

offline
  • WordPress Support
  • Pridružio: 03 Feb 2015
  • Poruke: 495

Da bi se naucilo i savladalo mora da se ide odpocetka po redu, ja se trudim da ne preskacem gradivo, trenutno pratim tutorijale na srpskom, kada ih pregledam, precicu na tutorijale na engleskom. Sve u svemu mislim da JS i nije toliko komplikovan i tezak, ali za pocetnike jeste. Ti, Elite i Rastafarii koristite neke izraze koje nikad nisam cuo u svetu programiranja, i za mene je to trenutno kao kineski jezik, jer bukvalno nisam ni stigao do tog dela ali me je zanimalo kako da podesim setInterval za ono sto sam ja hteo, sada mogu da nastavim tamo gde sam stao. Smile

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

vasa.93 ::tvoja suština nije bila u tome kada će inkrementiranje da se vrši (isti efekat bi mogao da se postigne i korišćenjem prefiksnog inkrementiranja, ali na drugom mestu), već u tome da ono vraća svoju vrednost koja može da se smesti u indekser i time skrati dodatna linija koja će da radi samo inkrementiranje i da se shodno tome prilagodi uslov i pojednostavi kod.

Jel znas ti Vaso sta je "isto, a nije isto"? Mr. Green Inace, poenta je bila u sve tri stvari - i kad ce inkrementiranje da se izvrsi, i koju vrednost ce da vrati, i skracivanje koda.

@E.L.I.T.E: svaka cast, to je jos krace a ista funkcionalnost Smile

Inace, @Stephanos, "==" je "loose comparison" , odnosno da li leva i desna strana evaluiraju u isto (0 == false ce vratiti true, jer je "0" tzv. false-ish vrednost), dok je "===" mnogo precizniji "strict comparison" koji osim sto proverava vrednost, proverava i tip, pa ce "0 === false" vratiti false, jer je 0 integer, a false boolean tip.

offline
  • WordPress Support
  • Pridružio: 03 Feb 2015
  • Poruke: 495

Rastafarii ::

Inace, @Stephanos, "==" je "loose comparison" , odnosno da li leva i desna strana evaluiraju u isto (0 == false ce vratiti true, jer je "0" tzv. false-ish vrednost), dok je "===" mnogo precizniji "strict comparison" koji osim sto proverava vrednost, proverava i tip, pa ce "0 === false" vratiti false, jer je 0 integer, a false boolean tip.


Docicu ja i do tog dela, pa kad naucim, mocicu da vam upadam u tu vrstu konverzacije Very Happy

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

@Stephanos, na ovo što ću sada da napišem ne trebaš (mada možeš) da obraćaš pažnju trenutno, ali imaj ga u vidu u budućnosti Smile

vasa.93 ::(ako staviš 3000ms, poziva se na svake tri sekunde)
Mala digresija; ovo što si rekao je tačno u teoriji, ali ne mora da bude u praksi (i u većini slučajeva nije, bar kada se radi o većim projektima).

Ovo je pojednostavljena skica standardnog JavaScript okruženja;



Stack služi za praćenje toka izvršavanja JavaScript koda. Ispod je mali primer; definisane su tri funkcije (pomnozi, kvadriraj i ispisiKvadratOd). Uzećemo da je stack na početku prazan (ne znam da li globalan okvir takođe ulazi u njega, no to sada nije ni bitno za ovaj primer). ispisiKvadratOd funkcija je pozvana zajedno sa argumentom 4 i kreira se novi okvir (okvir funkcije koja se trenutno izvršava) u stack-u. Unutar nje pozivamo funkciju kvadriraj sa istim argumentom koja treba da vrati vrednost za ispisivanje i dodajemo je u stack. Da bi kvadriraj vratila vrednost, poziva funkciju mnozenje sa dvaput prosleđenim istim argumentom.

U funkciji pomnozi, vraćamo vrednost 16 (n * n = 4 * 4). Vraćanjem vrednosti završava se izvršavanje funkcije pomnozi pa se ona uklanja sa stack-a, a nastavlja se izvršavanje funkcija kvadriraj. Vrednost 16 se vraća funkciji ispisiKvadratOd, a funkcija kvadriraj se uklanja sa stack-a. Promenljiva kvadrat dobija vrednost 16, a console.log funkcija sa tom vrednošću se dodaje na stack. Nakon ispisa, funkcija console.log se uklanja sa stack-a. Kraj funkcije ispisiKvadratOd implicira da se ista može ukloniti sa stack-a i na kraju on opet ostaje prazan. Prikaz stanja stack-a korak po korak;

+----------------------+ +----------------------+ +----------------------+ |                      | |                      | |                      | |                      | |                      | |                      | |                      | |                      | |                      | |                      | |                      | | kvadriraj(4)         | |                      | | ispisiKvadratOd(4)   | | ispisiKvadratOd(4)   | +----------------------+ +----------------------+ +----------------------+ +----------------------+ +----------------------+ +----------------------+ |                      | |                      | |                      | |                      | |                      | |                      | | pomnozi(4, 4)        | |                      | |                      | | kvadriraj(4)         | | kvadriraj(4)         | |                      | | ispisiKvadratOd(4)   | | ispisiKvadratOd(4)   | | ispisiKvadratOd(4)   | +----------------------+ +----------------------+ +----------------------+ +----------------------+ +----------------------+ +----------------------+ |                      | |                      | |                      | |                      | |                      | |                      | |                      | |                      | |                      | | console.log(kvadrat) | |                      | |                      | | ispisiKvadratOd(4)   | | ispisiKvadratOd(4)   | |                      | +----------------------+ +----------------------+ +----------------------+


Da bi dokazao ovo umesto vraćanja vrednosti u funkciji pomnozi vratiću exception koji će automatski zaustaviti izvršavanje koda i ispisati trenutno stanje stack-a (tzv. stack trace).



Heap je deo za alokaciju memorije. U C-u recimo koristimo funkcije malloc() i free() za rad sa memorijom, no kod JavaScript-a i većine jezika danas ovaj proces se odrađuje automatski preko sakupljača đubreta (garbage collector) koji alocira potrebnu memoriju i uklanja je nakon što podaci koje sadrži više nisu potrebni.

Sada dolazimo do interesantnog dela. JavaScript okruženja obično koriste jednu nit za izvršavanje koda što znači da možemo da radimo samo jednu stvar u isto vreme, što nije slučaj kod jezika poput Jave koji podržavaju višenitnost. Kako je onda moguće da se kod zaista izvršava nakon određenog vremena? Razlog je queue.

setInterval() je asinhrona funkcija, što znači da joj prosleđujemo callback funkciju koja će biti pozvana nakon završetka određenog zadatka, dok će se dalji tok programa nastaviti za to vreme. Dakle, nakon pozivanja setInterval(), API unutar pregledača kreira brojač koji nakon svakih odbrojanih x milisekundi izvršava određenu funkciju. Zapravo, tako bi trebalo da je u teoriji. Pošto pričamo o okruženjima koja nisu višenitna, funkcija se ne izvršava odmah, već se šalje u queue. U njemu ostaje sve dok se stack ne isprazni. Nakon što se stack isprazni, ona se ubacuje u stack i izvršava.

Jedan praktičan primer za ovo što sam rekao bi bila setTimeout() funkcija podešena na 0 milisekundi. U teoriji bi trebala da bude pozvana odmah, no kao što možemo videti iz priloženog, to nije slučaj (upravo iz razloga koji sam opisao gore). Ona se nakon 0 milisekundi prebacuje u queue, ali se izvršava tek nakon što se stack isprazni.



Takođe, renderovanje se izvršava kada je stack ispražnjen (zbog toga recimo nije moguće raditi bilo šta na stranici nakon pozivanja alert() funkcije sve dok je dijalog otvoren).

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Mhm, razume se. Obrati pažnju na to da je reč poziva oba puta napisana u kurzivu. Smile vasa.93 ::Predata funkcija ne radi non stop, već se samo poziva u zadatom intervalu (ako staviš 3000ms, poziva se na svake tri sekunde).Upravo iz razloga koje si naveo, a čisto da ne bih opterećivao diskusiju. Very Happy

Svakako, dao si prilično dobar sažetak. Very Happy

Ko je trenutno na forumu
 

Ukupno su 965 korisnika na forumu :: 39 registrovanih, 7 sakrivenih i 919 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, Atomski čoban, bojanM84, bojcistv, Brana01, BraneS, Bubimir, Caruga5, cikadeda, Denaya, doklevise, Frunze, Georgius, HrcAk47, ILGromovnik, JOntra, Još malo pa deda, ladro, maiden6657, Mihajlo, mikrimaus, mile23, nenad81, NoOneEver Dreams, ozzy, pavlo, raptorsi, repac, RJ, royst33, samsung, sombrero, Tvrtko I, VP6919, vukovi, Webb, wulfy, yufighter, šumar bk2