Не так давно я рассмотрел Java Coding Conventions
от таких компаний, как Oracle, Google, Twitter и Spring.Удивительно, но когда дело доходит до indentation
и formatting
, можно сказать немного, и вот краткое резюме и полезные ссылки, которые могут помочь вам написать код easy to read
и maintainable
.
Я написал короткую статью о лучших методах Java-кодирования для тех, кто заинтересован, чтобы узнать больше.
- 2-4 пробела для отступа (Google рекомендует +2 пробела)
- Рекомендуемый диапазон длины строки должен быть между
70 to 120 (max)
- Когда речь идет о переносе строкbreak
after comma
и before an operator
- Держите открывающую скобку
{
в конце той же строки, что и подпись метода и ключевых слов (т. е. если, для ключевых слов и т. д.) - Использование
end of line comments //
только когда у вас есть несколько слов, чтобы сказать о линии.Если длина комментария превышает несколько слов, вы должны использовать /* */
или /* */
для многострочного комментария - Если сигнатура метода длинная, то перейти на новую строку и использовать
8 spaces
Различить аргументы метода и тело методамежду зарезервированными ключевыми словами (т. е. если, для) и круглыми скобками - это поможет легко визуально различить метод и другие конструкции - Методы разделены пустой строкой
- После пробела должно появиться пустое местозапятая в списке аргументов
- пробел
operators (i.e. +,-,%, etc.) and
= ` - Многие другие - смотрите ссылки ниже
Вот ваш код с использованием некоторых из приведенных выше пунктов
import java.util.Scanner;
public class SecretCode {
// Checks to see is user the String that was input by the user is valid.
public static boolean isValidLength(String stringChecker) {
// Determines length check
if ((stringChecker.length() >= 2) && (stringChecker.length() <= 12)) {
return true;
} else {
return false;
}
}
/*
* Converts the String inputted by the user and converts it to an Ascii value.
* The values are stored and return as an int.
*/
public static int charToAscii (String stringToAscii) {
int stringValue = 0;
// Loop to parse through the String and add all the Ascii values.
for (int x = 0; x < stringToAscii.length(); x++) {
stringValue += (int) stringToAscii.charAt(x); // Adder.
}
return stringValue;
}
/*
* Gets the total number of digits in an int.
* This will return the total amount of digits using a logarithmic function You
* can also do String.valueOf(totalDigits).length();
*/
public static int getNumDigits (int totalDigits) {
return (int) (Math.log10(totalDigits) + 1);
}
// Converts Ascii values into two separate characters.
public static String getSecretCode (int secretCodeConversion) {
String secretCode = new String ();
// Splits the numbers into two. This gets first two digits
int num1 = (secretCodeConversion % 10000) / 100;
// Second two digits - use proper variable naming i.e. firstTwoDigits, secondDigits etc.
int num2 = (secretCodeConversion % 100);
if (num1 <= 65) {
num1 += 61; // Ensures a letter is possible.
}
if (num2 <= 65) {
// Ensures a letter is possible for num2. This could have been short-circuited by an 'or' operator.
num2 += 61;
}
secretCode += Character.toString((char) num1) + Character.toString((char) num2);
return secretCode;
}
public static void main(String[] args) {
String secretCode = new String ();
// Instantiates Scanner object to read input.
Scanner sc = new Scanner (System.in);
System.out.println ("Please enter the String you would like to make a secret code?");
secretCode = sc.next();
// Checks to see low long secret message it is to make sure it is valid.
while (isValidLength(secretCode) == false) {
System.out.println ("Please enter the String you would like to make a secret code?");
secretCode = sc.next(); // Loops until true.
}
sc.close(); // No more need for Scanner.
int sumOfDigits = charToAscii(secretCode);
if (getNumDigits(sumOfDigits) % 2 != 0) {
sumOfDigits *= 10;
}
if (sumOfDigits <= 4000) {
sumOfDigits *= 4;
}
if (getNumDigits(sumOfDigits) % 2 != 0) {
sumOfDigits /= 10;
}
System.out.println();
System.out.println();
System.out.println ("Your Secret Coded Message Is: " + getSecretCode(sumOfDigits));
System.out.println();
System.out.println();
System.out.println ("Additional Data:");
System.out.println ("_______________________");
System.out.println ("String Input: " + '"' + secretCode + '"');
System.out.println ("Sum of Ascii Codes: " + charToAscii(secretCode));
System.out.println ("Secret Code in Ascii Numbers " + sumOfDigits);
}
}
Вот некоторые вещи, которые вы могли бы улучшить в своем коде
- С чрезмерным комментарием - иногда понятно, что делает строка, не добавляйте commeНет, добавляйте комментарии только тогда, когда код сложный и трудно читать
- Именование переменной, облегчить понимание того, что хранит переменная
- Отступ
- Использование типакомментариев
- Отсутствие комментариев Javadoc
В вашем коде также есть много положительных моментов.Мне нравится метод именования, то, как вы разделили его на методы.Вы находитесь на правильном пути, прочитайте некоторые из следующих соглашений кодирования для Java, и все готово.
Руководство по стилю Oracle Java - https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
Руководство по стилю Google Java - https://google.github.io/styleguide/javaguide.html
Руководство по стилю Spring Framework - https://github.com/spring-projects/spring-framework/wiki/Code-Style
Твиттер Руководство по стилю Java - https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/styleguide.md