En tant qu'étudiant universitaire et diplômé, j'ai été impliqué dans Java pour la première fois après avoir rejoint l'entreprise. Après une formation pour les nouveaux arrivants, je n'ai qu'un an et demi d'expérience en développement Java, j'aimerais donc partager les points à prendre en compte lors de l'écriture du code source dans les projets auxquels j'ai participé, et les points soulignés dans la revue.
Les projets dans lesquels je suis impliqué depuis un an et demi sont principalement la création de nouvelles fonctions ou la création par lots de systèmes existants. Avant de créer une nouvelle classe, il est important de lire d'abord le code source existant pour comprendre les règles de dénomination. Pour l'instant, lisez le code existant avant de commencer!
Exemple:
OldProductDeleteBatch.java
⇒ Existant
CampaignFileStopBatch.java``` ⇒ Nouveau
C'est une règle de dénomination nez + verbe + lot.
error
Etmessage
Etid
Les noms des variables sont courts, mais si vous y réfléchissez bien, vous n'obtiendrez aucune information.
Quelle erreur? Quel genre de message? Où id? Personne ne sait, sauf la personne qui l'a écrit.
Plus précisement
S'il y a une erreur d'affichage de format,
formatError, Pour les messages d'avertissement, `` `` warningMessage
,
Pour l'ID de fichier,
fileId```
Écrivons.
Bien sûr, il y a des gens qui ne sont pas bons en anglais, mais je pense qu'un anglais correct est nécessaire pour transmettre correctement l'intention à ceux qui lisent le code source.
Par exemple:
① variable booléenne pour déterminer si le fichier existe
boolean fileexist ⇒boolean fileexists
② Variable pour stocker l'ID du fichier de la campagne
string campignfileid ⇒ string campaignfileid
Pour les ingénieurs expérimentés, il vaut peut-être mieux ne pas écrire de commentaires fréquemment, mais je pense qu'il vaut mieux que les débutants écrivent de manière positive.
Au début, le contenu du traitement était répertorié dans les commentaires comme indiqué ci-dessous, et le code a été écrit après avoir saisi l'image dans son ensemble. Je pense que nous pouvons déterminer ce qu'il faut faire de cette manière.
comment.java
/*--------------------------------------------------------------------------------------------------------------
Examinez chaque ligne du fichier TSV téléchargé
0.id 1.Nom 2.Numéro d'étudiant
* Le numéro d'inscription étudiant indiqué dans le fichier TSV est le numéro DB int._number
Si une erreur se produit, appelez la méthode suivante pour placer le message d'erreur ligne par ligne dans la feuille
・ AddErrorRow():Si toutes les données sont nulles
・ AddStudentErrorRow(): Si les informations d'inscription à l'école sont erronées
--------------------------------------------------------------------------------------------------------------*/
for(){
//Écrire un traitement spécifique
}
Et encore une chose, en tant qu'ingénieur, j'oublie souvent ce que j'ai écrit au fil du temps. Dans ce cas, si vous avez un commentaire, vous pouvez comprendre immédiatement le contenu du code source.
Lors de la création de certains processus par lots, j'ai remarqué que j'avais écrit un processus similaire.
Par exemple, le processus de création de la feuille Excel suivante:
ExcelFormat.java
public static Workbook newWorkbook(){
Workbook newWorkbook = new SXSSFWorkbook();
CellStyle styleHeaderLabel = null;
CellStyle styleHeaderValue = null;
CellStyle styleHeaderValue = null;
DataFormat format = newWorkbook.createDataFormat();
//paramètres de police
Font font = newWorkbook.createFont();
font.setFontName("MS Gothic");
font.setFontHeightInPoints((short)9);
//Formatage pour l'affichage de la chaîne d'en-tête
styleHeaderLabel = newWorkbook.createCellStyle();
styleHeaderLabel.setBorderBottom(CellStyle.BORDER_THIN);
styleHeaderLabel.setBorderTop(CellStyle.BORDER_THIN);
styleHeaderLabel.setBorderLeft(CellStyle.BORDER_THIN);
styleHeaderLabel.setBorderRight(CellStyle.BORDER_THIN);
styleHeaderLabel.setFillForegroundColor(HSSFColor.LIGHT_CORNFLOWER_BLUE.index);
styleHeaderLabel.setFillPattern(CellStyle.SOLID_FOREGROUND);
styleHeaderLabel.setVerticalAlignment(CellStyle.VERTICAL_TOP);
styleHeaderLabel.setWrapText(true);
styleHeaderLabel.setFont(font);
addHeader(newWorkbook);
return newWorkbook;
}
public static void addHeader(Workbook workbook){
//Initialisez la feuille et définissez le nom de la feuille
Sheet mainSheet = workbook.createSheet();
mainSheet.createFreezePane(0, 1);
workbook.setSheetName(SHEET_NO, SHEET_NAME);
int colNumber = 1;
int rowNumber = 1;
Row row = mainSheet.createRow(rowNumber);
Cell cell = null;
CellStyle styleHeaderLabel = workbook.getCellStyleAt((short)(workbook.getNumCellStyles()-3));
//Insérer un en-tête
for(String headerName : HEADER_LIST){
cell = row.createCell(colNumber++);
cell.setCellStyle(styleHeaderLabel);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(headerName);
}
int maxColNumber = 0;
//Ajuster la taille de la colonne
for(int i = 1; i < colNumber; i++) {
mainSheet.setColumnWidth(i, 5000);
maxColNumber = i;
}
//Définir la ligne d'en-tête sur filtre automatique
mainSheet.setAutoFilter(new CellRangeAddress(1,1,1,maxColNumber));
}
En fait, il existe un certain nombre de processus similaires dans le processus par lots, et si vous les regroupez dans une classe et partagez le processus, le code source sera plus court et la lisibilité sera améliorée. Lorsqu'il y a deux ou plusieurs processus similaires dans votre source, pensez à «si ce processus peut être partagé» ou «s'il peut être résumé quelque part».
Jetez un œil au code source ci-dessous.
file.java
for(int i=0;i<file.arrtibuteSize();i++){
if("00000000".equals(file.getAttribute(i).getId()) && !file.getAttribute(i).getValue().isEmpty()){
ids.add(file.getAttribute(i).getValue());
break;
}
}
La manière d'écrire ici ! File.getAttribute (i) .getValue (). IsEmpty () '' est que la valeur de
file.getAttribute (i) .getValue () '' n'est pas toujours nulle. Des hypothèses sont requises. (Parce que
NullPointerException``` se produira si null est défini)
Cette fois, l'objet référencé a été défini de sorte que la valeur ici ne soit pas nulle, mais vous devez également prendre en compte la situation lorsqu'elle n'est pas définie.
Il est plus sûr d'écrire de manière à ce qu'il ne tombe pas même si quelque chose est défini lors du référencement dans un objet créé par un tel traitement indépendant.
Fixé:
file_2.java
for(int i=0;i<file.attributeSize();i++){
var fileAttr = file.getAttribute(i);
if(!"00000000".equals(fileAttr.getId())){
continue;
}
var value = fileAttr.getValue();
if(value != null && !value.isEmpty()){
ids.add(value);
break;
}
}
Écrire cela éviterait `` NullPointerException ''.
C'est une histoire très détaillée, mais je pense qu'il est préférable de définir des règles personnelles lorsque vous commencez à écrire le code source. Exemple:
rule.java
for(int i =0;i<ids.length;i++) {
//なにかの処理を書く
}
Le code source ci-dessus peut prêter à confusion, mais écrivez les arguments après for()
Je n'ai pas mis d'espace après pour, mais j'ai mis un espace après les parenthèses.
Afficher les arguments après tel pour et si()
Unifions s'il faut ou non laisser un espace demi-largeur.
rule2.java
for(int i=0;i<ids.length;i++){
//なにかの処理を書く
}
#Résumé Qu'as-tu pensé.
Au début, je faisais de mon mieux juste pour déplacer le code source, mais je pense progressivement à la lisibilité et aux règles de création. Pour moi, «étudier la programmation n'est pas le but» est la chose la plus importante à noter. Je pense que l'important est de faire des recherches et de programmer selon les motifs de «je veux faire quelque chose» et «quel genre de fonction je veux réaliser».
Recommended Posts