# Dodjela (računarstvo)

### Izvor: Wikipedija

U računarstvu, naredba dodjele ili pridruživanja postavlja ili ponovno postavlja vrijednost pohranjenu u lokaciji/ama za pohranu označenim imenom varijable. U većini imperativnih računalnih programskih jezika, naredba dodjele je jedna od osnovnih naredbi.

Naredba dodjele često dopušta da isto ime varijable sadrži različite vrijednosti u različitim vremenima tijekom izvođenja programa.

## [uredi] Oznaka

Uoničajeno tekstualno predstavljanje dodjele uključuje znak jednakosti (“=”) ili “:=”. Ova dva oblika su tipična za programske jezike, kao što je C, koji dodjelu klasificiraju kao infiksni operator.

  `varijabla = izraz` | Fortran, C, Java, …
  `varijabla := izraz` | ALGOL, Pascal, Ada, Dylan, …

Druge mogućnosti uključuju strelicu ulijevo ili istaknutu ključnu riječ.

  `varijabla <- izraz` | Objective Caml, S, R, ...
  `varijabla ← izraz` | APL
  `MOVE izraz TO varijabla` | COBOL
  `set varijabla to izraz` | AppleScript

Neki izrazno orijentirani jezici, kao što su Lisp i Tcl, jednoobrazno rabe funkcijsku sintaksu za sve naredbe, uključujući dodjelu.

  `(setq varijabla izraz)` | Lisp, Scheme (`set!`), …
  `set varijabla izraz` | Tcl

## [uredi] Djelovanje

Semantički, opercija dodjele mijenja trenutno stanje izvršavajućeg programa. Sljedbeno tome, dodjela je ovisna o konceptu varijable. U dodjeli

- Izraz `izraz` je evaluiran u trenutnom stanju programa.
- Varijabli `varijabla` se dodjeljuje izračunata vrijednost, zamjenjujući prethodnu vrijednost varijable.

Primjer: Pretpostavljajučći da je `a` numerička varijabla, dodjela `a := 2*a` znači da je sadržaj varijable `a` udvostručen nakon izvršavanja naredbe.

Primjer odsječka C koda:

         int x = 10;
         float y;
         x = 23;
         y = 32.4;

U ovom primjeru, varijabla `x` je prvo deklarirana kao int (integer - cijeli broj), a potom joj je dodijeljena vrijednost 10. Valja uočiti da se deklaracija i dodjela odvijaju u istoj naredbi. U drugoj liniji koda `y` je deklariran bez dodjele. U trećoj liniji koda `x` je nanovo dodijeljena vrijednost 23. Konačno, `y` je dodijeljena vrijednost 32.4.

Za operaciju dodjele važno je da je vrijednost od `izraz` dobro definirana (da je valjana rvrijednost) te da `varijabla` predstavlja izmjenljiv entitet (valjana je izmjenljiva (ne-const) lvrijednost). U nekim jezicima kao što je Perl, nije nužno deklarirati varijablu prije dodjele.

### [uredi] Paralelna dodjela

Neki programski jezici, kao što su Python, Perl, Ruby, OCaml i JavaScript (od inačice 1.7.), dopuštaju paralelnu dodjelu nekoliko varijabli. U pseudokodu:

    a,b := 0,1

Simultano dodjeljuje 0 varijabli `a` i 1 varijabli `b`. Zanimljivije,

    a,b := b,a

zamjenjuje vrijednosti varijabli `a` i `b`. U jezicima bez paralelne dodjele, ovo bi trebalo biti napisano rabeći privremenu varijablu:

    var t := a
    a := b
    b := t

s obzirom da `a:=b ; b:=a` ostavlja i u `a` i `b` izvornu vrijednost varijable `b`.

### [uredi] Vrijednost dodjele

U većini izrazno orijentiranih programskih jezika, naredba dodjele vraća dodjeljenu vrijednost, dopuštajući idiome poput `x = y = a`, što dodjeljuje vrijednost varijable `a` i varijabli `x` i varijabli `y`, te poput `while (f = read()) {…}`, koji rabi povratnu vrijednost funkcije za upravljanje petljom dok dodjeljuje istu vrijednost varijabli.

U drugim je programskim jezicima vrijednost dodjele nedefinirana i takvi su idiomi nevaljani. Primjeri takvih jezika su Scheme i Haskell.

## [uredi] Dodjela nasuprot jednostrukoj dodjeli

U funkcijskom programiranju dodjela se obeshrabruje u korist jednostruke dodjele, također zvane i vezanje imena. Jednostruka se dodjela razlikuje od dodjele opisane u ovom članku na način da se može načiniti samo jednom - naknadne ponovne dodjele nisu dopuštene. Jednostruka dodjela je jedini način dodjele dostupan u čistim funkcijskim jezicima, kao što je Haskell, koji nemaju varijable. Nečisti funkcijski jezici pružaju pored jednostruke dodjele i onu pravu (iako se prava dodjela rabi s mnogo manjom učestalošću nego u imperativnim programskim jezicima). Primjerice, OCaml pruža jednostruku dodjelu sintaksom `let ime = vrijednost`, dok se prava dodjela pruža rabeći operator `<-`.

## [uredi] Dodjela nasuprot jednakosti

Programeri početnici često brkaju dodjelu s usporedbom za jednakost, s obzirom da "=" označuje jednakost u matematici, i rabi se za dodjelu u mnogim jezicima. Ali dodjela mijenja vrijednost varijable, dok ispitivanje jednakosti ispituje imaju li dva izraza istu vrijednost.

U mnogim je jezicima operator dodjele jedan znak jednakosti ("=") dočim je operator ekvivalencije par znakova jednakosti ("==") - u nekim jezicima, kao što je BASIC, jedan znak jednakosti se rabi u obje svrhe, s tim da kontekst odlučuje značenje uporabe.

Ovo može voditi ka greškama ako programer zaboravi koji je od oblika (=, ==, :=) prikladan (ili pogrješno otipka = kad je == potreban). Ovo je uobičajen programski problem s jezicima kao što je C, gdje operator dodjele također vraća dodijeljenu vrijednost, i može biti valjano ugniježđen unutar izraza (na isti način na koji funkcija vraća vrijednost). Ako je namjera usporedba dvaju vrijednosti `if` naredbom, primjerice, dodjela će najizglednije vratiti vrijednost koja se može interpretirati kao `TRUE`, u kojem će se pak slučaju izvršiti `then` podnaredba, što će pak voditi ka neočekivanom ponašanju. Neki jezični procesori mogu detektirati takve situacije i upozoriti programera na potencijalnu grješku.

Dobavljeno iz "http://hr.wikipedia.org../../../d/o/d/Dodjela_%28ra%C4%8Dunarstvo%29.html"

Kategorija: Konstrukti u programiranju

##### Views

- Članak
- Razgovor
- Trenutna inačica

##### Traži

##### Drugi jezici

- Česky
- Deutsch
- English
- Français
- Polski
- Русский