Changes between Initial Version and Version 1 of Nb:DevelopersGuide/StyleGuide


Ignore:
Timestamp:
2025-03-08T21:44:06+01:00 (13 months ago)
Author:
paleid
Comment:

Nb added

Legend:

Unmodified
Added
Removed
Modified
  • Nb:DevelopersGuide/StyleGuide

    v1 v1  
     1[[TranslatedPages(revision=38)]]
     2= Utviklingsretningslinjer =
     3
     4[[PageOutline(2-2,Innholdsfortegnelse,inline)]]
     5
     6== Hvordan koden din bør se ut ==
     7
     8 * sørg for at koden er kompatibel med Java 11
     9 * **Dokumenter** koden din ved hjelp av inline-kommentarer og javadoc. Mange vil takke deg :)
     10 * Prøv å unngå offentlige felt
     11 * JOSM har mange hjelpemetoder i klassene `Utils`, `GuiUtils`, `Geometry` ... Bruk dem hvis du trenger det
     12 * Sjekk parametere. Du kan bruke `Objects.requireNonNull`.
     13 * Ikke skriv for ytelse - skriv for lesbarhet. Bruk `Stream`s, `Function`s og andre Java 8+ funksjoner hvis de gjør koden mer lesbar.
     14
     15=== Tråding / Låsing ===
     16
     17 * JOSM bruker ulike låsemekanismer, avhengig av objektet.
     18 * Datasett er beskyttet av en RW-lås. Noen metoder låser ikke automatisk av ytelsesgrunner. Sørg for å skaffe de nødvendige låsene for endringene dine.
     19 * GUI-komponenter skal bare endres i EDT-tråden
     20 * Foretrekk å bruke `SwingUtils.invokeLater` hvis du trenger å kjøre noe på UI-tråden
     21 * Mange lyttere kjører allerede i EDT-tråden (lagendringer) eller har en sentral manager som lar deg registrere lyttere som kjører i EDT (dataendringer, valgendringer).
     22
     23== Hvordan formateringen din bør se ut ==
     24
     25 * sørg for at det ikke er etterfølgende mellomrom
     26 * ikke bruk flere påfølgende tomme linjer
     27 * JOSM bruker 4 tegn innrykk og ingen tabulatorstopp. Hvis du bruker Notepad++, kan du endre standardinnrykket i "Innstillinger" -> "Språk" -> "Tabulatorinnstillinger" -> merk av for "Erstatt med mellomrom" (dette er permanent) eller med knappen "endre innrykksinnstillinger" i verktøylinjen (dette er en midlertidig innstilling og krever tillegget "Tilpass verktøylinje").
     28 * legg til krøllparenteser for hver `if`, med mindre den følges av `return` (eller kanskje `throw`)
     29 * Du bør bruke **checkstyle** før patch/commit: `ant checkstyle` og sjekk `checkstyle-josm.xml`; hvis du synes det er tregt å kjøre checkstyle for alle filer, kjør bare for endrede filer:
     30{{{
     31  #!bash
     32    # sørg for at build2-katalogen eksisterer, hvis den ikke gjør det, kjør 'ant checkstyle-compile' først
     33
     34    svn diff --summarize | awk '{ print $2 }' | grep "^[a-z]" | xargs \
     35      java -classpath "build2:tools/checkstyle/checkstyle-all.jar" \
     36        com.puppycrawl.tools.checkstyle.Main -c tools/checkstyle/josm_checks.xml
     37    # eller
     38    git diff --name-only | xargs \
     39      java -classpath "build2:tools/checkstyle/checkstyle-all.jar" \
     40        com.puppycrawl.tools.checkstyle.Main -c tools/checkstyle/josm_checks.xml
     41}}}
     42
     43== Hvordan javadoc-en din bør se ut ==
     44 * [https://www.oracle.com/technetwork/java/javase/documentation/index-137868.html#styleguide Oracle Javadoc-stilguide] brukes som basisguide
     45 * `@since` brukes for offentlige klasser og metoder (synlige for plugin-utviklere) med JOSM-revisjonen som introduserte elementet. Eksempel: `@since 5408`
     46   * `@since` oppdateres/legges til når en offentlig metode signatur endres eller hvis en klasse endres navn.
     47   * `@since` kan utelates for offentlige metoder og felt introdusert samtidig med klassen, forutsatt at de ikke har endret seg og klassen er riktig dokumentert.
     48   * Det kan være flere `@since`-merker, f.eks. for å legge til grensesnitt til en klasse. Grunnen til disse merkene bør legges til. Eksempel: `@since 12345 @FunctionalIterface ble lagt til`
     49   * Hvis du sender inn en patch og ikke kjenner revisjonen, legg til `@since xxx` uansett. Den kan erstattes når patchen din flettes.
     50 * `@throws` foretrekkes fremfor `@exception`
     51 * sjekk endringene dine før patch/commit ved å generere javadoc: `ant javadoc`, bla gjennom utdatameldinger; hvis du synes det er tregt å kjøre javadoc for alle filer, kjør bare for endrede filer:
     52
     53{{{
     54    svn diff --summarize | awk '{ print $2 }' | xargs javadoc -d javadoc
     55    # eller
     56    git diff --name-only | xargs javadoc -d javadoc
     57}}}
     58
     59=== Konfigurering av Eclipse ===
     60[[Image(DevelopersGuide/StyleGuide:styleguide_compiler_16.png,700px)]]
     61
     62[[Image(DevelopersGuide/StyleGuide:ss1.png,700px)]]
     63
     64[[Image(DevelopersGuide/StyleGuide:ss2.png,700px)]]
     65
     66[[Image(DevelopersGuide/StyleGuide:ss3.png,700px)]]
     67
     68
     69== Internasjonalisering ==
     70
     71 * sørg for at du bruker `tr(...)` for alle lokaliserte strenger
     72   {{{
     73   #!java
     74   import import static org.openstreetmap.josm.tools.I18n.tr;
     75
     76   // bruk tr(...) for unntaksmeldinger
     77   //
     78   throw new Exception(tr("feilmelding alltid i tr()"));
     79
     80   // bruk tr(...) for etiketter, titler, verktøytips og lignende
     81   //
     82   new JLabel(tr("Etikette alltid i tr()"));
     83
     84   // osv.
     85   }}}
     86
     87 * sammensett aldri lokaliserte meldinger med `+`. Bruk formatplassholdere i stedet.
     88
     89   **IKKE GJØR**
     90   `new JLabel(tr("Min etikett " + labelId));`
     91
     92   **GJØR**
     93   `new JLabel(tr("Min etikett {0}",labelId));`
     94
     95   Unntak: `+` kan brukes til å bryte lange linjer med ikke-variable tekster.
     96   Plassholderne er obligatoriske i enkle oversettelser.
     97
     98 * Når du bruker apostrof i kildestrengen, må den escapes med en annen apostrof (som backslash i C):[[BR]]
     99   {{{#!java
     100   new JButton(tr("Ikke trykk på meg!"))
     101   }}}
     102
     103 * En oversettelseskontekst kan settes med `trc(...)`. Ytterligere hint til oversettere gis av java-kommentarer ved funksjonen:
     104   {{{#!java
     105   /* I18n: husnummer, gate som parameter; plasser nummer først for synlighet */
     106   msg = tr("Husnummer {0} ved {1}", s, t);
     107   }}}
     108
     109 * Bruk `trn(...)` for å la oversettere velge det språkspesifikke flertallet:
     110   {{{#!java
     111   msg = trn("Objekt slettet", "Objekter slettet", del.size();
     112   
     113   // eller med plassholdere:
     114   //
     115   new JButton(trn(/* I18n: nødvendige ganger, noe navn som parameter */
     116                       "Trykk {1} {0} ganger!", n, n, someName))
     117
     118   // Den engelske entallsstrengen må oppgis for identifikasjon
     119   // selv når den er logisk ugyldig og ikke vil forekomme. For konsistens
     120   // bør nummerplassholderen settes i den.
     121   //
     122   msg = trn("Kombiner {0} vei", "Kombiner {0} veier", n, n);
     123   }}}
     124
     125 I flertallssegmenter er ingen plassholder obligatorisk for oversettere.
     126
     127----
     128Tilbake til [wikitr:/DevelopersGuide Utviklerveiledning]