Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse

Hver gang jeg hører noen skjelle ut goto som styggedommen selv så vet jeg at vedkommende ikke er særlig kyndig i programmering. Mange er ikke klar over at goto er implementert på samme måte som if, while og switch på assembly-nivå, og er glimrende til å bryte raskt ut av løkker, implementere tilstandsmaskiner, AI-logikk, spill osv. De som har tuklet med mikrokontrollere vet at det er mye ytelse å spare ved å mestre goto. Så det kan du hilse læreren og si, og hvis han/hun ikke gir seg kan du alltids slenge med en liten hilsen:

goto hell;
Lenke til kommentar
Gjest Slettet+9871234

De fleste som mener at goto er dårlig programmerings stil mener vel misbruk av goto om du graver litt i det de egentlig mener.

 

For eksempel fint med Goto på (slutten av et program) som samler opp feil.

 

Når jeg hører at andre omtales som idioter, spesielt når de ikke kan forsvare seg, er det grunn til å spisse ørene.

Endret av Slettet+9871234
Lenke til kommentar

Fordi det å kategorisk avvise goto som konstruksjon impliserer at han er det.

 

Ok, så alle har hørt om Dijkstra og goto considered harmful og så videre. Og veldig mange som leser det i dag tenker det gjelder goto i C/C++. Vel, det gjør det ikke, det er snakk om 70s basic, hvis all control flow var goto.

 

I moderne C/C++ har man -nesten- aldri bruk for goto, C++ mer enn i C. Allikevel er det noen få ganger det er nyttig. Et eksempel i C er når man skal emulere exceptions og drive opprydning ved feil. I både C og C++ er det typisk når man har komplekse nøstede løkker. Ta eksempelet til pølselompe her - hele problemet hadde blitt trivielt løst og uten å sjonglere tilstand ved bruk av goto, som hele problemet hans ender opp med å reduseres til uansett - han bruker bare andre navn på det.

 

I C++ er det stort sett et tegn på at du strukturerer feil uansett, fordi det finnes mer elegante måter å gjøre ting på, men i C har du stadig vekk ikke noe valg. Point is, denne fyren skyver nå (antagelig) Dijkstras rant foran seg og kategorisk avviser en språklig konstruksjon som -hadde løst problemet- enkelt og elegant bare fordi han ikke egentlig forsto hva Dijkstra sa. Det gjør han til en idiot.

 

Og det beste er at goto i C/C++ på langt nær er det samme som goto i Basic. I Basics er typisk gotos globale, det vil si man kan hoppe til en vilkårlig linje i kildekoden. Det er ikke tilfellet i C - den er funksjonslokal, og funksjoner bør være små uansett.

  • Liker 1
Lenke til kommentar

For å illustrere, la oss se på problemet at hand.

 

while( true ) {
  ..
  if( a ) break;
  ..
}
 
while( true ) {
  ..
  ..
  while( true ) {
    ..
    if( !b ) break;
  }
  while( true ) {
    ..
    ..
    a = false;
    if( b ) break;
  }

  while( !b ) {
    ..
    ..
    if( a ) break;
  }
}
break er en goto.

 

--

 

that being said er flyten i det som forslås håpløst dårlig, og jeg håper det ikke er sånn det ender opp med å bli seende ut.

Lenke til kommentar

Fordi det å kategorisk avvise goto som konstruksjon impliserer at han er det.

Jeg synes det blir for sterkt å kalle noen for idiot bare fordi de kommer med en lite veloverveid påstand.

 

Ok, så alle har hørt om Dijkstra og goto considered harmful og så videre. Og veldig mange som leser det i dag tenker det gjelder goto i C/C++. Vel, det gjør det ikke, det er snakk om 70s basic, hvis all control flow var goto.

 

---8< --- 8< ---

Jeg er helt enig i det du sier om goto - og det er noen situasjoner der den trengs. Selv om jeg ikke har hatt bruk for goto selv i de årene jeg har jobbet som programmerer.

 

Som oftest holder det å bruke break og continue. Jeg har sett en god del bruk av goto i C som er unødvendig, og som forteller meg at programmereren ikke har tenkt igjennom sakene før koding.

Lenke til kommentar
Gjest Slettet+9871234

Som oftest holder det å bruke break og continue. Jeg har sett en god del bruk av goto i C som er unødvendig, og som forteller meg at programmereren ikke har tenkt igjennom sakene før koding.

 

Det var derfor jeg skrev dette:

 

 

Læreren din er en idiot.

 

Eller du er lat?

 

Lenke til kommentar
  • 3 uker senere...

Ser ut så dette blir rett tråd og poste denne typen spørsmål i.

 

Jeg har holdt på en del med litt lett programmering/koding, mest hjemmesider med særdeles enkle funksjoner. Ønsker nå å starte et prosjekt med litt tyngre egenskaper. Vurderer å lære C/C++ og evt. Python da jeg såvidt har vært borti det før. Skulle gjerne hatt noen tips om hvilket språk som er best å ta utgangspunkt i. Jeg er lettlært så ber om at vanskelighetsgraden ikke blir en bestemmende faktor. Trenger å kunne det som gir meg et mest mulig universalt verktøy til å kreere mest mulig. Kom gjerne med forslag til språk som fordelaktig gir meg mest valgmuligheter.

 

Noen tips til gode bøker jeg kan anskaffe i tillegg er et stort pluss.

 

Til slutt er jeg også interessert i en eller annen kontaktperson som kan være behjelpelig om det skulle dukke opp noe spørsmål om evt. løsningsforslag på diverse greier. Eller bare til generell konsultasjon.

 

Setter stor pris på tilbakemelding, gjerne her eller på PM (sånn for ordens skyld). Før det blir påpekt regner jeg med det er andre tråder jeg kunne lett fram for å finne denne informasjonen, har dog ikke funnet disse. Så du for ha meg unnskyldt hvis det er tilfelle.

Endret av justsomething
Lenke til kommentar

Tror det hadde blitt mer krig i programmeringsbaren.

 

Konsultasjon kan du ta i tråder her.

 

Om du vil lære deg å programmere anbefaler jeg Haskell. Hvilket språk det er er i prinsippet ikke så nøye (når du faktisk begynner å bli bra er det rimelig greit å gå fra det ene til det andre), men enkelte språk har betydelig dårligere design enn andre.

 

inb4 flamefest, men jeg anbefaler deg å styre langt unna javascript, php, java og basic.

Endret av Lycantrophe
  • Liker 1
Lenke til kommentar

[...] Trenger å kunne det som gir meg et mest mulig universalt verktøy til å kreere mest mulig. [...]

 

Hvis du skal lære programmering, og i tillegg lære et språk som er universalt og som gjør at du kan lage mest mulig vil jeg absolutt anbefale C++14

 

Selv om Lycantrophe er helt uenig så er også JavaScript et universalt språk som er lett å forstå hvis du går inn for det. Det skinner best for web, men du kan også lage applikasjoner (sjekk ut Brackets.io som er en editor skrevet i javascript) og hva enn du måtte ønske.

 

Python er også et språk som er lett å lære og som fasiliterer mange forskjellige typer utvikling.

 

Skal du lære deg programmering utover hobby bør du absolutt plukke opp språk i forskjellige paradigms (strukturert, objektorientert, funksjonelt, logisk, deklarativt etc).

 

Hvis du f.eks gjør et webprosjekt med C#, F#, HTML, CSS og JavaScript så er du innom mye bra på et prosjekt.

Lenke til kommentar

Blir svarene de samme om jeg nevner at java & javascript, html/css, jQuery og PHP er språk jeg er middels-okay på ? ( Etter snille standarder vell og merke.) jeg kjenner at c++ og phyton appelerer mest da disse er mye anbefalt.

 

Har forresten hørt at c++ er handikappet på Apple iOS ? Eller er det bare vås, som jeg egentlig har antatt at det er.. ?

Lenke til kommentar

void write(char letters[], int point, const int LENGTH)
      for (int i = 0; i<LENGTH-point; i++)
            //Og her skjer det litt omstokking av elementene i letters.
            void write(letters, point+1, LENGTH)
       end
end

Jeg kaller denne funksjonen fra main en gang, og "letters" er ønskelig ei array på 1-8 bokstaver. Pga. grensene på forløkka endrer seg, så er totalt antall operasjoner på arrayen ~x! hvor x er antall bokstaver.

 

Men jeg får stack overflow midtveis i programmet når letters inneholder mer enn 5 chars. Jeg forstår ikke helt hvorfor. I min enkle verden skulle ikke C++ så mye å jobbe med av gangen her...

 

Noen som skjønner seg på dette?

Endret av Ljóseind
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...