Archief - Break en/of return in een loop?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Gurdt

Legacy Member
Ik heb ook de gewoonte die curly braces altijd te plaatsen (mijn IDE doet dat eigenlijk voor mij). Ik heb al vaak mensen zien kloten omdat ze nog rap een lijntje willen toevoegen aan een if, en dan merken dat er iets schort.

Cycloon

Legacy Member
Wat ik meestal doe in zo'n situatie is:

if () { code }

Alles op 1 regel plaatsen, maar toch al curly braces voorzien voor de persoon die het ooit zou willen aanpassen.

SDEC

Legacy Member
Cycloon zei:
Wat ik meestal doe in zo'n situatie is:

if () { code }

Alles op 1 regel plaatsen, maar toch al curly braces voorzien voor de persoon die het ooit zou willen aanpassen.

Oei nee, dat is pas slordig imo. Hangt van persoon tot persoon af maar ik vindt dat curly braces altijd onder elkaar moeten staan.

Code:
if() {

}
of
Code:
if()
{

}

Maar wie ben ik om dat te zeggen ;)

profound

Legacy Member
Code:
if() {

}

Zo doe ik het ook het liefst. Ik krijg het schijt van if-lussen op 1 regel!

sparks

Legacy Member
Parnakra zei:

Ik dacht dat YAGNI meer over features ging, lijkt me dan niet echt van toepassing op curly braces om de leesbaarheid te verbeteren.

Kan wel mis zijn natuurlijk.

Parnakra

Legacy Member
YAGNI is een acroniem voor een zinsnede die hier ook van toepassing is: je code in het heden volstouwen met onnodige karakters omdat het eventueel, misschien, toevallig ergens in de toekomst wel handig kan zijn.

Cycloon

Legacy Member
Parnakra zei:
YAGNI is een acroniem voor een zinsnede die hier ook van toepassing is: je code in het heden volstouwen met onnodige karakters omdat het eventueel, misschien, toevallig ergens in de toekomst wel handig kan zijn.

Het omgekeerde uiterste is natuurlijk ook slecht. Je code zo schrijven dat het nét voldoet aan je eigen eisen maar totaal niet meer uitbreidbaar is op latere basis. Een gezond evenwicht zoeken is wat altijd correct is.

N`Kr1pt

Legacy Member
stel je maar eens voor dat je een grote collection moet itereren en telkens een bepaalde conditie evalueren, als de conditie niet evalueert wil je 'fail early', en break je uit de loop.
het zou nogal belachelijk zijn om verder door x aantal interaties te lopen omdat een break zogenaamd "bad practice" is...

meerdere returns kan ook nuttig zijn, en code leesbarder maken, dus zwart op wit zeggen dat dit niet mag is wederom belachelijk.

weten veel van die zogenaamde docenten zelf wel waar ze me bezig zijn, stel ik me de vraag?
het gezegde 'those who can, do; those who can't, teach' comes to mind

Gurdt

Legacy Member
Ik denk ook dat docenten dit als bad practice bestempelen omdat het wellicht vaker "minder duidelijk" dan "bruikbaar" is. En als ge dan een klets eerste- of tweedejaars hebt, wilt ge die in feite zulke regeltjes al instampen. Die weten ook wel dat ze later daar toch gebruik van gaan maken, anders vermeldden ze die syntax niet.

Maar studenten die nog niet zo vlot zijn in het programmeren laten dat best voorlopig links liggen.

Cycloon

Legacy Member
N`Kr1pt zei:
het zou nogal belachelijk zijn om verder door x aantal interaties te lopen omdat een break zogenaamd "bad practice" is...

Je hebt geen break nodig om vroegtijdig je lus te verlaten hoor...

Cycloon

Legacy Member
N`Kr1pt zei:
tenzij je een foreach gebruikt, vriendschap

Een foreach gebruik je dan ook pas wanneer je zeker bent dat je gewoon alle items in je collection wil itereren. Anders gebruiken je gewoon een iterator in een while lus.

En natuurlijk vriendschap hoor :hug: (:unsure:)

Krueger

Legacy Member
Cycloon zei:
Een foreach gebruik je dan ook pas wanneer je zeker bent dat je gewoon alle items in je collection wil itereren. Anders gebruiken je gewoon een iterator in een while lus.

En natuurlijk vriendschap hoor :hug: (:unsure:)

Erm, en waarom dat dan wel? Ik zie niet in wat er mis is met een break of return in een foreach. Ik verkies bijna altijd een foreach omdat je elementen dan niet constant met een indexer moet aanspreken, en omdat het korter typt.

Cycloon

Legacy Member
Krueger zei:
Erm, en waarom dat dan wel? Ik zie niet in wat er mis is met een break of return in een foreach. Ik verkies bijna altijd een foreach omdat je elementen dan niet constant met een indexer moet aanspreken, en omdat het korter typt.

Met een iterator heb je ook geen indexer nodig hoor. En waarom? Omdat het een "stijlafspraak" is. Net zoals we allemaal hebben afgesproken om rechts van de baan te rijden en andere landen links.

Krueger

Legacy Member
Cycloon zei:
Met een iterator heb je ook geen indexer nodig hoor. En waarom? Omdat het een "stijlafspraak" is. Net zoals we allemaal hebben afgesproken om rechts van de baan te rijden en andere landen links.
Net zoals we ook allemaal hebben afgesproken om geen breaks te zetten in lussen en goto's te gebruiken? Da's wel een redelijk non-argument in deze discussie.

En kan je eens een code vb. geven van wat je bedoelt met uw iterator in een while lus, ik ben niet mee denk ik.

Cycloon

Legacy Member
Krueger zei:
En kan je eens een code vb. geven van wat je bedoelt met uw iterator in een while lus, ik ben niet mee denk ik.

Stukje java:

Code:
Iterator iter = list.iterator();
//Iterator<MyType> iter = list.iterator();    in J2SE 5.0
while (iter.hasNext()) {
    System.out.println(iter.next());
}

Krueger zei:
Net zoals we ook allemaal hebben afgesproken om geen breaks te zetten in lussen en goto's te gebruiken? Da's wel een redelijk non-argument in deze discussie.

Het punt dat ik net wou maken is dat het geen "waarheid" is. Eerder een afspraak die je naleeft omdat veel programmeurs aanvaard hebben dat dit vlotter werkt.

Krueger

Legacy Member
Vind je echt
Code:
            bool ok = true;
            var iter = list.GetEnumerator();
            while (iter.MoveNext() && ok)
            {
                var i = iter.Current;
                if (i == 1)
                    ok = false;
            }

duidelijk is en vlotter werkt dan

Code:
            foreach (var i in list)
            {
                if (i == 1)
                    break;
            }

Dat kan je toch echt niet menen? Ik denk dat ze me hier zot zouden verklaren moest ik met dat eerste afkomen.


Cycloon zei:
Stukje java:

Code:
Iterator iter = list.iterator();
//Iterator<MyType> iter = list.iterator();    in J2SE 5.0
while (iter.hasNext()) {
    System.out.println(iter.next());
}



Het punt dat ik net wou maken is dat het geen "waarheid" is. Eerder een afspraak die je naleeft omdat veel programmeurs aanvaard hebben dat dit vlotter werkt.

Cycloon

Legacy Member
Krueger zei:
Vind je echt duidelijk is en vlotter werkt dan

Nee, je code is ook een slecht voorbeeld. Het toont niet aan wat er gebeurt.

Een goed voorbeeld zou zijn:

Code:
            bool bedragIsPositief = false;
            var iter = list.GetEnumerator();
            while (iter.MoveNext() && 'bedragIsPositief)
            {
                var i = iter.Current;
                bedragIsPositief = i >= 0
            }

Een slecht voorbeeld is dan:

Code:
            foreach (var i in list)
            {
                if (i<0)
                    break;
            }

Welke code zegt er het meest wat er gebeurt? Het heeft ook geen zin om bepaalde stijlregels te volgen als je andere aan je laars lapt (zijnde, variabelen, een goede naam geven).

De tijd van zo weinig mogelijk lijnen code te typen ligt al meer dan 10 jaar achter ons hoor.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan