mboost-dp1

Larry Ewing
- Forside
- ⟨
- Forum
- ⟨
- Nyheder
Ja, men jeg skrev design time, altså som i at du ved ikke om koden bliver kørt eller ej mens du programmerer, det handler 100% om hvordan koden bliver kompileret.
Jeg bryder mig ikke rigtig om compiler flags (#IF DEBUG osv.) i kode. Det er for ukontrolleret, og bliver alt for tit misbrugt som en form for kommentering.
IF 0 .... ENDIF er noget jeg ofte ser i C kode, istedet for at kommentere størrere kodeblocks ud. (Jeg har en mistanke om at udviklerne ikke har benyttet et IDE med kommenterings-funktionalitet i de sager).
PARANOIA_CHECK er også en underlig navngivning, specielt når formålet bare er at vise eller ikke vise warnings. Burde man ikke skrive et log tool, og altid sende warnings, hvor det så er op til userspace om de vises eller ej?
Jeg bryder mig ikke rigtig om compiler flags (#IF DEBUG osv.) i kode. Det er for ukontrolleret, og bliver alt for tit misbrugt som en form for kommentering.
IF 0 .... ENDIF er noget jeg ofte ser i C kode, istedet for at kommentere størrere kodeblocks ud. (Jeg har en mistanke om at udviklerne ikke har benyttet et IDE med kommenterings-funktionalitet i de sager).
PARANOIA_CHECK er også en underlig navngivning, specielt når formålet bare er at vise eller ikke vise warnings. Burde man ikke skrive et log tool, og altid sende warnings, hvor det så er op til userspace om de vises eller ej?
Det bliver næsten en nødvendighed, da jeg ser den slags koncepter som bliver brugt i f.eks. C koden til Linux kernel, som være dybt sprogafhængigt.arne_v (50) skrev:Jeg er ikke i tvivl om at fremtidens styre systemer vil have en meget lille kerne i C og en masse højniveau uden om.
Jeg har allerede luftet nogle meninger om hvad jeg synes det er underligt, så hvis det var mig som lærte C til perfektion nu, og så skrev noget kode dertil, ville det jo være af et helt andet paradigm.
windcape (51) skrev:IF 0 .... ENDIF er noget jeg ofte ser i C kode, istedet for at kommentere størrere kodeblocks ud. (Jeg har en mistanke om at udviklerne ikke har benyttet et IDE med kommenterings-funktionalitet i de sager).
Hvad skulle IDE'en gøre?
windcape (51) skrev:PARANOIA_CHECK er også en underlig navngivning, specielt når formålet bare er at vise eller ikke vise warnings. Burde man ikke skrive et log tool, og altid sende warnings, hvor det så er op til userspace om de vises eller ej?
Der kan meget vel være skrappe restriktioner på hvad Linux kernel kode kan gøre.
#55
Du er godt klar over at
#IF 0
...
#ENDIF
har samme effekt som (den pænere)
/*
....
*/
, ikke?
Koden i mellem de to bliver fjernet af preprocessoren, så det ikke er en del af runtime.
Hvorfor er den sidste bedre end den første? Personligt synes jeg den sidste er pænere, men smag er et dårligt argument.
Hvad er der så forkert ved #IF 0... #ENDIF?
Du er godt klar over at
#IF 0
...
#ENDIF
har samme effekt som (den pænere)
/*
....
*/
, ikke?
Koden i mellem de to bliver fjernet af preprocessoren, så det ikke er en del af runtime.
Hvorfor er den sidste bedre end den første? Personligt synes jeg den sidste er pænere, men smag er et dårligt argument.
Hvad er der så forkert ved #IF 0... #ENDIF?
m_abs (56) skrev:Hvad er der så forkert ved #IF 0... #ENDIF?
Ideen er faktisk meget god, specielt i sprog, hvor der ikke er flere liniers kommentarer som f.eks. i VB.
Den eneste ulempe, jeg kan komme på er at editorer normalt ikke highlighter det, og det kan mindske læseligheden lidt.
windcape (55) skrev:Hvis man kommentere kode ud med IF false, istedet for // , så er der jo noget galt et eller andet sted.
Er der noget galt i at kende syntaxen i det sprog man bruger?
// er ikke valid C89 (det er valid C99 men på trods af at det er 10 år siden, så er man generelt ikke skiftet til C99).
Og // naturligvis både valid og meget brugt i C++.
arne_v (59) skrev:#56
#if 0 #endif har en meget stor fordel over /* */ til fjernelse af store blokke.
De kan nestes.
/* */ breaker hvis der er en /* */ kommentar i det man vil fjerne.
God pointe. Det har jeg aldrig tænkt over.
Måske er de ikke så tossede aligevel de opensource udviklere.
#65:
Dijkstra er en af de få personer, der er lige så kloge og intelligente, som de er arrogante. Jeg vil nødige undvære Go To og Label, men i de fleste tilfælde, jeg har set dem brugt er der en bedre måde at løse det på. Jeg synes tit at de indikerer et kodemæssigt hov.
Edit: Jeg har aldrig brugt Go To og Label, da jeg aldrig her mødt et sted hvor jeg ikke synes at en løkke eller rekursion er den rigtige måde at gøre det på. Men nu har jeg også kun brugt funktions- og objektorienterede sprog. Udover på studiet (Har self. brugt det da jeg skrev assembler og alu-kode.).
Dijkstra er en af de få personer, der er lige så kloge og intelligente, som de er arrogante. Jeg vil nødige undvære Go To og Label, men i de fleste tilfælde, jeg har set dem brugt er der en bedre måde at løse det på. Jeg synes tit at de indikerer et kodemæssigt hov.
Edit: Jeg har aldrig brugt Go To og Label, da jeg aldrig her mødt et sted hvor jeg ikke synes at en løkke eller rekursion er den rigtige måde at gøre det på. Men nu har jeg også kun brugt funktions- og objektorienterede sprog. Udover på studiet (Har self. brugt det da jeg skrev assembler og alu-kode.).
Når man bruger goto kommer man hurdigt ud i en siuation, hvor man bruger nogle "return" goto's hvis label er en variabel af højere scope. Og så bliver man lige pluselig rigtig snu og ændre lablen under vejs og til føjer nogle andre goto's i nogle if statements og så ligner det lige pluselig noget asembler og er meget svært at de debugge på.
goto er ok man skal bare holde tungen lige i munden. og så giver det mulighed for at lave komplet sindsygt struktureret kode, som er helt uforståelig efter en våd weekend.
Nogel gange savner jeg goto i java, synes ikke rigtigt jeg kan opnå det med break to, men der er somregl en mere object orienteret løsning, der nok også er bedere. Bare man også kunne breake ind istedet for kun ud, men det er vel det der ligger i break ;) ellers ville det jo faktisk være goto.
Kan tildels godt forstå det ikke er med i Java, da det faktisk tvinger en til at strukturere tingene bedere i form af metoder og objecter, hvilket nok givere færre fejl, eller i hvert fald fejl der er nemmere at fange for kompileren.
goto er ok man skal bare holde tungen lige i munden. og så giver det mulighed for at lave komplet sindsygt struktureret kode, som er helt uforståelig efter en våd weekend.
Nogel gange savner jeg goto i java, synes ikke rigtigt jeg kan opnå det med break to, men der er somregl en mere object orienteret løsning, der nok også er bedere. Bare man også kunne breake ind istedet for kun ud, men det er vel det der ligger i break ;) ellers ville det jo faktisk være goto.
Kan tildels godt forstå det ikke er med i Java, da det faktisk tvinger en til at strukturere tingene bedere i form af metoder og objecter, hvilket nok givere færre fejl, eller i hvert fald fejl der er nemmere at fange for kompileren.
arne_v (65) skrev:Men jeg mener at et sprog bør have goto for de tilfælde hvor det er praktisk.
Er det helt forkert at påstå at goto er overflødig, hvis man kan lave funktioner der tager argumenter og retunere noget ?
Det kan være man i nogle(nok mange) tilfælde kan lave mere efektiv kode med goto, men det kommer vel an på kompileren.
Jeg tror der menes i stil med:JensOle (69) skrev:Er det helt forkert at påstå at goto er overflødig, hvis man kan lave funktioner der tager argumenter og retunere noget ?
Det kan være man i nogle(nok mange) tilfælde kan lave mere efektiv kode med goto, men det kommer vel an på kompileren.
for(i=variableStart;i<100;i++)
{
if(i < 50) { goto i=70 }
}
Altså tillade et spring i koden. det er nok mere relevant i noget andet end et array af numre. Men det er med samme formål at PHP implementerede det.
Altså langt fra i samme stil som BASIC goto statements! Faktisk ikke engang tiltænkt som samme funktionalitet.
dog har jeg ikke haft brug for GOTO i C++/Java/C#/PHP/andre i alt den tid jeg har kodet.
windcape (70) skrev:Visual Studio gør ikke.
Dens fejl.
windcape (70) skrev:Men jeg synes stadig at det er dårlig syntaks. Preprocessor statements bør ikke benyttes som syntaks.
Preprocessoren er bl.a. opfundet til at inkludere kode og ekskludere kode efter behov.
Den form for brug er ret fundamental i C.
windcape (70) skrev:Og man bør vel heller ikke neste kommentering!
Man kan ikke neste kommenteringer i C.
Det er derfor man ikke kan bruge /* */ til at udkommentere en stor kode blok med. Fordi sandsynligvis er der en kommentar et sted i den.
arne_v (73) skrev:windcape (71) skrev:
for(i=variableStart;i<100;i++)
{
if(i < 50) { goto i=70 }
}
Hvilket sprog tillader den syntax og hvad gør den?
Det skulle vel give det samme som :
for(i=variableStart;i<100;i++)
{
if(i < 50) { /*goto*/ i=70; continue; }
}
men sproget er jeg heller ikke med på.
Hjorten (6) skrev:<offtopic>Har du en rackserver hjemme privat? Nu ved jeg ikke hvad du laver, men det lyder godt nok lidt vildt.</offtopic>
Jeg render også offtopic her, og sorry for that - men vi lige svare.
Blev tilbudt en ældre rackserver til en god pris, og så kunne jeg sgu ikke sige nej ;) Sådan en købte min kammerat og jeg så sammen, bare for at have noget legetøj. Nu står den så dér.........
gnarfsan (66) skrev:Dijkstra er en af de få personer, der er lige så kloge og intelligente, som de er arrogante.
Jeg må nok give dig ret.
Der er en en som lige har postet en stribe Dijkstra citater til comp.lang.java.programmer.
Udsnit:
If you want more effective programmers, you will discover that they should not waste their time debugging, they should not introduce the bugs to start with.
In the good old days physicists repeated each other’s experiments, just to be sure. Today they stick to FORTRAN, so that they can share each other's programs, bugs included.
It is not the task of the University to offer what society asks for, but to give what society needs.
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
The question of whether Machines Can Think… is about as relevant as the question of whether Submarines Can Swim.
#goto
Min pointe er at jeg f.eks. synes at:
er langt pænere end Java's labeled break:
fordi goto konstruktionen er meget intuitiv.
Og diverse workarounds for at undgå goto falder heller ikke i min smag:
har nogle grumsede tests.
et metode kald til en metode med to returns er ikke ligefrem læsevenligt.
Min pointe er at jeg f.eks. synes at:
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
if(a[i][j] == MAGICK) {
Something(i, j);
goto done;
}
}
}
done:
er langt pænere end Java's labeled break:
outer:
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
if(a[i][j] == MAGICK) {
something(i, j);
break outer;
}
}
}
fordi goto konstruktionen er meget intuitiv.
Og diverse workarounds for at undgå goto falder heller ikke i min smag:
boolean done;
done = false;
for(int i = 0; i < N && !done; i++) {
for(int j = 0; j < M && !done; j++) {
if(a[i][j] == MAGICK) {
something(i, j);
done = true;
}
}
}
har nogle grumsede tests.
helper(a);
...
public void helper(int[][] a) {
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
if(a[i][j] == MAGICK) {
something(i, j);
return;
}
}
}
return;
}
et metode kald til en metode med to returns er ikke ligefrem læsevenligt.
Men dog også lige et eksempel på at GOTO kan være slemt.
Da jeg ikke er god til Basic så bliver det Fortran:
Da jeg ikke er god til Basic så bliver det Fortran:
INTEGER LBL
INTEGER*4 I
731 GOTO 113
ASSIGN 399 TO LBL
113 I=0
WRITE(*,*) I
247 ASSIGN 601 TO LBL
IF(I) 588,922,399
588 I=I+1
WRITE(*,*) I
GOTO 399
761 GOTO LBL
922 I=I+1
WRITE(*,*) I
GOTO(588,399,922) I
399 GOTO 761
601 CONTINUE
END
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.