Sida 1 av 2

Next vs }

Postat: 9 december 2020, 10:30:06
av bjornj
Bara en undring från en lätt frustrerad Arduinonybörjare.
Vilket är lättast att hantera:
Wend, next i, End if respektive } } }
Desutom tillkommer ett antal ; på osäkra platser
i fall två.

Re: Next vs }

Postat: 9 december 2020, 10:56:44
av Klas-Kenny
:humm:

Detta kan nog vara en utav de mest förvirrande frågeställningar jag sett.

Vad tusan menar du egentligen? :)

Re: Next vs }

Postat: 9 december 2020, 11:07:55
av pfyra
Olika språk har olika tokens för scope. Många har { } medans visual basic (om jag minns rätt) har Wend, next <variabel>, End if osv för att markera slutet på loopar och if-bodyn.

Semikolon på osäkra platser förstår jag inte riktigt däremot..

Smidigheten med { } överväger lätt nackdelen med att man inte vet exakt vad det är som avslutas när det blir några stycken i rad. Editorn brukar kunna hjälpa till att peka ut vilka parenteser som hänger ihop.

Re: Next vs }

Postat: 9 december 2020, 14:35:05
av bjornj
Det var väl egentligen ingen fråga utan snarare ett sätt att avreagera sig på ett lite skämsamt sätt men
dock med ett stänk av allvar.
Medan tex basic har olika avslutningar på sina satser som end if, next eller wend (end while)
så kör C genomgående med } vilket gör koden både svårläst och svårskriven.
Svårt att se vilken { som hör till vilken }. Man får sitta och räkna dem.
Vad beträffar semikolon så är ju koden nerlusad med dem. Men
inte alltid. Svårt för nybörjaren att se konsekvensen.
Void har jag inte nämnt tidigare men det är ju ytterliggare en egendomlighet
som man undrar vad den skall vara bra för.
Basic tex klarar sig utmärkt utan vare sig void eller semikolon.
Man får intrycket att utvecklarna av C har lagt över mycket på programerarna
för att underlätta sitt eget arbete.
Släktskapet med det hemska Unix är tydlig.

Re: Next vs }

Postat: 9 december 2020, 15:15:52
av ie
Indenterar man koden på lämpligt sätt så behöver man inte räkna hakar. De som står på samma nivå hör ihop.

Semikolonen indikerar satsslut, så det är ju ganska uppenbart var de ska finnas.

Kod: Markera allt

	if (p->data[1])							// Display coordinates given?
	{
		uint8_t r = 0x80;
		switch (p->data[1])
		{
			case 2:
				r += 0x40;
				break;
			case 3:
				r += 0x14;
				break;
			case 4:
				r += 0x54;
				break;
		}
		r += (p->data[2]) - 1;
		hd44780_outbyte(r,0);
	}
	else
	{
		switch (p->data[2])				// Command?
		{
			case 1:					// Clear
				hd44780_outbyte(0x01,0);
				break;
		}
	}

Re: Next vs }

Postat: 9 december 2020, 15:54:20
av bjornj
Ok, jag skall försöka genomföra indenteringen på ett mera konsekvent sätt
så kanske de klarnar.
Hittade just nu förresten ett semikolon efter en IF sats som har
stoppat mig ett bra tag.

Re: Next vs }

Postat: 9 december 2020, 16:24:40
av carpelux
Om du skaffar en vettig editor så får du hjälp med paranteser och indenteringar samt en hel del annat.

Jag rekommenderar Visual Studio Code, gratis och finns för allatre stora plattformarna.

https://code.visualstudio.com/

Re: Next vs }

Postat: 9 december 2020, 16:35:46
av Palle500
Du kan ju predefinera i en H fil så får du en bättre överblick

#define IIF {
#define ENDIF }
#define CASE {
#define ENDCASE }
#define WHILE {
#define ENDWHILE }
#define FOR {
#define ENDFOR }
#define EQ ==
#define OR ||
#define NOT !
#define AND &&

Re: Next vs }

Postat: 9 december 2020, 16:42:47
av JimmyAndersson
Björnj:
”Släktskapet med det hemska Unix är tydlig.”

Hemska Unix?? Hur vågar du... :shock:
Unix är ju bland det trevligaste som finns. I klass med assembler och pepparkakor! :)

Re: Next vs }

Postat: 9 december 2020, 17:02:40
av bjornj
Pepparkakor är ju gott. Speciellt så här års.

Vad sägs om det här

} // End if

} // End While

osv.
Enkelt och obyråkratiskt

Re: Next vs }

Postat: 9 december 2020, 17:04:31
av Icecap
Om man ska göra program som har någon komplexitet alls är BASIC nog det siste språk att ta till.

Indenteringen av { och } är A&O i C(++).

Det finns olika sätt att hålla formateringen på, jag användar Whitesmith vilket är relativt ovanligt. För mig gör det dock överblicket bättre.

Re: Next vs }

Postat: 9 december 2020, 17:14:42
av AndLi
Palle500 skrev: 9 december 2020, 16:35:46 Du kan ju predefinera i en H fil så får du en bättre överblick

#define IIF {
#define ENDIF }
#define CASE {
#define ENDCASE }
#define WHILE {
#define ENDWHILE }
#define FOR {
#define ENDFOR }
#define EQ ==
#define OR ||
#define NOT !
#define AND &&
Det där är ju ett extremt effektivt sätt att förvirra vilken rutinerad programmerare som helst när de ska försöka hjälpa en nybörjare....
Och sannolikt även förvirra de flesta editorer också som försöker hjälpa en..

Re: Next vs }

Postat: 9 december 2020, 17:18:35
av _R_
Om du kör Arduino IDE så trycker du bara ctrl-T så fixar den indenteringen i hela programmet (förutsatt att inga syntaxfel finns).
Jag är också färsk på Arduino, så jag förstår vad du menar med VOID. Men fick nyligen en aha-upplevelse när jag insåg att en funktion inte bara är en "subrutin", de kan anta värden (tex bool, int etc) och värdet passas då tillbaka med "return". Mycket användbart.

Re: Next vs }

Postat: 9 december 2020, 17:23:36
av bit96
bjornj skrev: 9 december 2020, 14:35:05 Man får intrycket att utvecklarna av C har lagt över mycket på programerarna
för att underlätta sitt eget arbete.
Ja? Allt arbete ligger på programmerarna. Det är de som skall lösa uppgiften med hjälp av programmering, inte tillverkaren av programmeringsspråket. :)

C ligger väldigt nära assembler. Om man har programmerat i något assemblerspråk tidigare så förstår man direkt hur hur C fungerar.
Loopar, villkor, shift/rull, pekare med basregister, bitmaskning m.m., allt har sina exakta motsvarigheter i assembler.

Vilket gör C så kraftfullt, men samtidigt är risken att "göra fel" större då du måste veta vad du gör, kompilatorn/språket erbjuder få hängslen/livrem/begränsningar.
bjornj skrev: 9 december 2020, 17:02:40 Vad sägs om det här

} // End if

} // End While

osv.
Enkelt och obyråkratiskt
Mycket bra.
Själv skriver jag typ
} /* endif koll*/
} /* next xpos */
} /* wend pollareg */
då jag programmerar i C och inte C++ :) och jag lägger gärna till variabeln det handlar om.

Next vs }

Postat: 9 december 2020, 17:37:32
av Palle500
AndLi skrev:
Palle500 skrev: 9 december 2020, 16:35:46 Du kan ju predefinera i en H fil så får du en bättre överblick

#define IIF {
#define ENDIF }
#define CASE {
#define ENDCASE }
#define WHILE {
#define ENDWHILE }
#define FOR {
#define ENDFOR }
#define EQ ==
#define OR ||
#define NOT !
#define AND &&
Det där är ju ett extremt effektivt sätt att förvirra vilken rutinerad programmerare som helst när de ska försöka hjälpa en nybörjare....
Och sannolikt även förvirra de flesta editorer också som försöker hjälpa en..
Den lösningen är från 1990 när jag gick från Pascal till C och då var det utmärkt för mig. Och då körde jag med en texteditor som inte stödde olika programspråk. Sen vet jag inte om man måste skriva kod som kan läsas av vemsom? Det är ju inte det som är problemet idag utan idag handlar det mest om att få till de olika miljöerna och syntaxfiler som skapar projekten. Detta är klart svårare för en nybörjare att förstå.
Men nu frågade ju TS efter ett sätt att få översiktligare kod inte portabel kod.