Jeg har altid troet at nedestående eksempel skulle give et j på 20, eftersom indmaden (if sætningen) i for-lykken kun vil tælle med hvis det evaluere til sand. Og den så vil eksekvere j++ som en del af for-lykken. Men nu har jeg pludselig noget kode hvor det ikke er sådan (hvor det isteden give et j på 1). Hvad er nu det? Er det mig der husker forkert?
For løkken (uden {}) udfører KUN linien umiddelbart efter. Hvis dette er en if-sætning er det altså denne der udføres og ikke mere. Selvom if-sætningen er falsk er linien udført og løkken fortsætter til næste iteration. j++ bliver derfor kun udført een gang, nemlig når løkken er helt færdig...
En for løkke kører kun de statements som står i selve for-definitionen og frem til første ';'. Undtaget er - ja som du gætter - ';' som står inden i en eller flere turborg-klammer.
Den konstruktion du husker har nok set sådan her ud:
for (i = 0; i < 20; i++, if (1 == 2) j = -1, j++ )
Jeg har ikke noget mod {}, men jeg kigger lige nu i noget rigtigt slam-kode, som udviser en gennemført afsky for overflødige {} og andet der kan hjælpe koden blive mere letlæselig. Og så er der altså denne for-lykke som jeg stadig er lidt i tvivl om?
"En for løkke kører kun de statements som står i selve for-definitionen og frem til første ';'." Jamen det er netop sagen. Første ';' er det efter 'j++' eftersom det efter 'j = -1' ikke nåes.
expression1 bruges til loop terminerning. expression2 tæller variable op, og kan bestå af flere ved at komma separerer dem (gris som han siger). Hvis der ikke anvendes {}, bindes den følgende expression (3) til for loop'en, hvilket svarer til en tildeling, if, while osv...
for (i = 0; i < 20; i++(expression2)) if (1 == 2) (expression3) j = -1; (expression x, tilhører if) j++; (expression4, og kommer ikke med i for)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.