Programavimo stilius

Iš GTA-Online Wikipedia.
Peršokti į: navigaciją, paiešką
Autorius: Blantas
2012-05-24

Turinys

Apie stilių

Programavimo stilius - tai programos sudedamųjų dalių tam tikras išdėstymas. Dažniausiai stilius neturi poveikio pačios programos veikimui, neskaitant atvejų, kai programos kodas išdėstomas klaidingai bei gali sugriauti programos struktūrą. Programavimo stilių apibrėžia dviejų rūšių taisyklės: formalios ir neformalios.

Kam jis reikalingas?

Programavimo stilių galima priskirti plačiai temai, kadangi egzistuoja daugybė išdėstymo taisyklių, kuriomis galima vadovautis arba ne. Kiekvienas programuotojas turi savo, asmeninį stilių, pagal kurį programos struktūra autoriui tampa aiški bei lengvai perprantama. Bandant programą bei radus joje spragą, tvarkingame kodo dokumente klaidą pastebėti žymiai lengviau.

Taip pat stiliaus taisyklių reikia laikytis tuomet, kai programos kodą rašo daugiau nei vienas žmogus. Programuojant komandoje, svarbu rašyti tokį kodą, kurį suprastų jūsų kolega. Kitu atveju, jūsų kolega sunkiau supras programos struktūrą bei pagal sakinių išdėstymą klaidingoje programoje negalės nuspėti autoriaus tikrojo sumanymo, jos pataisyti.

Apibendrinant šią temos skiltį, įmanoma apibrėžti keletą stiliaus funkcijų:

  • Aiškesnis programos struktūros išdėstymas.
  • Galimas mažesnis programavimo klaidų kiekis ardantis programos struktūrą.

Struktūros elementai

Programos struktūra susideda iš tam tikrų elementų. Visas kodas susideda iš tam tikrų sakinių. Sakiniai, kurie valdomi vienu metu bei sudaro tam tikrą grupe, vadinami sudėtiniais sakiniais.

Elementų išdėstymas

Struktūros elementams išdėstyti egzistuoja įvairių taisyklių. Turbūt viena iš svarbiausių taisyklių nusako, kaip lygiuoti įvairių lygmenų sakinius. Ši taisyklė apibrėžia, jog kiekvienas lygmuo turi būti tam tikru atstumu nuo kito. Dažniausiai tas atstumas atitinka TAB klavišo suteikiamą tarpą.

Žemiau esantys struktūros pavyzdys vaizduoja tokį lygiavimą:

Sakinys
Sakinys     /* PIRMOJO lygmens sakinys */
Sakinys
    Sakinys     /* ANTROJO lygmens sakinys */
        Sakinys
        Sakinys     /* TREČIOJO lygmens sakinys */
        Sakinys
    Sakinys     /* ANTROJO lygmens sakinys */
Sakinys
Sakinys     /* PIRMOJO lygmens sakinys */

Kaip matote, kiekvienas lygmuo atitrauktas skirtingai nuo paraštės. Pirmasis lygmuo atitrauktas per 0 TAB paspaudimų, antrasis per 1, o trečiasis per 2. Taigi šis lygiavimas apibrėžiamas taip:

  • Pereinant iš mažesnio lygmens į didesnį, sakinys patraukiamas į priekį tam tikru atstumu.
  • Pereinant iš didesnio lygmens į mažesnį, sakinys atitraukiamas į tokią pačią poziciją, kaip ir prieš didesnįjį.

Sakinių lygmuo dažniausiai keičiamas po tam tikrų sąlyginių ar ciklų sakinių prasidėjimo, pabaigos. Egzistuoja ir tokių atvejų, kai pradedant minėtąjį sakinį nebūtina patraukti į priekį. Jeigu sekančiame lygmenyje egzistuoja tik vienas sakinys, t.y. jis nėra sudėtinis, tuomet jo patraukti neprivalome. Štai pavyzdys parodantis tai vizualiai:

A_Sakinys     /* PIRMOJO lygmens sakinys */
A_Sakinys B_Sakinys     /* ANTROJO lygmens sakinys */
A_Sakinys
A_Sakinys     /* PIRMOJO lygmens sakinys */

O taip atrodytų, jei antrojo lygmens sakinį rašytume atitraukę:

A_Sakinys     /* PIRMOJO lygmens sakinys */
A_Sakinys
    B_Sakinys     /* ANTROJO lygmens sakinys */
A_Sakinys
A_Sakinys     /* PIRMOJO lygmens sakinys */

Sudėtiniai sakiniai

Sudėtinius sakiniai kiekvienoje programavimo kalboje atskiriami tam tikrais simboliais arba žodžiais tam, jog programa suprastų kurioje vietoje jie prasideda bei baigiasi. PAWN kalboje tokie sakiniai žymimi { bei } skliausteliais. { atidaro sudėtinį sakinį, o } jį užbaigia. Sudėtiniame sakinyje elementai automatiškai įgija sekantį lygmenį, todėl privalo būti atitraukti į priekį tam tikru atstumu.

Pavyzdys:

{
	Sakinys     
	Sakinys
	Sakinys
	Sakinys
}

Sudėtinis sakinys sudėtiniame sakinyje:

{
	A_Sakinys     
	A_Sakinys
	A_Sakinys
	{
		B_Sakinys
		B_Sakinys
	}
}
{
	A_Sakinys     
	{
		B_Sakinys
		{
			C_Sakinys
		}
	}
}

Elementų apipavidalinimas

Kai kurios taisyklės, nusako ir kaip tinkamai apibrėžti įvairius elementus. Dažniausiai jos nurodo, šiuos kriterijus:

  • Kintamųjų pavadinimai turi būti prasmingi.
  • Sudėtingų algoritmai turi būti aprašyti komentarais.

Autoriaus komentaras:

Aš asmeniškai, vengiu tokių dalykų, jei žinau, jog mano kodas yra asmeninis, kurį matysiu tik aš pats.

Dažniausios stiliaus klaidos

Turbūt viena iš dažniausiai sutinkamų stiliaus klaidų yra netinkamas lygiavimas. Gana dažnai tenka susidurti su panašių struktūrų kodais:

Pradinis_Sakinys
{
A_Sakinys     
{
B_Sakinys
{
C_Sakinys
}
}
}

Kaip matote, sunku įžvelgti kodo prasme, todėl šis kodas yra sunkiai skaitomas.

Dar viena iš dažnų klaidų yra - sudėtinių sakinių vaizdavimas, kaip paprasto sakinio. Pavyzdys:

Pradinis_Sakinys { A_Sakinys B_Sakinys C_Sakinys }

Nors šis kodas turėtų atrodyti taip:

Pradinis_Sakinys
{
	A_Sakinys
	B_Sakinys
	C_Sakinys
}

Neformalūs stiliai

Visame šiame straipsnyje, stengiausi apibrėžti formaliąsias stiliaus taisykles, tačiau be jų galima naudoti ir tam tikras neformaliąsias. Šios taisyklės, tinkamai panaudotos, nekenkia pačio kodo veikimui bei nėra prilyginamos stiliaus klaidoms.

Turbūt viena iš tokių taisyklių yra tam tikrų kodo dalių atskyrimas komentarais. Šis veiksmas gali padėti greičiau orientuotis kode, kadangi jo struktūra tampa lyg ir padalinta į atskiras dalis. Atskyrimas dažniausia naudojamas didelės apimties programose, kai naudojantis slinkties juosta, slenkant per kodą, sunku rasti norimą vietą tarp greitai besikeičiančios dokumento vietos. Žemiau matote pavyzdį panaudojus PAWN kalbos komentarus:

/* TAM TIKRAS SEGMENTAS */
 
Sakinys
...
Sakinys
 
/* SEKANTIS SEGMENTAS */
 
Sakinys
...
Sakinys
 
/* PABAIGA */

Dar viena plačiai naudojama struktūros savybė yra tam tikras sudėtinių sakinių naudojimas. Dažnai įmanoma sutikti sudėtinių sakinių su tokia struktūra:

/* „kitoks“ sudėtinių sakinių išskyrimas */
 
A_Sakinys {
B_Sakinys
B_Sakinys
}
 
A_Sakinys {
B_Sakinys
B_Sakinys}
 
A_Sakinys {
	B_Sakinys
	B_Sakinys
}
/* įprastas išskyrimas */
 
A_Sakinys
{
	B_Sakinys
	B_Sakinys
}

Šiame pavyzdyje vaizduojami tik keletas būdų kaip įmanoma skirti sudėtinius sakinius.

Kita struktūros stiliaus ypatybė yra tam tikrų elemento dalių tam tikras lygiavimas. Kai kurie, programuotojai savo programų struktūrose lygiuoja elementus pagal tam tikrus kriterijus. Dažnai tie kriterijai priklauso nuo funkcijų parametrų ar kintamųjų. Štai keletas pavyzdžių:

/* „kitoks“ stilius */
 
new
	kintamasis;	
new
	kintamasis
;
new masyvas [ 12 ] ;
new
	masyvas [ 12 ]
;
/* įprastas stilius */
 
new kintamasis;
new masyvas[12];

Kaip minėjau, lygiuojamos ir tam tikros sakinių dalys:

/* „kitoks“ stilius */
 
A_Funkcija( "Vardas"       );
B_Funkcija( "Pavardė" 	   );
C_Funkcija( "Namų adresas" );
/* įprastas stilius */
 
A_Funkcija("Vardas");
B_Funkcija("Pavardė");
C_Funkcija("Namų adresas");

Apibendrinimas

Visa kas aprašyta šioje temoje, kai kuriems programuotojams gali būti nepriimtina, kadangi kiekvienas turi savąjį programavimo stilių. Taip pat minėtųjų taisyklių neprivaloma laikytis. Dažnai jų nesilaikymas nepaveikia pačios programos veikimo, išskyrus PAWN atveju, kai bandant kompiliuoti programą, dėl netinkamo lygmenų lygiavimo, kompiliatorius įspėja vartotoją.

Kadangi pats neesu kompiuterinės etikos specialistas, taigi neteigiu, jog mano minėta informacija atitinka visus standartus. Tiesiog visa tai ką aprašiau, įtakojo įvairūs bei dažniausiai sutikti programavimo stiliaus atvejai, klaidos.

Asmeniniai įrankiai
San Andreas Multiplayer