Uvlačenje

6.4.2 Uvlačenje 

Šta si pokvario?
Pa rekao si mi da vežbam, i ja, reko, da probam malo... 
I? Dobio si upalu onog sivog mišića što se nalazi u lobanji? Ništa strašno, evo sad ću da ti ga izmasiram na 100 sledećih strana....
?!? Izgleda je Python dobio neku upalu.... Evo, da ti pokažem u intereaktivnom promptu....
>>> konj = 'Python' 
>>>   print('Zovem se', konj) 
  File "", line 1 
    print('Zovem se', konj) 
    ^ 
IndentationError: unexpected indent 
>>> 
Aha... Vidim... Ujedaš ruku što te lebom rani? Bitango jedna!
Ma samo sam bio malo izfrustriran sa ovim programiranjem... Nije se valjda programski jezik naljutio na mene? Jel ću morati da pređem na neki drugi?
Ma daj, mani se sujeverja :) Mada donekle si u pravu. Python je dobio upalu.... Upao mu razmak, hehehe. I to sa tvoje strane!
Šta to znači?
Razmak je prilično važan u Python-u. Zapravo, razmaci na početku logičkih linija su važni. Ti razmaci se nazivaju indentacija (uvlačenje). „Dubina“ indentacije na početku linije („spejs“ ili tab tasteri na tastaturi) se koristi da bi se odredilo grupisanje naredbi. Takve grupe naredbi se nazivaju blokovi. Pošto još nisi sreo naredbe koje iz nekog čudnog razloga treba da budu grupisane, ovde ću napomenuti samo ofrlje „ideju“ koja stoji iza ovoga. Rekao sam da Python izvršava program, tako što ga „čita“ krećući odozgo, od prvog reda, prema dole. Šta ako mi to ne želimo? Hoćemo da on „preskoči“ određene linije.
 Ha, pa to je lako! Samo stavimo „tarabu“ i ćao đaci!
A šta ako želimo da se „vratimo“ na neki deo programa koji je iznad? I da znaš, imaćeš tu mogućnost! Poenta nije da sada naučimo kako uraditi to, već je naglasak na tome kako Python da razlikuje komande koje treba preskočiti, ili koje treba ostaviti za kasnije, ili komande koje se iz nekog razloga trebaju ponavljati? Kako će on, jadničak, da zna gde je početak, a gde treba da se zaustavi, pa da skoči na neki drugi deo? Mi moramo na neki način da mu damo do znanja koja je to grupa komandi!
A dajemo mu do znanja tako što tu grupu naredbi uvučemo (izvršimo identaciju), što znači da sve komande koje iz nekog razloga, idu zajedno, moraju da imaju isti nivo uvlačenja. Videćemo primenu i zašto je sve ovo oko blokova važno u kasnijim poglavljima. 
A kakve to veze ima sa mojim pitanjem? Pa eto mu naredba koja je uvučena, što je nije ubacio u blok?
Obrati pažnju: ti si postavio dva znaka za razmak na početku drugog reda. Greška koju pokazuje Python ti govori da je sintaksa programa pogrešna, odnosno da tvoj program nije ispravno napisan. Šta to znači? Znači da ne možeš da počneš da praviš blokove naredbi proizvoljno (kako hoćeš, kad hoćeš), već postoje prilično jednostavna pravila, koja će biti detaljno razrađena u kasnijim poglavljima, kao što je kontrola protoka. 
Ne razumem ovo – razmak taster, tab....Kakve to veze ima sa ovim...
Taster razmak (ili space, po Vuku je „Spejs“) je najveći taster na tastaturi. Koristiš ga svaki dan. Tab je već malo teže naći na tastaturi, i za to ti treba fakultet (i to neki kvalitetniji, ovi što završe programiranje na Megatrendu ga uvek pomešaju sa tasterom Page Down što mislim da su trebali da reše makar na trećoj godini studija).
Savet ti je, kada budemo učili indentaciju da koristiš ili samo razmake za uvlačenje, ili koristite samo tabove. Konvencija među programerima koji rade u Pythonu je da se koriste 4 razmaka. Dobri editori kao što su Komodo Edit ili IDLE će automatski da uvlače potrebne delove programa, tj brinuće o blokovima umesto tebe. Takođe je važno da znaš da sve naredbe koje sačinjavaju jedan blok moraju da imaju isti broj „spejsova“ pri uvlačenju (4 razmaka prvi blok, 8 drugi – koji se nalazi u prvom itd... - Šta reče? Polako.... Kasnije ćeš saznati šta ovo znači), u suprotnom, ako se ne pridržavaš ovoga, tvoj program neće raditi kako treba, u najboljem slučaju će pokazati greške. 
Ako si se susretao sa nekim drugim programskim jezicima, možda si primetio da koriste vitičaste zagrade za grupisanje naredbi. Sa stanovišta Pythona, stvar je prilično jasna:
Python će uvek koristiti uvlačenja za blokove naredbi i nikada neće koristiti vitičaste zagrade! Ako pokrenemo:
>>> from __future__ import braces 
  File "", line 1 
SyntaxError: not a chance 
>>> 
Prilično jasno i glasno, zar ne? (braces – vitičaste zagrade).

6.4.1 Logička i
fizička linija
Indeks 6.5 Tipovi podataka

Коментари

Popularno

Tehnički problemi (i ostala tehnička čudesa) u najavi (i u bliskoj istoriji)

Izvršavanje Python programa

Instalacija uz pomoć WUBI-ja

Vredela si svakoga stiha

Python tutorijal - indeks postova

Izbor uređivača teksta (Editora)

Kreiranje izvorne datoteke

Sistem te laže?!? (prvi deo - pitanja)

Prevelika očekivanja

Kako blokirati neželjene oglase koje AdSense pokazuje na Vašoj web lokaciji