Skoči na vsebino

Forum ne deluje več - obiščite nas na racunalniske-novice.com




Slika

Koristni nasveti pri izdelovanju programov


Odgovorov v temi: 27

#1 publikum

publikum

    Velemojster

  • Members
  • 5 974 objav
  • Kraj:Deep in code...
  • Interesi:Linux, PHP, C++, C#, .NET, ...

Objavljeno 12 september 2005 - 20:09

Tukaj naj bodo zbrani koristni nasveti pri izdelovanju programov, pisanju kode v vseh programskih jezikih...

Da ne bom samo govoril...:

1. Pišite kodo s presledki, uporabljajte tabulatorje
Ena največjih napak pri učenju programskega jezika je stavek v knjigah, ki drži za večino programskih jezikov: Vseeno je ali pred x (nek del jezika) zapišete presledek ali ne. To sicer drži kot pribito, vendar pa s tem koda postane zelo neberljiva, sploh če je treba "prebrati" veliko kode...

Drug problem pa je še bolj opazen in dodatno prispeva k lepoti / grdoti kode - uporaba tabulatorjev. V kolikor tabulatorjev ne uporabljamo sicer pri kodi, ki šteje le par vrstic ni težav, v kolikor pa pišemo zahtevnejšo kodo s par sto ali celo par tisoč vrsticami, pa nam tabulatorji omogočajo lep pregled nad deli kode...

Ne počnite tega:

int main()

{

char *var="lalala";

cout<<"To je spremenljivka var:"<<var<<endl;

if(var=="lalala")

{

cout<<"Vrednost spremenljivke je lalala!"<<endl;

}

else

{

cout<<"Vrednost spremenljivke ni lalala!"<<endl;

}

cout<<"Kmalu bo konec programa..."<<"n";

return 0;

}

Takšna kode je všeč meni (vsak ima svoj stil pisanja):

int main()

{

	char *var = "lalala";

	cout << "To je spremenljivka var:" <<var << endl;

	if(var == "lalala")

	{

		cout << "Vrednost spremenljivke je lalala!" << endl;

	}

	else

	{

		cout << "Vrednost spremenljivke ni lalala!" << endl;

	}

	cout << "Kmalu bo konec programa..." <<"n";

	return 0;

}


#2 lynx

lynx

    Iznajdljivec

  • Members
  • 896 objav

Objavljeno 14 september 2005 - 15:31

Glede 1. Indentacija je zelo pomembna!
Uporabljajte presledke, ne tabulatorjev. Vsak program, sistem, uporabnik ima drugačno predstavo o tem kaj je en tab. Zato si izberite število presledkov, ki jih potem konsistentno uporabljajte namesto tabulatorjev. Boljši urejevalniki vam bodo sami naredili to pretvorbo, če jim seveda ukažete.
Dokler je projekt samo vaš, ni problema, pri skupinskem delu je pa tak pristop nujen. Spodnji ukaz spremeni vse začetne tabulatorje v 4 presledke.
find -iname "*.cpp" -or -iname "*.h" | while read file; do sed -i 's,^( *)t,1	,g' $file; done

2. Komentirajte svojo kodo. Zgodi se, da čez nekaj časa še sami ne boste vedeli zakaj nekaj delate tu in tako, kaj šele kdo drug, ki stvar bere.

3. Če hočete čimbolj prenosljivo/kompatibilno kodo:
- ne uporabljajte presledkov v imenih datotek
- vsaka datoteka naj se konča s prazno vrstico

#3 miharix

miharix

    Poročevalec

  • Members
  • 736 objav

Objavljeno 16 januar 2006 - 14:33

2.2 ne varčujte z komentarji če je funcija kompleksna se raje razpišite , da boste vedno hitro vedeli zakaj gre

4. imena spremenljivk naj bodo taka, da je jasen namen spremenljivke
npr.: namesto
char* x=new char[30];
uporabi
char* ulica=new char[30];

5. Globalne spremenljivke pišite z veliko (vsaj začetnico) lokalne pa z malo

6. v podprogramih se izogibajte enakega poimenovanja spremenljivk kot so v glavnem programu
npr: namesto
void izpis (int dan){...}



 int main(...){

	 int dan

	 izpis(dan)}
uporabi
void izpis (int dne){...}



 int main(...){

	 int dan

	 izpis(dan)}

7. pred kodo vstavite komentar, kaj nasplošno koda počne, avtor ter datum

#4 hell666

hell666

    Igračar

  • Members
  • 132 objav

Objavljeno 05 november 2006 - 13:05

int main()
{
char *var="lalala";
cout<<"To je spremenljivka var:"<<var<<endl;
if(var=="lalala")
{
cout<<"Vrednost spremenljivke je lalala!"<<endl;
}
else
{
cout<<"Vrednost spremenljivke ni lalala!"<<endl;
}
cout<<"Kmalu bo konec programa..."<<"n";
return 0;
}

wtf napako najde?
cout << "To je spremenljivka var:" <<var << endl;
aja pa btw, če že tako kodo pišeš nared vsaj tkole:
na konc dodej //pa napiš kaj naredi :x

#5 direcx

direcx

    Raziskovalec

  • Members
  • 37 objav
  • Kraj:Laško

Objavljeno 25 november 2007 - 17:16

Pri večjih projektih vedno združujte določena območja kode ali določene funkcije (spodaj jezik C#):

void funkcija()
{

#region Moj_algoritem_1
// koda...
#endregion

#region Moj_algoritem_2
// koda...
#endregion

}

#6 lynx

lynx

    Iznajdljivec

  • Members
  • 896 objav

Objavljeno 03 december 2007 - 10:48

Kaj pa tole naredi?
Agnostična rešitev je, da uporabiš več (pod)funkcij.

#7 MihaSkipster

MihaSkipster

    Govorec

  • Members
  • 2 087 objav
  • Kraj:SGC
  • Interesi:Splet, programiranje, vse kaj ma zveze z kompjuteri :D

Objavljeno 13 december 2007 - 19:12

Uporabljajte presledke... Ne tabulatorjev? Bi lahko še večjo glupost izjavo?

Vsak sistem ma svojo predstavo o tabulatorjih. Tu je lepota. Nekateri imajo tab nastavljen na 6 spacov, nekateri na 4. In če uporabljaš tabe, ne siliš druge da uporabljajo tvoj stil ( npr. če imaš stil 4 presledke oni pa 6 ipd. )... Tab je samo en klik, space jih je več.. Pa še bi lahko našteval vzroke zakaj uporabljati tab ne spacov...

#8 lynx

lynx

    Iznajdljivec

  • Members
  • 896 objav

Objavljeno 13 december 2007 - 19:28

No pa jih daj?

To kolikokrat moraš klikniti za indentacijo je odvisno od urejevalnika - pri naprednejših se da lepo nastavit da tabulator dela skupine presledkov.

Pri stilu ti dam delno prav, se pa pojavi problem, ker ljudje ne znajo konsistentno uporabljat tabulatorjev in se v kodo prikradejo tudi presledki (primer recimo jagged alliance 2). In potem ne fali samo stil, ampak tudi obdelava z regularnimi izrazi.

#9 gapi_pro

gapi_pro

    Govorec

  • Members
  • 2 191 objav
  • Spol:Moški
  • Kraj:Dream place

Objavljeno 13 december 2007 - 20:01

lynx, ravno v tem je čar regularnih izrazov, da jih napišeš tako da upoštevajo vse tako kot morajo. :D

#10 lynx

lynx

    Iznajdljivec

  • Members
  • 896 objav

Objavljeno 13 december 2007 - 21:45

A iščeš izziv? :D RE poznam precej dobro in si upam trditi da mešanosti ne moreš tako odpravit, ker je lahko število presledkov na tabulator različno, celo v isti datoteki.

#11 gapi_pro

gapi_pro

    Govorec

  • Members
  • 2 191 objav
  • Spol:Moški
  • Kraj:Dream place

Objavljeno 14 december 2007 - 15:19

lynx, ja saj iščeš tabolatorje namesto presledkov oz oboje. :D

#12 lynx

lynx

    Iznajdljivec

  • Members
  • 896 objav

Objavljeno 16 december 2007 - 21:27

huh? Razloži, tole ni imelo dosti smisla.

#13 gapi_pro

gapi_pro

    Govorec

  • Members
  • 2 191 objav
  • Spol:Moški
  • Kraj:Dream place

Objavljeno 16 december 2007 - 22:07

lynx, uporabiš IF(?) v RE ane. :)

#14 lynx

lynx

    Iznajdljivec

  • Members
  • 896 objav

Objavljeno 16 december 2007 - 22:35

ne zastopiš. Preberi še enklrat in poglej tale hipotetičen primer (presledek je @, tab je %):

void main(){
@@int bla=0;
%bla=bla+2;
@@@bla-=3;
%@printf("%d",bla);
}

#15 gapi_pro

gapi_pro

    Govorec

  • Members
  • 2 191 objav
  • Spol:Moški
  • Kraj:Dream place

Objavljeno 17 december 2007 - 06:18

aaaaa notri v kodi to, ok tole je grdo narejeno. :)

#16 valhala

valhala

    Raziskovalec

  • Members
  • 36 objav
  • Kraj:DOMA
  • Interesi:vse

Objavljeno 08 januar 2008 - 23:11

Tukajle je en koristen nasvet. Da se izognete napakam pri primerjanju vrednosti v C/C++ (Java/C# imata razmeroam dovolj "pameten" prevajalnik kar se tiče tega primer). Namesto:
int a = 10;
if ( a = 10 ) ... (recimo da bi vseeeno radi if ( a == 10 ) )
lahko napišete:
int a = 10;
if ( 10 == a ) ... lahko ste prepričani, da vas bo prevajalnik "grdo nadrl" ;)

#17 valhala

valhala

    Raziskovalec

  • Members
  • 36 objav
  • Kraj:DOMA
  • Interesi:vse

Objavljeno 01 februar 2008 - 01:15

Kako zamenjati dve CELI števili brez uporabe začasne spremenljivke:
Kot "macro" v C/C++ (stvar deluje v večini drugih jezikov):

#define swap(x, y) x^=(y^=(x^=y))

Nikar ne uporabljajte tega za t.i. floating/fixed point števila, ker bi utegnili rezultati biti "presenetljivi" :mrgreen:

#18 firestorm

firestorm

    nOObie

  • Members
  • 4 objav

Objavljeno 12 avgust 2008 - 21:34

Komentiraj vsako funkcijo. Ponavadi počnem takole:
/*

 * Input: vhodne spremenljivke, če so

 * Output: izhod, kaj funkcija vrne, če kaj

 * Description: Podroben opis kaj funkcija počne

 */

QTcpSocket socket::getTcpSocket()

{

// koda

}
Sam primer. Tako ko čez kak mesec ali dva greš gledat kodo veš o čem se sploh gre v tej funkciji.

#19 xfirestorm

xfirestorm

    /dev/null

  • Moderators
  • 3 783 objav
  • Spol:Moški
  • Kraj:Murska Sobota
  • Interesi:Airsoft

Objavljeno 19 november 2009 - 16:14

Pri večjih projektih vedno združujte določena območja kode ali določene funkcije (spodaj jezik C#):

void funkcija()
{

#region Moj_algoritem_1
// koda...
#endregion

#region Moj_algoritem_2
// koda...
#endregion

}


Totalen nesmisel.
Več funkcij, če pa že moraš več stvari tiščat v eno in isto funkcijo, pa je dovolj da vsak sklop kode v tej funkciji posebaj komentiraš, ali pa na vrhu funkcije komentiraš vse kar počneš in v sami funkciji z kratkim komentarjem ločiš te dele programa.
Tole kar pa ti pišeš je pa dobro samo zaradi tega:

#pragma region lets you specify a block of code that you can expand or collapse when using the outlining feature of the Visual Studio Code Editor.



Drgač pa kar še morda ni bilo omenjeno tukaj. Čeprav mamo dandanes že take količine RAMa v računalih kot včasih nismo imeli niti diskov....brišite kazalce.
Ko ga več ne rabiš...BRIŠI
V class default destructor, pobriši vse preostale kazalce.
Sicer se spremenljivka, torej kazalec ki kaže na lokacijo v pomnilniku po destrukciji razreda ali po končanju funkcije pobriše, vrednost na katero pa kazalec kaže v pomnilniku pa ostane tam kjer je in če gre za večjo aplikacijo program hitro namesto 50MB pomnilnika hitro potrebuje 100MB ali več.


Še nekaj dodatnih nasvetov. :)
Uporabljajte "predznake" za spremenljivke. Za kazalce: p_imeSpremenljivke
Za člane/memberje razreda: m_imeSpremenljivke
Pri spremenljivkah ki "živijo" samo v funkciji, ni potrebno uporabljati "predznaka" pri imenu.

Pri mrežnem programiranju, čim manj uporabljat mrežo oz. prenos po mreži, sporočila čez mrežo čim bolj skrajšat, tako lahko recimo:
LISTEN ADDRESS
postane
LSTNADDR
Ko potuje paket čez mrežo. In še zakaj:
Mreža lahko hitro postane ozki del prehoda ali "chocking point" in tako drastično zniža performanse programa, kar pa verjetno nočemo. :Yahoo:

#20 Aleš

Aleš

    nOObie

  • Members
  • 14 objav

Objavljeno 23 november 2009 - 22:41

C# in VB.NET imata že implementirano funkcionalnost za komentiranje funkcij in metod. Pri C#-u, pred samo metodo napišemo tri poševnice ///, pri VB.NET pa tri enojne narekovaje, program pa nam sam pripravi XML strukturo za opis naše metode. Sami le še zapolnimo vsebino posameznih tagov.

Primer:
[codebox]/// <summary>
/// This method creates new Circle object by given radius and starting point
/// </summary>
/// <param name="radij">radius</param>
/// <param name="izhodisce">start point</param>
/// <returns>circle object</returns>
private static Circle MojaFunkcija(int radij, Coordinate izhodisce)
{
return new Circle();
}[/codebox]


Na tak način opisane metode, prikažejo opis svoje funkcionalnosti in parametrov že v InteliSensu, prav tako pa nam omogočajo, da na podlagi tega zgeneriramo HTML ali katero drugo obliko dokumentacije naše kode. Več: http://msdn.microsof...y/b2s063f7.aspx



Dodaj odgovor



  


0 član(ov) bere to temo

0 članov, 0 gostov, 0 anonimnih uporabnikov