Stil programiranja

Stil programiranja je skup pravila ili smernica koji se koriste prilikom pisanja izvornog koda za računarski program. Često se tvrdi da  određen programski stil može pomoći programerima da čitaju i razumeju izvorni kod u skladu sa stilom, i tako da se izbegne uvođenje grešaka.

Klasičan rad na predmetu je Elementi Programskog Stila, napisan u 1970., i ilustrovan sa primerima iz Fortran i PL/I jezika preovladava u to vreme.

Stil programiranja koristi se u određenom programu i može se izvesti iz kodirajućih konvencija preduzeća ili drugih računarskih organizacija, kao i sklonosti autora koda. Stilovi programiranja su često dizajnirani za određeni programski jezik (ili jezičke): stil smatra da ono što je dobro u C izvornom kodu ne može biti prikladno za Bejsik izvorni kod, i tako dalje. Međutim, neka pravila najčešće se primenjuju na mnoge jezike.

Elementi dobrog stila uredi

Dobar stil je subjektivna stvar, i teško je definisana. Međutim, postoje nekoliko elemenata zajednički za veliki broj programskih stilova. Pitanja se najčešće smatraju kao deo programskog stila uključujći raspored izvornog koda, uključujući i uvlačenje; upotreba belog prostora oko operatera i ključne reči; kapitalizacija ili na drugi način ključnih reči i imena varijabli; stil i pravopis korisničkih definisanih identifikatora, kao što su funkcije, procedure i imena promenljivih; i upotreba i stil komentara.

Izgled koda  uredi

Stilovi programiranja obično se bave vizuelnim izgledom izvornog koda, sa ciljem lakšeg čitanja. Softver je dugo bio dostupan da automatski formatira izvorni kod, ostavljajući kodere da se koncentrišu na imenovanja, logiku i više tehnike. Kao praktičnu tačku, koristite računar za formatiranje izvornog koda što štedi vreme, a moguće je da ih sprovedu kompanije širom standarda bez rasprave.

Uvlačenje uredi

Stilovi uvlačenja pomažu u identifikovanju kontrole protoka i blokova koda. U nekim programskim jezicima udubljenje služi da se ograničavaju logički blokovi koda; ispravno udubljenje u ovim slučajevima je više od stvari stila. U drugim jezicima uvlačenja i belog prostora ne utiče na funkciju, iako logično i konzistentno udubljenje čini kod više čitljivim. Uporedi:

if (сати < 24 && минути< 60 && секунде < 60) {
    return тачно;
} else {
    return нетачно;
}

ili

if (сати < 24 && минути < 60 && секунде < 60)
{
    return тачно;
}
else
{
    return нетачно;
}

sa nečim kao što je

if ( сати < 24
   && минути < 60
   && секунде < 60
)
{return тачно
;} else
{return нетачно
;}

Prva dva primera su verovatno mnogo lakša za čitanje jer su uvučeni u postojećem putu (a "visi stav" stil). Ovaj udubljeni stil je posebno koristan kada se radi o višestrukim konstrukcijama. Imajte na umu, međutim, da ovaj primer je isto jednostavan:

return (сати < 24 && минути < 60 && секунде < 60);

ModuLiq uredi

 Uporedite sve gore navedeno sa:

if (сати < 24 && минути < 60 && секунде < 60)
return тачно;

else
return нетачно;

Lua uredi

Lua ne koristi tradicionalne vitičaste ili obične  zagrade. ako/inače izjave samo zahtevaju vaš izraz da budu praćene od  тада, i zatvaraju svoju ako / inače izjavu sa крај.

if сати < 24 и минути < 60 исекунде < 60 then
    return тачно
else
    return нетачно
end

Uvlačenje nije obavezno. и,или,не se koriste između tačno/netačno izjava. Oni su tačno/netačno izjave, kao

print(није тачно)

što bi značilo lažna.

Pajton uredi

Pajton koristi uvlačenje da ukaže kontrolne strukture, tako da su potrebna ispravna udubljenje. Na ovaj način, potreba za zagrade sa zagradama (t.j. { i }) se eliminiše. Na drugu ruku kopiranje i lepljenje pajton koda može dovesti do problema, jer nivo uvlačenja njegovog duplikat koda ne može biti isti kao nivo utiskivanja, trenutne linije. Takva oblikovanje može da bude zamorno da uradite ručno, ali neki tekst editori i IDEs imaju funkcije da to urade automatski. Postoje problemi kada Pajton kod postaje neupotrebljiv kada je postavljen na forumu ili veb stranicu koja uklanja beli prostor, mada se ovaj problem može izbeći, gde je moguće da se priloži kod u belom prostoru-konzerviranje oznake kao što su "<pre> ... </pre>" (za HTML), "[kod]" ... "[/kod]" (za bbcode), itd.

if сати < 24 и минути < 60 и секунде < 60:
    return тачно
else:
    return нетачно

Primetite da Pajton ne koristi vitičaste, ali redovno dvotačke (npr. иначе:).

Mnogi Pajton programeri imaju tendenciju da prate zajednički dogovoren stil poznat kao PEP8.[1]Postoje alati dizajnirani za automatizaciju PEP8 poštovanja.

Haskel uredi

Haskel slično ima pravilo koje omogućava udubljenje definisanih blokova. Međutim, za razliku od Pajtona, Haskel jednostavno koristi beline na ovaj način kao oblik sintaksnih šećera-eksplicitne zagrade i zarez  se mogu (i povremene su) koristi umesto toga.

Vertikalno poravnanje uredi

Često je korisno da se usklade slični elementi vertikalno, da tipo-generisani  bagovi budu više očigledni. Uporedi:

$претраживање = низ('a', 'b', 'c', 'd', 'e');
$замена = низ('foo', 'bar', 'baz', 'quux');

// Други пример:

$вредност = 0;
$другавредност = 1;
$јошједанавредност = 2;

sa:

$претраживање = низ('a', 'b', 'c', 'd', 'e');
$замена = низ('foo', 'bar', 'baz', 'quux');

// Други пример:

$вредност = 0;
$другавредност = 1;
$јошједанавредност = 2;

Ovaj drugi primer čini dve stvari intuitivno jasno a nisu bili jasni u bivšoj:

  • potraga i zamena termina su povezane i poklapaju se: one nisu diskretne promenljive;
  • postoji još jedan termin za pretragu nego postoje uslovi za zamenu. Ako je ovo greška, sada je veća verovatnoća da će se primetiti.

Međutim, imajte na umu da postoje argumenti protiv vertikalnog poravnanja:

  • Inter linija lažnih zavisnosti; tabelarno formatiranje stvara zavisnost preko linija. Na primer, ako identifikator sa dugogodišnjim imenom se doda tabelarnom rasporedu, širina kolona će možda morati da se poveća da ga primi. Ovo primorava veću promenu u izvornom kodu nego što je potrebno, a suštinska promena može biti izgubljena u buci. Ovo je štetno za kontrolnu reviziju gde inspekcija razlike između verzija je od suštinskog značaja.
  • Krtosti; ako programer neuredno formatira tabelu prilikom promene, možda legitimno sa prethodne tačke u vidu, rezultat postaje haos koji se pogoršava sa daljim takvim promenama.Jednostavno refaktorisanje operacija, kao što su pretraga i zamena, mogu da slome formatiranje.
  • Otpornost na modifikaciji; tabelarno formatiranje zahteva više napora da se održi. Ovo može odložiti programera da napravi povoljne promene, kao što je dodavanje, ispravljanje i poboljšanje ime identifikatora, jer će upropastiti formatiranje.
  • Oslanjanje na jednprostorni font; tabelarno formatiranje pretpostavlja da je urednik koristio fiksne širine. Mnogi savremeni urednici kodova podržavaju proporcionalne fontove, a programer možda više voli da koristi proporcionalni font za čitljivost.
  • Alat zavisnost; neki od napora održavanja ravnoteže mogu se ublažiti alatima (npr editor izvornog koda koji podržava elastične tabstopove), iako to stvara zavisnost od takvih alata.

Na primer, ako se operacija jednostavnog refaktorisanja  vrši na kodu iznad, preimenovanje varijabli "$ zamena" u "$ r" i "$ drugavrednost" u "$ a", dobijeni kod će izgledati ovako:

$претраживање = низ('a', 'b', 'c', 'd', 'e');
$r = низ('foo', 'bar', 'baz', 'quux');

// Други пример:

$вредност = 0;
$a = 1;
$јошједанавредност = 2;

Sekvencijalno formatiranje originala će i dalje izgledati dobro posle takve promene:

$претраживање = низ('a', 'b', 'c', 'd', 'e');
$r = низ('foo', 'bar', 'baz', 'quux');

// Други пример:
 
$вредност = 0;
$a = 1;
$јошједанавредност = 2;

Prostori uredi

U onim situacijama kada je potrebno malo belog prostora  gramatika većine jezika slobodnog formata je neupućena u iznosu koji se pojavljuje. Stil se odnosi na beli prostor i najčešće koristi za poboljšanje čitljivosti. Trenutno ne postoje poznate čvrste činjenice (Zaključci iz studije) da stilovi belog prostora imaju najbolju čitljivost.

Na primer, uporedite sledeće sintaksičke ekvivalent primere C koda:

int i;
for(i=0;i<10;++i){
    printf("%d",i*i+i);
}

naspram

int i;
for (i=0; i<10; ++i) {
    printf("%d", i*i+i);
}

naspram

int i;
for (i = 0; i < 10; ++i) {
    printf("%d", i * i + i);
}

Tab uredi

Korišćenje tab kartice da stvori prazan prostor predstavlja konkretna pitanja, kada se uzme nije dovoljno briga jer  lokacija tabelarnog prikazivanja tačke može biti različita u zavisnosti od alata koji se koristi, pa čak i preferencije korisnika.

Kao primer, jedan programer preferira tab razmak  četiri puta i  njegov set alata je podesio na ovaj način, i koristi to da oblikujete svoju šifru.

int ix; // Индекс за скенирање низа
long sum; // Акумулатор за суму

Drugi programer preferira tab  osam puta, a njegov set alata je podešen na ovaj način. Kada ispituje svoju šifru, može biti teško za čitanje.

int ix; // Индекс за скенирање низа
long sum; // Акумулатор за суму

Jedno široko korišćeno rešenje za ovaj problem može da uključi zabranu korišćenja kartica za usklađivanje ili pravila o tome kako mora biti postavljen tab. Imajte na umu da tab radi u redu, pod uslovom da se dosledno koristi, ograničeno na logičana uvlačenja, a ne koristi za poravnanje: 

class MyClass {
	int foobar(int qux, // први параметар
	 int quux); // други параметар
	int foobar2(int qux, // први параметар
	 int quux, // други параметар
	 int quuux); // трећи параметар
};

Vidi još uredi

Reference uredi

Spoljašnje veze uredi