Kodestil i C++ Introduksjon. Navnekonvensjoner. Globale variabler. Simen Hagen 26.9.2003



Like dokumenter
Forelesning 9 mandag den 15. september

Emnekode: LV121A Dato: Alle skrevne og trykte hjelpemidler

Mesteparten av kodingen av Donkey Kong skal du gjøre selv. Underveis vil du lære hvordan du lager et enkelt plattform-spill i Scratch.

INF1000 Variable. Marit Nybakken 27. januar 2004

Matematikk Øvingsoppgaver i numerikk leksjon 7 Numerisk derivasjon

Programmering i C++ Administrativ info. Litteratur. Forelesning 1 Innføring i det grunnleggende. Forelesninger: Eksamen. Pensum:

Leksjon 3. Kontrollstrukturer

NyGIV Regning som grunnleggende ferdighet

Flagg Erfaren Scratch Lærerveiledning

er et er et heltall. For eksempel er 2, 3, 5, 7 og 11 primtall, mens 4 = 2 2, 6 = 2 3 og 15 = 3 5 er det ikke.

Legg merke til at at over de blå klossene er det flere kategorier av kommandoer i forskjellige farger, for eksempel

Forelesning 28: Kompleksitetsteori

Vekst av planteplankton - Skeletonema Costatum

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk. Kompleksitetsteori. Forelesning 29: Kompleksitetsteori. Dag Normann KAPITTEL 13: Kompleksitetsteori. 7.

Grafisk kryptografi (hemmelig koding av bilder)

Positiv og virkningsfull barneoppdragelse

UNIVERSITETET I OSLO

PRIMTALL FRA A TIL Å

MAT1030 Forelesning 30

IA-funksjonsvurdering Revidert februar En samtale om arbeidsmuligheter

Labyrint Introduksjon Scratch Lærerveiledning. Steg 1: Hvordan styre figurer med piltastene

Kapittel 1. Potensregning

STATISTIKK FRA A TIL Å

Gå til Drawing and Animation i Palette-menyen og legg til Canvas og Ball. OBS! Ball må slippes inni Canvas på skjermen for at den skal bli lagt til.

En god presentasjon består av tre deler som henger nøye sammen: Innhold, utforming og framføring.

ALGORITMER OG DATASTRUKTURER

Vedrørende rundskriv for vurdering av par ved assistert befruktning

Fasit og løsningsforslag til Julekalenderen for mellomtrinnet

Kreativ utvikling av engasjerte mennesker. Fylkesmessa 2009 Kristiansund

MAT1030 Diskret matematikk

Løsningsforslag til seminar 4 Undervisningsfri uke

Løsningsforslag til underveisvurdering i MAT111 vår 2005

Hemmelige koder. Kodeklubb-koden. Steg 1: Alfabetet. Sjekkliste. Introduksjon

SKOLEEKSAMEN I. SOS4010 Kvalitativ metode. 19. oktober timer

Nøkkelspørsmål til eller i etterkant av introduksjonsoppgaven:

Forelesning 22 MA0003, Mandag 5/ Invertible matriser Lay: 2.2

Evaluering av kollokviegrupper i matematikk og programmering høsten jenter har svart på evalueringen

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Lær å bruke CAS-verktøyet i GeoGebra 4.2

Grenseverdier og asymptoter. Eksemplifisert med 403, 404, 408, 409, 410, 411, 412, 414, 416, 417, 418, 419

Løsningsforslag for Obligatorisk Oppgave 1. Algoritmer og Datastrukturer ITF20006

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

Mer om likninger og ulikheter

MAT 1110 V-06: Løsningsforslag til Oblig 1

Under noen av oppgavene har jeg lagt inn et hint til hvordan dere kan går frem for å løse dem! Send meg en mail om dere finner noen feil!

Kapittel 4: Logikk (predikatlogikk)

Sigbjørn Hals. Nedenfor har vi tegnet noen grafer til likningen y = C, der C varierer fra -2 til 3, med en økning på 1.

Repeterbarhetskrav vs antall Trails

Utførelse av programmer, metoder og synlighet av variabler i JSP

Arbeidstid. Medlemsundersøkelse mai Oppdragsgiver: Utdanningsforbundet

På lederutviklingsprogrammene som ofte gjennomføres på NTNU benyttes dette verktøyet. Du kan bruke dette til inspirasjon.

Sircon People. Utvidelse til WordPress

ORIENTERING OM RETTEN TIL

1990 første prognoser og varsler om at det ikke vil være nok IPv4 adresser til alle som ønsker det 1994 første dokumenter som beskriver NAT en

PERSINLIGHETSPROFILEN SARE

Skjermbilder og veiledning knyttet til «Årlig innrapportering for vannforsyningssystem» basert på oppdaterte skjermbilder pr mars 2016.

Selvevaluering. MEVI 211 (Pressehistorie) Høsten 2013

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

Høringsnotat forslag til endringer i forskrift 18.desember 2003 nr om fosterhjem tilsyn med barn i fosterhjem, 4.oktober 2013.

Disclaimer / ansvarsfraskrivelse:

Matriser og Kvadratiske Former

Hefte med problemløsingsoppgaver. Ukas nøtt 2008/2009. Tallev Omtveit Nordre Modum ungdomsskole

lage og bruke funksjoner som tar argumenter lage og bruke funksjoner med returverdier forklare forskjellen mellom globale og lokale variabler

Hvordan møte kritikk?

NASJONALE PRØVER En presentasjon av resultatene til 5.trinn ved Jåtten skole, skoleåret

Repetisjon: høydepunkter fra første del av MA1301-tallteori.

Resonnerende oppgaver

Den krever at vi henter ned Maples plottekommandoer fra arkivet. Det gjør vi ved kommandoen

Medarbeidersamtale. Veiledningshefte. Medarbeidersamtale. Mars 2004 Avdeling for økonomi og personal

UNIVERSITETET I OSLO

Øvingsforelesning i Python (TDT4110)

Status for Solberg skole i dag:

La oss først se på problemet med objektorientert tankegang. Se figuren under. Konto

Matematikk Øvingsoppgaver i numerikk leksjon 3. Løsningsforslag

Fortsettelses kurs i Word

Forord. Molde, august Per Kristian Rekdal. Copyright c Høyskolen i Molde, 2011.

Læringsmiljø Hadeland. Felles skoleutviklingsprosjekt for Gran, Lunner og Jevnaker. Vurderingsbidrag

ARBEIDSHEFTE I MATEMATIKK

Regnskap fra produsentsiden. Jan Terje Kaaby

Positivt [ ] Negativt [ ] Ingen mening [ ] 6. Hvor mange tastevalg er akseptabelt å gjøre innen du blir koblet til en kundebehandler?

gullungen motvillig og sta!? blitt egenrådig, Råd og veiledning til foreldre som ønsker en bedre hverdag med barnet sitt.

TMA4140 Diskret matematikk Høst 2011 Løsningsforslag Øving 7

1 C z I G + + = + + 2) Multiplikasjon av et tall med en parentes foregår ved å multiplisere tallet med alle leddene i parentesen, slik at

Hypotesetesting. Notat til STK1110. Ørnulf Borgan Matematisk institutt Universitetet i Oslo. September 2007

Søknad om prosjektmidler fra ExtraStiftelsen Mal for prosjektbeskrivelse (Maksimum 10 sider inkl. referanseliste)

2016/09/16 22:19 1/6 Tegning av geologi

Tips og triks ved oppstart av

Preken 14. august s i treenighet Kapellan Elisabeth Lund. Tekst: Joh. 15, 13-17

Olweusprogrammet. Tema i klassemøtet. Klasseregel 4 Hvis vi vet at noen blir mobbet

Brukerveiledning for PedIT - Web

MAT1030 Plenumsregning 1

Løsningsforslag for eksamensoppgave, våren 2004

Praksiseksempel - Bruk av konstruert modelltekst i skriveopplæringen

Høring - finansiering av private barnehager

NOTAT. Dokumentasjon av tidsforbruk ved offentlige anskaffelser. Til: DIFI Fra: LFH v/hartvig Munthe-Kaas Dato:

Månedsevaluering fra Perlå januar 2011

Transkript:

Kodestil i C++ Simen Hagen 26.9.2003 Introduksjon I store programmeringsprosjekter er det viktig at koden har et konsistent utseende og at alle bruker en felles stil på koden. Alle som skriver kode har sin egen stil, og for å unngå at det blir en merkelig blanding av mange forskjellige stiler er det viktig å ha noen regler som alle utviklerene følger. Selv for mindre prosjekter er det mange fordeler ved å ha en programmeringsstil som er enkel å lese og lett og få oversikt med. Som ny til språket C++ er det ikke så lett å vite hva som er gode og hva som er dårlige vaner. For å hjelpe deg med å nne ut av det vil dette dokumentet presentere en standard. Om du ønsker å bruke den er selvsagt opp til deg, men å nne en standard som du liker, og så holde seg til den, er viktig. Eksprimenter med forskjellige metoder og nn en du liker selv. Tenk igjennom hvorfor du liker akkurat den metoden du har funnet. Lytt til hva andre sier, og hvorfor de liker sine standarder. Plukk det beste fra de stedene som er tilgjengelige. Navnekonvensjoner Det bør være selvforklarende hva alle variablene er. Velg navn som er lett å forstå. Det er mye bedre å bruke et langt navn som bestå av ere ord, enn å forkorte det for mye. En variable med navn 'dette_er_et_langt_navn' er bedre enn 'deeln'. Det første navnet er enkelt å forstå, men det andre gir ikke mening hvis du ikke på forhånd vet hva det skal bety. Globale variabler Alle globale variabler burde starte med '//'. Globale variabler er en vanlig kilde til feil, og bør unngås hvis mulig. Nå er det ikke alltid det er mulig å unngå det, eller at det av forskjellige grunner er mer praktisk å bruke en global variabel. Om så er tilfelle, bruk prekset 'GLOBAL\_'. På den måten unngår en at de globale navnene kollidere med lokale navn, og det er lett å se om variabelen er global eller ikke. Det er også lurt å prøve å gi variablene navn som ikke er for generelle eller navn/ord som lett kan missforstås (f.eks. at de kan ha ere 1

meninger). En måte å unngå å bruke globale variabler på, er å bruke static klassevariabler i klasser. En annen mulighet er å legge alle globale variabler i et eget namespace. Klassevariabler og lokale variabler Fordi klassevariabler har et mer begrenset scope, er det ikke fullt så viktigå gi dem entydige navn som med globale variabler. Det er likevel viktig å gi gode navn. Eksempler på hvordan en kan navgi klassevariabler er 'min_variabel', 'minvariable', 'MinVariabel', 'Min_Variabel', eller varianter av dette. Lokale varibler kan kun sees fra den funksjonene de er i bruk, og har således et veldig begrenset scope. Viktigheten av å ha et unikt navn er derfor ikke så stor. Bruk gjerne samme regel som for klassevariabler. #dene og enum Det er vanligvis foretrukket å bruke 'enum' fremfor å bruke '#define', siden den første kan brukes som en datatype. En 'enum' kan brukes om en variabel, og vil derfor følge de samme regler som vanlige variabelnavn. Det er også mulig å bruke 'enum' i steden for '#define', og hvis det er tilfelle bør en bruke store brukes på samme måte som med '#define'. Det er ikke alltid det er praktisk å følge disse reglene, så det er lov å bruke litt skjønn. Funksjoner Funksjoner bør skrive med små bokstaver. Om navnet består av ere ord, bør ordene skilles med en '_', slik som f.eks. 'finn_neste'. Aksessfunksjoner Aksessfunksjoner (som blir brukt til å sette eller lese verdier til klassevariabler) bør hete det samme som variablen de skal aksessere, med en 'get_' eller 'set_' preks for det som passer. Globale funksjoner Globale funksjoner (funksjoner som ikke tilhører noen klasse) følger de samme reglene som andre funksjonsnavn. De bør altså skrives med små bokstaver og ha en '_' mellom ordne, f.eks. 'min_funksjon'. 2

Klasser Klassenavn bør være mulig å skille fra variabler og funksjoner bare ved å se på navnet. De kan skrives med stor bokstav først i hvert av ordene, og ordene skilles med en '_', f.eks. 'Min_Klasse'. Indentering All kode bør indenteres etter vanlige regler. Disse reglene er denert nedenfor. Det er anbefalt å sette tab størrelsen til 8, og indenterinsstørrelsen til 2. Det er også anbefalt å bytte ut alle tab tegn med mellomrom (de este editorer har en opsjon for dette). Utrykk For alle uttrykk gjelder følgende regler: Komma skal etterfølges av mellomrom, men det skal ikke være noe mellomrom før komma. Det skal være mellomrom både før og etter følgende operatorer: =, <, >,!=, og kombinasjoner av disse. Generellt skal det være mellomrom både før og etter disse operatorene: +, -, *, /. Det skal være et mellomrom før en startparentes '(' i et statement, men ikke etter. Påfølgende parenteser skal ikke være fulgt av mellomrom. For eksempel: if ((i+2)). Klasser Følgende regler gjelder klasser: Klassedenisjonen skal plasseres i en headerl (.h l). Nøkkelordet 'class' skal være plassert i venstre kolonne (kolonne 1), fulgt av navnet på klassen. Den første krøllparentesen ('{') skal plasseres på en egen linje, direkte under nøkkelordet 'class', i kolonne 1. Den avsluttende krøllparentesen ('') skal også stå på en engen linje i kolonne 1. For 'template' klasser skal nøkkelordet 'template' stå på en egen linje over nøkellordet 'class', fulgt av templateparameterene. Hvis klassen er en derivert fra en base-klasse skal kolonet (':') som følges av arveuttrykket plasseres på en egen linje, indentert et hakk til høyre, rett under klasseutrykket. 3

Det følgende er et eksempel på hvordan en derivert template klasse skal se ut: template <class T> class My_Class : public Base_Class { ; if-utrykk Et 'if'-utrykk bør skrives på en av følgende måte: if () { else { Løkker Alle løkker ('while, 'for' og 'do') bør skrives på følgende måte: while () { Kommentarer All kode bør dokumenteres. Det bør være nok kommentarer til at en leser som ikke kjenner koden skal kunne forstå hva som skjer, samtidig som det ikke skal være ere kommentarer enn at koden fortsatt er leselig. Hvis det er for mange kommentarer drukner koden i all den unødvendige teksten. Det er også viktig å gi korte men forståelige kommentarer. De skal være minimale, men tilstrekkelige. Hvis du lager klasser som skal brukes av andre er det spesiellt viktig å kommentere de delene som er del av det åpne grensesnittet. Virtual og static funksjoner Hvis en funksjon er virtual eller static, bør dette indikeres i kildelen (source len) ved skrive '/* virtual */' eller '/* static */' som en kommentar rett før funksjondeklaresjonen. Nedenfor er et eksempel på en virtual funksjon (og hvor du bare kan bytte ut 'virtual' med 'static' der hvor det passer): 4

/* virtual */ Return_Type* My_Class::do_something(const Some_Type variable) { 5