30. januar 2003 - 21:46Der er
17 kommentarer og 1 løsning
problem med if sæting
Jeg laver denne if sætning,
if ((point.x,point.y)==(400,400)) { // todo }
men den skriver aligevel todo sætningerne selv om kun den ene parameter er sand. Hvordan kan jeg lave denne så den kigger om både point.x og point.y er sand og hvis det er tilfældet så laver todo
Spøg til side.... det er detaljer, men jeg synes det er skidt at bruge unødvendige parenteser. Dels fordi det bestemt ikke bliver mere overskueligt af det og dels fordi det indebærer et performance problem. Well.... i hvertfald i meget store programmer ;)
1) ekstra parenteser i kilde-teksten betyder intet for runtime performance
2) der er mnage som mener det er pænt altid at sætte parenteser, så udtrykkets evaluering er entyding for læseren uden at han/hun kender operator precedens
ja det er lige præcis det, men den er ikke så variabel. jeg ville gerne kunne erstatte 400 med en variable senere hen. alla m_pointx = 400 if point.x<=m_pointx osv.
Well, som arne siger så er der ikke tale om runtime performance problemer, men snarere compile tiden som sættes i vejret. Men som sagt det er detaljer :)
Ang. pkt. 2: Jeg har svært ved at forholde mig til hvad mange gerne vil have. Jeg kan ikke forstå man har problemer med operator præcedens hvis man kan over skue sætninger som denne: if((((x==1))&&((y==43)))||((z==34)))
men det må være folks eget valg. Min holdning er at
if((x == 1 && y == 43)||(z==34))
til en hver tid er lettere at forstå, uanset hvad man kender til matematik.
tja.... 1. Med mindre jeg tager meget fejl er c/c++ & java de mest udbredte programmeringssprog, og ofte dem man starter med når man lærer programmering. Omvendt kan man vel antage at de sprog som ikke giver == højere præcedens (må indrømme jeg ikke ved hvilke) ikke er for nybegynderen, og de derfor udøves af de mere øvede programmører, som derfor godt kan overskue udtryk som i min løsning.
Min pointe er at nybegynderen har nemmere ved at forstå følgende udtryk (blå er en farve og rød er en farve) end de har ved det 2. udtryk ((blå er en farve) og (rød er en farve)). Men nok om det, det bliver vi nok ikke enige om, og det er vel i sidste ende en smagssag ;)
2. Mit eksempel med alle de overflødige parenteser var mere for at demonstrere at man ikke skal bruge overflødige tegn bare fordi man synes det ser godt ud (er pænt). Overdrivelse fremmer (nogle gange) forståelsen.
Det mest udbredte første sprog i et par årtier (Pascal) har faktisk "AND" med højere precendes end "=".
Og når nu du nævner Java, så vil jeg dat lige citere fra SUN's "Java Code Conventions":
#10.5 Miscellaneous Practices #10.5.1 Parentheses #It is generally a good idea to use parentheses liberally in expressions involving mixed operators #to avoid operator precedence problems. Even if the operator precedence seems clear to you, it #might not be to others—you shouldn’t assume that other programmers know precedence as #well as you do. #if (a == b && c == d) // AVOID! #if ((a == b) && (c == d)) // USE
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.