Argumenti unutar funkcije - pojasnjenje

Pozdrav

Kako sam se zadnjih dana bacio na aktivno ucenje Javascripta, naisao sam i na neke stvari koje ne mogu skontati cemu sluze, zasto i kako.

Nemam nekog velikog iskustva sa cistim programiranjem, pa mi vjerovatno to stvara problem.

Uglavnom, moze li mi neko malo blize i na jednostavan nacin pojasniti, cemu sluze arugmenti unutar funkcije, njihovu prakticnu primjenu i slicno ?

Unaprijed zahvalan :smile:

Daj nam primjer, jer ja ne razumim šta misliš pod argumentima unutar funkcije ? Predpostavljam da misliš na slavni arguments array-like objekt koji je dostupan unutar JS funkcija možda.

function sayHello(message){
   alert(message); 
}
sayHello('Hey there, you stink!');
sayHello('I feel bad I just said that');

message, u ovom slucaju.

Zasto se nece prikazati aler, ako uklonim message ?

Zato što se argument unutar funkcije ponaša kao varijabla.

Hajde promjeni “message” u “poruka” pa će ti sve biti jasnije.

1 Like

Hmm…ako ovo pitaš, i ako sam dobro shvatio pitanje…bojim se da si preskočio neke lekcije koje su prilično osnove programiranja, a koje su ti od debele koristi ako se koristiš PHP-om, JS-om…ili kojim već programskim jezikom koji je objektno orijentiran.
Možda griješim, no sam si odgovorio koliko si upoznat sa sljedećim pojmovima:
-tipovi varijabli
-razlike globalnih lokalnih varijabli
-if else statmenti
-petlje (for, while …)
-funkcije

Sigurno ti je većina ovog poznato, no kako je “if else” osnova, tako su i funkcije osnova…pa može biti da si nešto preskočio ako ovo pitaš.

A sad da pokušam pojasniti funkciju i argumente, i dalje sumnjajući da sam krivo shvatio pitanje :).

Znači, funkcija je ovisnost ulaza o izlazu. To možeš sresti i u matematici kad kažemo da je y funkcija od x. …što bi značilo da vrijednost y ovisi o vrijednosti x. Npr. y=2x.
Slično i u programiranju…vrijednost izlaza funkcije ovisi o vrijednostima na ulazu u funkciju…i naravno njenom algoritmu što će napraviti s tim ulazom. Taj ulaz su ti argumenti koje prosljeđujemo funkciji.
Znači da bi napravili programski funkciju koja će biti ekvivalent y=2
x…i koju ćemo recimo nazvati myDoubleFunkc:

function myDoubleFunkc(x)
{
var y=2*x;
return y;
}

i sad pozoveš funkciju

var y=myDoubleFunkc(4) ; //y će biti osam.

…jel to na tragu pitanja ili?

1 Like

Ovo ti je obična lokalna varijabla sayHello funkcije. Kad pozoveš ovu funkciju onda joj zalijepiš parametar i to je to. Stvarno ne znam šta bi ti više rekao jer je jednostavno.Kroz praksu će ti ovo postati jednostavno.

Ovaj message parametar nije vidljiiv izvan sayHello funkcije i to je najbitnije za znati.
Misli o ovom message-u kao o običnoj varijabli kao što i je obična varijabla.

1 Like

Kao što Bozoou reče moraš osnove programiranje proučit malo više. Ovo je zaista jednostavno.

1 Like

Hvala ljudi, shvatio sam sada :smile:

Da, nemam iskustva u programiranju.Znam ja u osnovi sta je array, koje vrste imamo, kako ga postaviti, sta je loop, if statmente, razlike izmedju lokalnih i globalnih varijabli itd, ali zablokiram na nekim da tako kazem glupostima.

Jos jednom hvala.

Tek dok sam napisao…vidim da sam dobro pretpostavio. Svakako uroni negdje u osnove programiranja gdje je logika više manja ista za sve programske jezike i bit će ti od debele koristi ako želiš imati kvalitetno znanje. A nije to težak pristup…jer tek nakon toga će ti sve stvari postati jasnije, logičnije…itd. …a vidicima i kreativnosti neće biti granica kad se dohvatiš tih pravih alata od kojih su sačinjeni svi alati koji se praktički koriste :smile:

A sad natrag na funkcije.
Pazi, funkcija može biti bez argumenata…i može nešto odrađivati i bez da je primila argument na ulazu. Recimo napraviš funkciju koja će header stranice pobojati u crveno. I ocke…kad god pozoveš tu funkciju, dobiješ crveni header.
No ideja funkcija je da su ti djelovi koda unutar nje višestruko iskoristivi…te da spomenuta funkcija za bojanje headera ne radi samo na jednoj stranici…nego da je primjenjiva na svim stranicama i u raznim situacijama. Dalje od toga, ne mora biti samo ograničena na bojanje headera…može bojati recimo bilo koji element pod takvim i takvim uvjetima kako je već prilagođena.
Kako to postići? Ulaznim argumentima! Recimo, funkcija koja boja, napravi se da zahtjeva header kao ulazni argument, koji će biti upravo taj header kojeg će pobojati. Sada ista funkcija može koristiti i na različitim projektima tako što na ulazu dobije header kojeg će pobojati. Kad bi header unutar nje bio fiksno zadan koji će biti pobojan…onda se gubi ta fleksibilnost koju funkcije omogućavanju…

1 Like

Imam ovaj video na udemy.com, ovdje ima besplatno u svakom slučaju vrijedi pogledati da shvatiš kako neke stvari rade ispod površine
https://www.youtube.com/watch?v=Bv_5Zv5c-Ts

1 Like

Razliciti tutori razlicito prijaju. Meni je medju nekim ostalima ok Derek Banas, a on ima dosta materijala za JavaScript (mada je programerski poliglota).

Najvise knjige preferiram, ali volim i tutoriale pogledati.

Najvise bih bio sretan kad bi Jeffrey Way, snimio neku seriju tutoriala o JS-u.

Otud i pocetna recenica.
Od knjiga mogu preporuciti (i samom mi je preporucena) Clean Code by Robert C. Martin koja je kvalitetan uvod u dobar nacin razmisljanja pri/za programiranje. Nije vezana striktno za konkretan jezik vec za paradigmu i nacin pisanja koda na pravilan nacin sto u mnogo cemu moze naknadno da olaksa i pomogne. Ne znam za neke konkretne knjige za JS, licno uglavnom koristim oficijalne sajtove i stackoverflow.

1 Like

http://eloquentjavascript.net/

Poceo sam ovo citati.Za sada mnogo mi se svidja, jako detaljno objasnjeno.

Po naslovima chaptera…to je (skoro) ono što ti treba :wink:

…možda bi mogao naći nešto što je još više orijentirano programskoj logici, a manje posvećeno specifično JS-u.
Ovdje se recimo srećeš sa canvasom, http-om, formama, (što nije loše) …ali to govori da se tematika ne drži usko temelja programske logike, tako da ne znam koliko je duboko ili površno razrađena ta osnova.

Ono što bi ti ja svakako preporučio, da kod učenja programiranja (ovdje pod programiranje mislim na te temelje programskih jezika) …da nađeš lekcije koje su popračene “zadaćama/zadacima”.
Teorija je naravno neizbježna…no kod programiranja je isto tako neizbježna i praksa koja mora ići paralelno uz teoriju. Tako da ono što pročitaš odmah i probaš…te tek na taj način kompletno shvatiš pročitano. Da iz prve ruke smisliš neke iznimke koje nisu spomenute u teoriji…te da tako vidiš kako stvar zaista šljaka.
U programiranju primjera ima beskonačno i uvijek ćeš se nečega dosjetiti što teorija nije takla u pročitanoj lekciji…i bit će ti to gušt isprobati iz “deset” različitih kuteva. Doslovice igranje, koje mnoge upravo zaljubi u programiranje.

Tu se ne radi o kompleksnim zadacima…doslovice ono da da ispišeš parni neparni niz brojeva… itd…prema nešto kompleksnijim primjerima naravno.

Besides explaining JavaScript, I also will introduce the basic principles of programming. Programming, it turns out, is hard. The fundamental rules are typically simple and clear. But programs built on top of these rules tend to become complex enough to introduce their own rules and complexity. You’re building your own maze, in a way, and you might just get lost in it.

Dosta stvari je detaljnije objasnjeno ovdje, nego u knjizi u koju sam prethodno poceo citati.

Prvo sam procitao introduction, i shvatio da bi to moglo biti to :smiley:

Ono sto mi se dopalo u snimku koji je @mestro67 podijelio je to, sto je autor pomenuo neke frameworke i bilioteke i to da mnogi cine greske preskajuci ucenje cistog JS-a vec se bacaju odmah na frameworke i jQuery naravno :smile:

Ono sto je moj cilj je prvo, jako dobro ovladati cistim Javascriptom.

Svakako što god pročitaš, ne može ti škoditi. (barem u većini slučajeva)

No, moj savjet ti je da ne skrećeš fokus na lekcije koje ti se učine da odmiču od tih temelja.
Recimo regularni izrazi su izrazito odlična stvar u programiranju…no po meni oni ipak dolaze kasnije i nema potrebe da ti razvodnjavaju fokus u startu kad se želiš uhvatiti temelja. Ocke je vidjeti tko su, što su…no da se njih dobro savlada, ipak se treba malo pozabaviti s njima. Nikako nebi stavio u prvi plan dok izučavaš temelje.

Isto bi rekao za sva ostala poglavlja s datog linka koji se dotiču isključivo JS-a, a ne i ostalih objektno orijentiranih programskih jezika.
Ti ako si u fazi da želiš učiti “objektno programiranje”, onda se drži toga koliko možeš. Kad budeš gotov s tim lekcijama s datog linka (koje se dotiču objektnog programiranja), onda traži dalje ako će te zanimati i ako misliš da ti treba.

Naravno, sve ovisi i o tebi koliko daleko želiš ići.
Programiranje je ko sport…nebo je granica. Putem ćeš se konstantno usavršavati, i bilo bi nerealno da prvo želiš naučiti jako dobro programirati, a tek onda da se baciš na konkretne zadatke. Ipak su konkretni zadaci ti koji će te suočiti s konkretnim problemima i naučiti te kako ih rješiti… No s druge strane, bez nekog dovoljnog temelja je teži put učiti na konretnim situacijama. I tu se upravo opeku ti koji preskoče osnove i onda putem frameworka i gotovih metoda rješavaju konkretne probleme koje je netko drugi rješio za njih. To zvuči lagano da je netko drugi rješio probleme za nas…no to je teži način.

To je kao da mi netko da alat koji može napraviti cijeli auto. To je super, dok na tom autu ne zatrebam malo drugačije retrovizore…
Ako znam znanje toga koji je napravio taj alat za štampanje auta…i dalje se mogu poslužiti istim alatom i ubrzati si proces…no kad zatrebam modifikaciju retrovizora, a znam znanje iza alata…lako ću si prilagoditi alat. :wink:

1 Like