Dies ist ein Codierungsstandard, der für die Eigenentwicklung erstellt wurde. Ich selbst war von einigen unbeabsichtigten Codierungskonventionen betroffen, die in der Vergangenheit von anderen Unternehmen erstellt wurden, und ich habe sie erheblich gelockert.
Es kann eine Idee geben, dass es eine Konvention ist und befolgt werden sollte. Aber ich mag diese einfache Idee nicht. Wenn der Zweck darin besteht, den Kodierungsstandards zu folgen, wird dies überwältigend sein. Im Extremfall müssen Sie diese Codierungskonvention also nicht befolgen. Warum dann schreiben? Das liegt daran, dass Sie nicht zögern müssen, wenn Sie einige Regeln haben. Wenn Sie sicher sind, ignorieren Sie diesen Codierungsstandard (oder ändern Sie ihn). Bitte beziehen Sie sich auf diesen Codierungsstandard, wenn Sie sich fragen, was Sie tun sollen.
★ </ font>: Wichtig. Diese Vereinbarung sollte nicht verletzt werden. Wenn es vernünftig ist, gegen das Gesetz zu verstoßen, sollten die Kodierungskonventionen geändert werden. Sie sollten jedoch auf das Refactoring aller Quellen vorbereitet sein, wenn sich die Codierungskonventionen ändern. ◆ </ font>: Wichtig. Wenn Sie sicher sind, dass Sie verletzen, aber das ist besser! Dies ist ein guter Zeitpunkt, um Ihre Codierungskonventionen zu ändern. ● </ font>: Empfohlen. Wenn Sie sich nicht sicher sind, folgen Sie ihm vorerst.
Befolgen Sie grundsätzlich den Google Java Style Guide (inoffizielle japanische Übersetzung).
Richtige Benennung bedeutet eine präzise und klare Definition dessen, was "es" ist. Dies ist Programmdesign.
Wenn Sie Probleme beim Benennen haben
Möglicherweise liegt ein Problem wie z. (= Problem kann erkannt werden)
Wenn die Benennung auf Text eingestellt ist, funktioniert diese Warnung nicht und das Programmdesign wird immer mehr zusammenbrechen.
Geben wir einen Namen, der genau richtig ist: "Es gibt nur diesen!"
Der mysteriöse Code (Bildschirm-ID usw.) ist NG, da auf den ersten Blick nicht klar ist, worauf er sich bezieht. Romaji ist einfach schwer zu lesen, also NG. Auf Japanisch ist es mühsam, jedes Mal die Taste mit voller Breite / halber Breite zu drücken, daher ist es NG.
Gutes Beispiel
public class Employee {
public String name;
private Decimal monthlyIncome;
}
schlechtes Beispiel
public class Class002 {
public String namae;
privates monatliches Dezimaleinkommen;
}
Weil es Zeit braucht, um die Abkürzung zu entschlüsseln. Im Gegenteil, es braucht Zeit, um eine Abkürzung zu machen.
Object menuFlg; // NG:'Flg'Ist FLaG? FLaGment?
String employeeNm; // NG:'Nm'Ist Name? NuMber?
SystemParameterDAO dao; // OK:'DAO'Wird allgemein als DataAccessObject bezeichnet
DBConnection dbConnection; // OK:'DB'Bezieht sich allgemein auf Datenbank
Wenn der Name lang genug ist, um eine ungewöhnliche Abkürzung zu bilden, sollten Sie vermuten, dass das Programmdesign nicht geeignet ist. Variablen mit einem sehr engen Bereich sind möglicherweise leichter zu erkennen, ob es sich um Abkürzungen handelt. In diesem Fall ist dies in Ordnung.
Gutes Beispiel
public class Corporation {
private List<Employee> employees;
public List<String> getEmployeesNameList() {
List<String> result = new ArrayList();
employees.forEach(e -> result.add(e.getName());
return result;
}
}
schlechtes Beispiel
public class Org {
private List<String> corpEmpNmLst;
public String getcorpEmpNmLst() {
return corpEmpNmLst;
}
}
Nebenbei bemerkt, ich bin einmal in einem Projekt mit einer mysteriösen Konvention der Romaji + Vokal-Abkürzung (GakuseiBango-> GKSIBNG) gestorben.
Grundsätzlich folgt es dem Klassennamen.
Ich möchte jedoch, dass Sie die Verwendung von
Benennen Sie boolesche Werte so, dass die Bedeutung von wahr / falsch klar ist, z. B. "ist", "hat". Der boolesche Wert "-Flag" wird kategorisch abgelehnt.
Informationen zu der Methode, die einen booleschen Wert zurückgibt, finden Sie im oben genannten Variablennamen.
Es liegt am Code-Formatierer, Einrückungen und {} zu schreiben, mehrere Anweisungen in eine Zeile zu schreiben und so weiter. Es ist eine Verschwendung von Ressourcen, sich beim Codieren davon ablenken zu lassen.
Das Nest zu vertiefen ist normalerweise etwas falsch. Wenn Sie mehr als 3 Ebenen haben, sollten Sie dies als Leitfaden überdenken.
Gutes Beispiel
public List<String> fizzBuzzList(List<Integer> themes) {
List<String> result = new ArrayList<>();
for(Integer theme: themes) {
result.add(fizzBuzz(theme));
}
return result;
}
private String fizzBuzz(Integer theme) {
Map<Integer, String> rule = new LinkedHashMap<>();
rule.put(30, "FizzBuzzFizz");
rule.put(15, "FizzBuzz");
rule.put(5, "Buzz");
rule.put(3, "Fizz");
for(Integer ruleKey: rule.keySet()) {
if(0 == theme % ruleKey) return rule.get(ruleKey);
}
return theme.toString();
}
schlechtes Beispiel
public List<String> fizzBuzzList(List<Integer> themes) {
List<String> result = new ArrayList<>();
for(Integer theme: themes) {
if(0 == theme % 3) {
if(0 == theme % 5) {
if(0 == theme % 2) {
result.add("FizzBuzzFizz");
} else {
result.add("FizzBuzz");
} else {
result.add("Fizz");
}
} else if(0 == theme % 5) {
result.add("Buzz");
} else {
result.add(theme.toString());
}
}
return result;
}
Menschen sind nicht klug genug, um doppelte Verleugnung zu verstehen. Verleugnung ist ein sehr kostspieliger Prozess für den Menschen.
Gutes Beispiel
public Boolean isActive(Boolean visible, Boolean enable) {
return visible && enable;
}
schlechtes Beispiel
public Boolean isNotInactive(Boolean invisible, Boolean notDisenable) {
return !invisible && notDisenable;
}
Verwenden Sie nach Möglichkeit einen logischen Operator pro Anweisung und höchstens drei. Für den Menschen sind keine weiteren logischen Operationen möglich.
schlechtes Beispiel
Boolean isTooBad = (!(arg1.equals('1') && arg2 == 0) || arg0 > 30) ^ arg3.canRead();
Die magische Zahl hat hier eine breite Bedeutung und enthält eine Zeichenkette. Ich verstehe die Bedeutung nicht, kann sie nicht reparieren und kenne den Einflussbereich nicht. Natürlich, es sei denn, die Bedeutung ist klar, wie z. B. "0! = List.size ()".
Gutes Beispiel
public Decimal getPrise(Item selectedItem, Campaign campaign) {
return selectedItem.prise() * campaign.discountRate() * Constants.TAX_RATE;
}
schlechtes Beispiel
public Decimal getPrise(Item selectedItem, Boolean campaign) {
if(compaign) {
return selectedItem.prise() * 0.8 * 1.08;
} else {
return selectedItem.prise() * 1.0 * 1.08;
}
}
◆Javadoc Bringen Sie so viel wie möglich an Klassen und Mitgliedern an. Verwenden Sie zu diesem Zeitpunkt die Javadoc-Tags entsprechend. Insbesondere sind nach Bedarf "@ param", "@ return", "@ throw" und "@ veraltet" erforderlich. Im Gegenteil, "@ author" und "@ Since" werden nicht separat benötigt. Es wird sowieso nicht richtig gewartet. Es ist ein Relikt der Zeit, als es kein Versionsverwaltungssystem gab.
Es gibt zu viele unnötige Kommentare auf der Welt. Bitte zerstören Sie die folgenden Kommentare, sobald sie gefunden werden.
// Ersetze Variable a
durch 10`// Diese Verarbeitung drückt die Tabelle yy auf der nn-Seite der Spezifikation xxx
ausInsbesondere wenn "Nur für den Fall auskommentieren" und "Kommentar zur Reparaturposition" vorhanden sind, werden sich meiner Meinung nach der Aufwand für die Untersuchung des Aufprallbereichs, der Korrekturaufwand und die Fehlerauftrittsrate im Vergleich zu dem Fall, in dem sie nicht vorhanden sind, um das 1,5- bis 4,0-fache erhöhen.
Kommentare mit der Aufschrift "Was war der Zweck des Schreibens dieses Prozesses (Warum)" oder "Andere Methoden können dasselbe tun, aber warum nicht (Warum nicht)" sind willkommen. Anhand dieses Kommentars können Sie das erwartete Ergebnis vorhersagen. Wenn das Ausführungsergebnis nicht dem erwarteten Ergebnis entspricht, können Sie feststellen, dass es sich um einen Fehler handelt.
Gutes Beispiel
void createCurry(RetortCurry retortCurry) {
//Das Curry heiß erwärmen (Kommentar:"Heiß"Es ist wichtig, und Sie können sich vorstellen, dass die Anzahl der Sekunden abhängig von der Stärke des Bereichs und der Kapazität des Curry geändert werden muss.
Microwave.execute(retortCurry, 180);
//Legen Sie es in Anbetracht des Aussehens auf einen Teller (Erläuterung: Die Reihenfolge, in der es auf einen Teller gelegt wird, lautet"Sieht gut aus"のためにこの順にしていることがわかる。Sieht gut ausを無視すれば順番は崩してもよい)
return new Dish().add(rice).add(retortCurry).add(fukujinzuke);
}
schlechtes Beispiel
void createCurry(RetortCurry retortCurry) {
//Legen Sie das Curry in den Bereich, stellen Sie es auf 180 Sekunden ein und führen Sie es aus (Erläuterung: Ich kenne den Zweck nicht, daher weiß ich nicht, ob die Anzahl der Sekunden geändert werden muss, selbst wenn sich die Leistung des Bereichs oder die Kapazität des Curry ändert).
Microwave.execute(retortCurry, 180);
//Legen Sie Reis, Curry und Fukujin-zuke auf einen Teller (Erläuterung: Ich weiß nicht, was der Zweck ist, daher kann ich die Reihenfolge nicht ändern).
return new Dish().add(rice).add(retortCurry).add(fukujinzuke);
}
Recommended Posts