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


Ignore:
Timestamp:
2025-07-14T22:01:04+02:00 (6 months ago)
Author:
makmar
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • El:DevelopersGuide/StyleGuide

    v1 v1  
     1[[TranslatedPages(revision=38)]]
     2
     3= Οδηγίες Ανάπτυξης =
     4
     5[[PageOutline(2-2,Table of content,inline)]]
     6
     7== Πώς θα πρέπει να είναι ο κώδικάς σας ==
     8
     9 * Βεβαιωθείτε ότι ο κώδικας είναι συμβατός με Java 11
     10 * **Τεκμηριώστε** τον κώδικά σας χρησιμοποιώντας ενσωματωμένα σχόλια και javadoc. Πολλοί άνθρωποι θα σας ευγνωμονούν :)
     11 * Προσπαθήστε να αποφύγετε τα δημόσια πεδία
     12 * Το JOSM περιλαμβάνει πολλές βοηθητικές μεθόδους στις κλάσεις `Utils`, `GuiUtils`, `Geometry` .... Χρησιμοποιήστε τις αν χρειάζεστε
     13 * Ελέγξτε τις παραμέτρους. Μπορείτε να χρησιμοποιήσετε το `Objects.requireNonNull`.
     14 * Μην γράφετε για απόδοση - γράψτε για αναγνωσιμότητα. Χρησιμοποιήστε `Stream`s, `Function`s και άλλες λειτουργίες Java 8+ αν κάνουν τον κώδικα πιο ευανάγνωστο.
     15
     16=== Threading / Κλείδωμα ===
     17
     18 * Το JOSM χρησιμοποιεί διάφορους μηχανισμούς κλειδώματος, ανάλογα με το αντικείμενο.
     19 * Τα σύνολα δεδομένων προστατεύονται από κλείδωμα RW. Ορισμένες μέθοδοι δεν κλειδώνουν αυτόματα για λόγους απόδοσης. Βεβαιωθείτε ότι έχετε αποκτήσει τα κλειδώματα που απαιτούνται για τις αλλαγές σας.
     20 * Τα στοιχεία GUI θα πρέπει να τροποποιούνται μόνο στο νήμα EDT.
     21 * Προτιμήστε να χρησιμοποιείτε τη μέθοδο `SwingUtils.invokeLater` εάν χρειάζεται να εκτελέσετε οτιδήποτε στο νήμα UI.
     22 * Πολλοί ακροατές εκτελούνται ήδη στο νήμα EDT (αλλαγές επιπέδων) ή έχουν έναν κεντρικό διαχειριστή που σας επιτρέπει να καταχωρείτε ακροατές που εκτελούνται στο EDT (αλλαγές συνόλου δεδομένων, αλλαγές επιλογής).
     23
     24== Πώς θα πρέπει να είναι η μορφοποίηση του κώδικά σας ==
     25
     26 * βεβαιωθείτε ότι δεν υπάρχουν κενά διαστήματα στο τέλος των γραμμών
     27 * μην χρησιμοποιείτε πολλαπλές συνεχόμενες κενές γραμμές
     28 * το JOSM χρησιμοποιεί εσοχή 4 χαρακτήρων και καθόλου στηλοθέτες. Εάν χρησιμοποιείτε το Notepad++ μπορείτε να αλλάξετε την προεπιλεγμένη εσοχή στις "Προτιμήσεις" -> "Γλώσσα" -> "Ρυθμίσεις στηλοθέτη" -> επιλέξτε "Αντικατάσταση με κενά" (αυτό είναι μόνιμο) ή με το κουμπί "αλλαγή ρυθμίσεων εσοχής" στη εργαλειοθήκη (αυτή είναι μια προσωρινή ρύθμιση και απαιτεί το πρόσθετο "Προσαρμογή Εργαλειοθήκης").
     29 * προσθέστε αγκύλες για κάθε `if`, εκτός εάν ακολουθείται από `return` (ή πιθανώς `throw`)
     30 * Θα πρέπει να χρησιμοποιήσετε το **checkstyle** πριν από το patch/commit: `ant checkstyle` και ελέγξτε `checkstyle-josm.xml`; εάν διαπιστώσετε ότι η εκτέλεση του checkstyle είναι αργή για όλα τα αρχεία, εκτελέστε την μόνο για τα τροποποιημένα αρχεία:
     31{{{
     32  #!bash
     33    # make sure build2 dir exists, if it does not run 'ant checkstyle-compile' before
     34
     35    svn diff --summarize | awk '{ print $2 }' | grep "^[a-z]" | xargs \
     36      java -classpath "build2:tools/checkstyle/checkstyle-all.jar" \
     37        com.puppycrawl.tools.checkstyle.Main -c tools/checkstyle/josm_checks.xml
     38    # or
     39    git diff --name-only | xargs \
     40      java -classpath "build2:tools/checkstyle/checkstyle-all.jar" \
     41        com.puppycrawl.tools.checkstyle.Main -c tools/checkstyle/josm_checks.xml
     42}}}
     43
     44== Πώς πρέπει να φαίνεται το javadoc σας ==
     45 * Ο [https://www.oracle.com/technetwork/java/javase/documentation/index-137868.html#styleguide οδηγός στυλ Oracle Javadoc] χρησιμοποιείται ως βασικός οδηγός
     46 * Το `@since` χρησιμοποιείται για δημόσιες κλάσεις και μεθόδους (ορατές στους προγραμματιστές πρόσθετων) με την έκδοση JOSM που εισήγαγε το στοιχείο. Παράδειγμα: `@since 5408`
     47   * Το `@since` ενημερώνεται / προστίθεται όταν αλλάζει η υπογραφή μιας δημόσιας μεθόδου ή εάν μετονομαστεί μια κλάση.
     48   * Το `@since` μπορεί να παραλειφθεί για δημόσιες μεθόδους και πεδία που εισάγονται ταυτόχρονα με την κλάση, υπό την προϋπόθεση ότι δεν έχουν αλλάξει και η κλάση είναι σωστά τεκμηριωμένη.
     49   * Μπορεί να υπάρχουν πολλαπλές ετικέτες `@since` tags, e.g. fπ.χ. για την προσθήκη διεπαφών σε μια κλάση. Ο λόγος για αυτές τις ετικέτες πρέπει να προστεθεί Παράδειγμα: `@since 12345 @FunctionalIterface προστέθηκε`
     50   * Εάν υποβάλετε μια ενημέρωση κώδικα και δεν γνωρίζετε την έκδοση κώδικα, προσθέστε το `@since xxx` έτσι κι αλλιώς. Μπορεί στη συνέχεια, να αντικατασταθεί κατά τη συγχώνευση της ενημέρωσης κώδικα.
     51 * Το `@throws` προτιμάται από το `@exception`
     52 * ελέγξτε τις αλλαγές σας πριν από την ενημέρωση κώδικα/επικύρωση δημιουργώντας javadoc: `ant javadoc`, browse output messages; Αν διαπιστώσετε ότι η εκτέλεση του javadoc είναι αργή για όλα τα αρχεία, εκτελέστε το μόνο για τα τροποποιημένα αρχεία:
     53
     54{{{
     55    svn diff --summarize | awk '{ print $2 }' | xargs javadoc -d javadoc
     56    # or
     57    git diff --name-only | xargs javadoc -d javadoc
     58}}}
     59
     60=== Ρύθμιση του Eclipse ===
     61[[Image(DevelopersGuide/StyleGuide:styleguide_compiler_16.png,700px)]]
     62
     63[[Image(DevelopersGuide/StyleGuide:ss1.png,700px)]]
     64
     65[[Image(DevelopersGuide/StyleGuide:ss2.png,700px)]]
     66
     67[[Image(DevelopersGuide/StyleGuide:ss3.png,700px)]]
     68
     69
     70== Διεθνοποίηση ==
     71
     72 * Βεβαιωθείτε ότι χρησιμοποιείτε το `tr(...)` για όλες τις μεταφραζόμενες συμβολοσειρές
     73   {{{
     74   #!java
     75   import import static org.openstreetmap.josm.tools.I18n.tr;
     76
     77   // use tr(...) for exception messages
     78   //
     79   throw new Exception(tr("error message always in tr()"));
     80
     81   // use tr(...) for labels, title, tooltip texts and the like
     82   //
     83   new JLabel(tr("Label always in tr()"));
     84
     85   // etc.
     86   }}}
     87
     88 * μην συναρμολογείτε μεταφρασμένα μηνύματα με `+`. Χρησιμοποιήστε ειδικούς χαρακτήρες αντικατάστασης.
     89
     90   **ΜΗΝ**
     91   `new JLabel(tr("My Label " + labelId));`
     92
     93   **ΚΑΝΤΕ ΤΟ**
     94   `new JLabel(tr("My Label {0}",labelId));`
     95
     96   Μοναδική εξαίρεση: Το `+` μπορεί να χρησιμοποιηθεί για να διακόψει μεγάλες γραμμές μη μεταβλητών κειμένων.
     97   Οι ειδικοί χαρακτήρες αντικατάστασης είναι υποχρεωτικοί σε απλές μεταφράσεις.
     98
     99 * Όταν χρησιμοποιείτε απόστροφο μέσα σε μεταφράσιμη συμβολοσειρά, πρέπει να διαφεύγει με μία δεύτερη απόστροφο (όπως το backslash στην C):[[BR]]
     100   {{{#!java
     101   new JButton(tr("Don''t press me!"))
     102   }}}
     103
     104 * Ένα περιβάλλον μετάφρασης μπορεί να οριστεί με `trc(...)`. Πρόσθετες συμβουλές για τους μεταφραστές δίνονται από σχόλια java στη συνάρτηση:
     105   {{{#!java
     106   /* I18n: house number, street as parameter; place number first for visibility */
     107   msg = tr("House number {0} at {1}", s, t);
     108   }}}
     109
     110 * Χρησιμοποιήστε `trn(...)` για να επιτρέψετε στους μεταφραστές να επιλέξουν τον πληθυντικό για τη συγκεκριμένη γλώσσα:
     111   {{{#!java
     112   msg = trn("Object deleted", "Objects deleted", del.size();
     113   
     114   // or with placeholders:
     115   //
     116   new JButton(trn(/* I18n: times needed, some name as parameter */
     117                       "Press {1} {0} times!", n, n, someName))
     118
     119   // The English singular source string must be given for identification
     120   // even when its logically invalid and won't occur. For consistency
     121   // the number placeholder should be set in it.
     122   //
     123   msg = trn("Combine {0} way", "Combine {0} ways", n, n);
     124   }}}
     125
     126 Στα τμήματα πληθυντικού δεν είναι υποχρεωτικοί οι ειδικοί χαρακτήρες αντικατάστασης για τους μεταφραστές.
     127
     128----
     129Πίσω στο [wikitr:/DevelopersGuide Οδηγός για Προγραμματιστές]
     130
     131
     132