Jump to content

Програмирање - лекција бр. 1

Оцени ову тему


Препоручена порука

пре 6 часа, florenntina рече

Elem, zasto ovaj kod (iz knjige) daje pogresan rezultat iako nema gresku? Ne razumem zasto mora "ref" tj. sta konkretno kompajler "pogresno cita" pa vraca rezultat 20 umesto 25?

То није погрешан резултат, тако је направљено намерно. Значи, када шаљеш параметар функцији прави се "копија" те варијабле и онда сe копија користи у функцији. Зато се оригинална варијабла не мења без обзира шта се дешава у функцији. Разлог за то је принцип који каже да сваки део кода треба да ради свој посао и не утиче на друге делове. То пуно олакшава посао, јер ако имаш пуно функција и параметара било би иначе веома тешко да се разуме шта програм заправо ради.

Зато је неопходно додати "ref" јер онда када неко сутра чита може одмах да види да ће варијабла бити промењена у функцији. То је "упозорење". А опет, програмери обично не воле "ref" јер компликује код. Прави начин да се из функције врати нека вредност је онај "return".

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

пре 1 минут, Grizzly Adams рече

То није погрешан резултат, тако је направљено намерно. Значи, када шаљеш параметар функцији прави се "копија" те варијабле и онда сe копија користи у функцији. Зато се оригинална варијабла не мења без обзира шта се дешава у функцији. Разлог за то је принцип који каже да сваки део кода треба да ради свој посао и не утиче на друге делове. То пуно олакшава посао, јер ако имаш пуно функција и параметара било би иначе веома тешко да се разуме шта програм заправо ради.

Онда дођу класе и људи ће да питају: ”А зашто су онда објекти направљени тако да функционишу на супротан начин кад то није добро?”. :)

Link to comment
Подели на овим сајтовима

1 hour ago, Grizzly Adams рече

То није погрешан резултат, тако је направљено намерно. Значи, када шаљеш параметар функцији прави се "копија" те варијабле и онда сe копија користи у функцији. Зато се оригинална варијабла не мења без обзира шта се дешава у функцији. Разлог за то је принцип који каже да сваки део кода треба да ради свој посао и не утиче на друге делове. То пуно олакшава посао, јер ако имаш пуно функција и параметара било би иначе веома тешко да се разуме шта програм заправо ради.

Зато је неопходно додати "ref" јер онда када неко сутра чита може одмах да види да ће варијабла бити промењена у функцији. То је "упозорење". А опет, програмери обично не воле "ref" јер компликује код. Прави начин да се из функције врати нека вредност је онај "return".

Da li je sa funkcijama koje vracaju nesto (return) i ovim drugim osnovnim stvarima (promenjive, if-else, for-while) moguce isprogramirati manje vise sve? Ovo ostalo mi se cini da sluzi za 'kozmetiku' (tipa reusability, modularity, blabla)

Link to comment
Подели на овим сајтовима

Управо сада, uros рече

Da li je sa funkcijama koje vracaju nesto (return) i ovim drugim osnovnim stvarima (promenjive, if-else, for-while) moguce isprogramirati manje vise sve? Ovo ostalo mi se cini da sluzi za 'kozmetiku' (tipa reusability, modularity, blabla)

Теоријски је могуће, практично немогуће. Данашњи софтвер је толико комплексан да без тих "додатних" техника не би могао ни да се направи ни да се одржава. Због тога сви данашњи послови захтевају познавање објектног програмирања итд. Мислим да је немогуће наћи посао без познавања тих ствари. А нису нешто посебно тешке, стварно...

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

пре 29 минута, Grizzly Adams рече

Теоријски је могуће, практично немогуће. Данашњи софтвер је толико комплексан да без тих "додатних" техника не би могао ни да се направи ни да се одржава. Због тога сви данашњи послови захтевају познавање објектног програмирања итд. Мислим да је немогуће наћи посао без познавања тих ствари. А нису нешто посебно тешке, стварно...

Објекти нису једини начин за прављење великог и одрживог софтвера, иако су најкоришћенији на тржишту.

Hint: F# је одма ту иза ћошка. :ani_biggrin:

Link to comment
Подели на овим сајтовима

пре 3 часа, Grizzly Adams рече

То није погрешан резултат, тако је направљено намерно. Значи, када шаљеш параметар функцији прави се "копија" те варијабле и онда сe копија користи у функцији. Зато се оригинална варијабла не мења без обзира шта се дешава у функцији. Разлог за то је принцип који каже да сваки део кода треба да ради свој посао и не утиче на друге делове. То пуно олакшава посао, јер ако имаш пуно функција и параметара било би иначе веома тешко да се разуме шта програм заправо ради.

Зато је неопходно додати "ref" јер онда када неко сутра чита може одмах да види да ће варијабла бити промењена у функцији. То је "упозорење". А опет, програмери обично не воле "ref" јер компликује код. Прави начин да се из функције врати нека вредност је онај "return".

Znam da je namerno dat "pogresan" primer da bi pokazali potrebu za "ref" ali mi je trebalo da cujem ovaj deo gore koji sam boldirala :) 

Hvala.

Link to comment
Подели на овим сајтовима

пре 1 минут, florenntina рече

Znam da je namerno dat "pogresan" primer da bi pokazali potrebu za "ref" ali mi je trebalo da cujem ovaj deo gore koji sam boldirala :) 

Hvala.

То је само један пример генералног принципа у програмирању који се зове "Separation of Concerns".

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

Иначе мислим да не би требало да вас збуњује понашање int-а у C#. Математика из основне школе:

n = 1

f(x) = x + 2

m = f(n)

Колико је n? Наравно да је и даље 1 и не може бити ништа друго осим 1. Оно што је "обрнуто" од математике је кад нека функција директно промени променљиву. Строго говорећи, то онда није функција у математичком смислу, већ процедура. Овим не кажем да је то нужно лоше, само да је супротно од онога што прво научимо у животу.  

Link to comment
Подели на овим сајтовима

E ја морам да се јавим.

Не знам да ли ви функционишете као ја - али изгледа да мени проради адреналин/пажња тек пред крај одређеног ми времена за вежбу (требало је увелико да спавам :smeh1: )

Иначе - хвала Фло - пошто ми коментари на њена питања појашњавају доста тога :skidamkapu:

 

Пошто је изговорите, реч вама влада. Док је неизговорена, ви владате њоме.

Арапска пословица

Link to comment
Подели на овим сајтовима

пре 1 сат, Juanito рече

Иначе мислим да не би требало да вас збуњује понашање int-а у C#. Математика из основне школе:

n = 1

f(x) = x + 2

m = f(n)

Колико је n? Наравно да је и даље 1 и не може бити ништа друго осим 1. Оно што је "обрнуто" од математике је кад нека функција директно промени променљиву. Строго говорећи, то онда није функција у математичком смислу, већ процедура. Овим не кажем да је то нужно лоше, само да је супротно од онога што прво научимо у животу.  

A posto sam ja uvek bio tanak sa naprednijom matematikom (osim geometrije), onda nemam problema sa ovim, kao da ucim od nule. :smeh1:

"Ви морате упознати земаљско да би сте га волели, а Божанско се мора волети да би се упознало." Паскал "Свако искључиво логичко размишљање је застрашујуће: без живота је и без плода. Рационална и логична особа се тешко каје." Шмеман "Always remember - your focus determines your reality." Qui-Gon Jinn

Link to comment
Подели на овим сајтовима

1 hour ago, Саша од Москве рече

E ја морам да се јавим.

Не знам да ли ви функционишете као ја - али изгледа да мени проради адреналин/пажња тек пред крај одређеног ми времена за вежбу (требало је увелико да спавам :smeh1: )

Иначе - хвала Фло - пошто ми коментари на њена питања појашњавају доста тога

Ako nije tajna - a `de si ti kad vec treba uveliko da spavas? Zanimljiva geografija, nista drugo... :)))

"Ви морате упознати земаљско да би сте га волели, а Божанско се мора волети да би се упознало." Паскал "Свако искључиво логичко размишљање је застрашујуће: без живота је и без плода. Рационална и логична особа се тешко каје." Шмеман "Always remember - your focus determines your reality." Qui-Gon Jinn

Link to comment
Подели на овим сајтовима

treba da budem budna i orna u 4 :D - inače tu sam u Srbiji :D

Пошто је изговорите, реч вама влада. Док је неизговорена, ви владате њоме.

Арапска пословица

Link to comment
Подели на овим сајтовима

Da probam da pomognem i ja malo oko ovih funkcija i prosledjivanja argumenata. Argumenti funkcije se tehnicki pri prosledjivanju UVEK kopiraju, u bilo kom programskom jeziku. (Jezici (tj. platforme) mogu eventualno samo dodati neku logiku oko toga.) To je direktna posledica toga kako racunar radi. Racunar podatke drzi u sistemskoj memoriji (RAM), a kada je potrebno nesto uraditi sa tim podacima onda je te podatke potrebno preneti u procesor (mozak racunara). I posto su memorija i procesor fizicki odvojeni, onda je, naravno, jedini nacin da se to uradi taj da se sadrzaj tog parceta memorije iscita i prekopira u procesor.

Zamisli da imas svesku u kojoj imas zapisan broj. I treba ti kvadrat tog broja. Onda te ja pitam koji je to broj kako bih ti to izracunao. Ti mi procitas broj, i ja ga zapisem u moju svesku kako bih ti odradio posao, i sada ta informacija postoji ne samo u tvojoj svesci nego i u mojoj svesci, i ja radim sa onim sto pise u mojoj svesci. Onda lepo izracunam kvadrat i kazem ti resenje, i ti onda to zapises kod sebe u novi red. Prva sveska je memorija, druga procesor (ili memorija u procesoru). Dakle, podaci idu iz memorije u procesor, procesor obradi podatak, i povratna vrednost ide nazad opet u memoriju.

Tako da kada pozovete funkciju sa nekim parametrom, on se uvek kopira. Kada budete radili sa klasama i objektima srescete se sa tzv. referencama i delovace kao da se ponasaju drugacije pri prosledjivanju funkcijama. Ali nemojte da vas to zbuni, to je iluzija. I ta referenca je nista drugo do obican broj, koji predstavlja memorijsku lokaciju nekog podatka/objekta. Dakle, samo je stvar u tome kako se ti brojevi interpretiraju, nekad kao vrednost, konkretan podatak s kojim treba raditi (ono s cime ste se do sada sreli), nekad kao memorijska adresa (dva puta se cita iz sveske, broj na strani 2 ti kaze da procitas nesto sa strane 5)

Stariji nek me isprave ako sam negde pogresio

 

Link to comment
Подели на овим сајтовима

×
×
  • Креирај ново...