Il s'agit d'une norme de codage créée pour le développement en interne. J'ai moi-même été affligé par certaines conventions de codage involontaires créées par d'autres sociétés dans le passé, et je l'ai considérablement assouplie.
Il peut y avoir une idée qu'il s'agit d'une convention et qu'il devrait être respecté. Mais je n'aime pas ce genre d'idée simple. Si le but est de suivre les normes de codage, ce sera écrasant. Donc, à l'extrême, vous n'êtes pas obligé de suivre cette convention de codage. Alors pourquoi écrire? C'est parce que vous n'avez pas à hésiter si vous avez des règles. Si vous êtes sûr de vous, ignorez cette norme de codage (ou modifiez-la). Veuillez vous référer à cette norme de codage lorsque vous vous demandez quoi faire.
★ </ font>: Important. Cet accord ne doit pas être violé. S'il est raisonnable de violer, les conventions de codage doivent être modifiées. Cependant, vous devez être prêt à refactoriser toutes les sources à mesure que les conventions de codage changent. ◆ </ font>: Important. Si vous êtes convaincu que vous violez, mais c'est mieux! C'est le bon moment pour envisager de changer vos conventions de codage. ● </ font>: recommandé. Si vous n'êtes pas particulier à ce sujet, suivez-le pour le moment.
En gros, suivez le Google Java Style Guide (traduction japonaise non officielle).
Une dénomination correcte signifie une définition concise et claire de ce que «c'est». C'est la conception du programme.
Si vous avez des difficultés à nommer
Il peut y avoir un problème tel que. (= Le problème peut être détecté)
Si la dénomination est définie sur texte, cette alerte ne fonctionnera pas et la conception du programme se réduira de plus en plus.
Donnons un nom qui est juste, "Il n'y a que ça!"
Le code mystérieux (ID d'écran, etc.) est NG car il n'est pas clair à première vue à quoi il se réfère. Romaji est simplement difficile à lire, donc NG. En japonais, il est difficile d'appuyer sur la touche pleine largeur / demi-largeur à chaque fois, c'est donc NG.
Bon exemple
public class Employee {
public String name;
private Decimal monthlyIncome;
}
mauvais exemple
public class Class002 {
public String namae;
revenu mensuel décimal privé;
}
Parce qu'il faut du temps pour déchiffrer l'abréviation. Au contraire, il faut du temps pour faire une abréviation.
Object menuFlg; // NG:'Flg'Est FLaG? FLaGment?
String employeeNm; // NG:'Nm'Est le nom? NuMber?
SystemParameterDAO dao; // OK:'DAO'Est communément appelé DataAccessObject
DBConnection dbConnection; // OK:'DB'Fait généralement référence à DataBase
Si le nom est suffisamment long pour créer une abréviation inhabituelle, vous devez soupçonner que la conception du programme n'est pas appropriée. En outre, les variables avec une portée très étroite peuvent être plus faciles à voir si ce sont des abréviations, donc dans ce cas, c'est OK.
Bon exemple
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;
}
}
mauvais exemple
public class Org {
private List<String> corpEmpNmLst;
public String getcorpEmpNmLst() {
return corpEmpNmLst;
}
}
En aparté, je suis mort une fois dans un projet avec une mystérieuse convention de romaji + abréviation de voyelle (GakuseiBango-> GKSIBNG).
Fondamentalement, il suit le nom de la classe.
Cependant, je voudrais que vous évitiez d'utiliser <SubClassName> Base
de manière directe à cause des classes dérivées.
La superclasse Developer
devrait être ʻEmployee au lieu de
DeveloperBase, et cette superclasse devrait être
Person`.
Pour les valeurs booléennes, nommez-le de manière à ce que la signification de vrai / faux soit claire, comme ʻis-et
has-`. La valeur booléenne «-Flag» est catégoriquement rejetée.
Pour la méthode qui renvoie une valeur booléenne, reportez-vous au nom de variable mentionné ci-dessus.
C'est au formateur de code d'écrire des retraits et {}, d'écrire plusieurs instructions sur une seule ligne, et ainsi de suite. C'est un gaspillage de ressources d'être distrait par cela pendant le codage.
Approfondir le nid est généralement quelque chose de mal. À titre indicatif, si vous avez plus de 3 couches, vous devriez reconsidérer.
Bon exemple
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();
}
mauvais exemple
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;
}
Les humains ne sont pas assez intelligents pour comprendre le double déni. Le déni est un processus très coûteux pour les humains.
Bon exemple
public Boolean isActive(Boolean visible, Boolean enable) {
return visible && enable;
}
mauvais exemple
public Boolean isNotInactive(Boolean invisible, Boolean notDisenable) {
return !invisible && notDisenable;
}
Utilisez un opérateur logique par instruction, si possible, et au plus trois. Aucune autre opération logique n'est possible pour les humains.
mauvais exemple
Boolean isTooBad = (!(arg1.equals('1') && arg2 == 0) || arg0 > 30) ^ arg3.canRead();
Le nombre magique a ici une signification large et comprend une chaîne de caractères. Je ne comprends pas le sens, je ne peux pas le réparer et je ne connais pas l'étendue de l'influence. Bien sûr, à moins que la signification soit claire, telle que «0! = List.size ()».
Bon exemple
public Decimal getPrise(Item selectedItem, Campaign campaign) {
return selectedItem.prise() * campaign.discountRate() * Constants.TAX_RATE;
}
mauvais exemple
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 Attachez autant que possible aux classes et aux membres. À ce moment-là, utilisez les balises Javadoc de manière appropriée. En particulier, «@ param», «@ return», «@ throws» et «@ deprecated» sont requis selon les besoins. Au contraire, «@ author» et «@ since» ne sont pas requis séparément. Il ne sera de toute façon pas entretenu correctement. C'est une relique de l'époque où il n'y avait pas de système de gestion de version.
Il y a trop de commentaires inutiles dans le monde. Veuillez détruire les commentaires suivants dès qu'ils sont trouvés.
// Remplacez 10 pour la variable a
// Ce traitement exprime le tableau yy sur la page nn de la spécification xxx
En particulier, si "Commenter juste au cas où" et "Réparer le commentaire de position" existent, je pense que l'effort d'investigation de la portée d'impact, l'effort de correction et le taux d'occurrence de bogue augmenteront de 1,5 à 4,0 fois par rapport au cas où ils n'existent pas.
Les commentaires qui disent «quel était le but de l'écriture de ce processus (pourquoi)» ou «d'autres méthodes peuvent faire de même, mais pourquoi pas (pourquoi)» sont les bienvenus. À partir de ce commentaire, vous pouvez prédire le résultat attendu, et si le résultat de l'exécution ne correspond pas au résultat attendu, vous pouvez détecter qu'il s'agit d'un bogue.
Bon exemple
void createCurry(RetortCurry retortCurry) {
//Réchauffez le curry chaud (Commentaire:"Chaud"Il est important de, et vous pouvez imaginer que vous devez changer le nombre de secondes en fonction de la puissance de la portée et de la capacité du curry)
Microwave.execute(retortCurry, 180);
//Compte tenu de l'apparence, placez-le sur une assiette (Explication: L'ordre de le mettre sur une assiette est"Cela semble bon"のためにこの順にしていることがわかる。Cela semble bonを無視すれば順番は崩してもよい)
return new Dish().add(rice).add(retortCurry).add(fukujinzuke);
}
mauvais exemple
void createCurry(RetortCurry retortCurry) {
//Mettez le curry dans la plage, réglez-le sur 180 secondes et exécutez-le (Explication: je ne connais pas le but, donc je ne sais pas si le nombre de secondes doit être changé même si la puissance de la plage ou la capacité du curry change)
Microwave.execute(retortCurry, 180);
//Placez le riz, le curry et le Fukujin-zuke dans une assiette (Explication: je ne sais pas quel est le but, donc je ne peux pas changer l'ordre)
return new Dish().add(rice).add(retortCurry).add(fukujinzuke);
}
Recommended Posts