[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [MISC] Programmering, kode-stil, indent, flere return



In <sslug@sslug> Hans Schou <sslug@sslug> writes:

>Må man have flere "return/exit" i en funktion? Må man udføre den sammme
>operation to eller flere gange i samme funktion? Hvor mange indent må
>der være i en funktion? Må en funktion være 2 skærmsider lang?

Det er vel i stort omfang et spørgsmål om at skrive kode, der er let
at læse - og forstå. Specielt hvad indentering angår er der jo flere
forskellige religioner - og derfor kan mange editorer jo også automatisk
re-formattere kildekode til den indentering man nu kan lide.

Min erfaring er, at det især er i forbindelse med fejlhåndtering, at
der bliver problemer. Det er jo også det, dit eksempel viser. Ved sådan 
noget fejl-håndtering kan selv den forkætrede "goto" jo være den pæneste 
løsning. F.eks. kunne dit eksempel jo også være skrevet:

	int ex3(void)
	{
		char *p1 = NULL, *p2 = NULL, *p3 = NULL;
		int n = 0;

		/* Alloker alle de buffere vi skal bruge */
		p1 = malloc(256); if (!p1) goto cleanup;
		p2 = malloc(256); if (!p2) goto cleanup;
		p3 = malloc(256); if (!p3) goto cleanup;

		/* Generer data */
		fill_with_data_1(p1);
		fill_with_data_2(p2);
		fill_with_data_3(p3);
		n = mixit(p1,p2,p3);

	cleanup:
		/* Ryd op */
		if (p1) free(p1);
		if (p2) free(p2);
		if (p3) free(p3);

		return n;
	}

hvilket efter min smag er lettere at læse.

Det vigtige for mig er at det er let at se hvad denne funktion nu
gør. Og i den forbindelse er fejl-håndterings kode "støj". Så
kode i stil med dit eksempel 2 bliver meget let ulæseligt, hvis 
funktionen begynder at brede sig over mere end een skærmside - 
man mister simpelt hen overblikket over hvorfor man nu er indenteret
ud i 8. niveau.

Flere "return's" i een funktion - det er noget man skal være
forsigtig med, ligesom "goto" fordi det bryder det normale flow
i funktionen. Og hvis man finder ud af funktionen egentlig skal
returnere med noget andet end man først troede, så kan det være
svært at huske at få ændret alle return kaldene.

Ja, en funktion må godt fylde mere end en skærmside - det er en
helt arbitrær grænse. Hvilken skærmopløsning, f.eks. ? Hvorfor
ikke "mere end een side print" ? På A0 papir, altså ... Det kommer
igen tilbage til at skrive kode, der er til at forstå - og det
betyder bl.a. at man skal kunne overskue funktionen. F.eks. bruger
jeg ofte tilstands-maskiner i mine funktioner, og det er sjældent
et problem når blot hvert "case" element er til at overskue.

Blot mine 0.02 <whatever>

Mvh,
Henrik



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2006-03-01, 02:04 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *