Folha de Estilo Java Android - AnaCarolcs/Lembrol GitHub Wiki
1.1. Usar camelCase para nomear atributos.
// Exemplo bom
private String studentName;
// Exemplo ruim
private String studentname;1.2. Usar camelCase para nomear métodos e parâmetros.
// Exemplo bom
private void setStudentName(int studentName){
this.studentName = studentName;
}
// Exemplo ruim
private void setstudentname(int studentname){
this.studentName = studentname;
}1.3. Todo nome de método deve expressar verbalmente o que ele faz.
// Exemplo bom
private void registerUser(User user){
UserDAO userDAO = new UserDAO(getActivity());
userDAO.saveUser(user);
}
// Exemplo ruim
private void userRegistration(User user){
UserDAO userDAO = new UserDAO(getActivity());
userDAO.saveUser(user);
}1.4. Usar Upper camelCase para nomear classes e interfaces.
// Exemplo bom
public class EventException extends Exception{
public EventException(String message){
super(message);
}
}
// Exemplo ruim
public class eventexception extends Exception{
public EventException(String message){
super(message);
}
}1.5. Usar nomes significativos para nomear atributos. Abreviações não devem ser usadas.
// Exemplo bom
private EditText emailField;
// Exemplo ruim
private EditText ef;1.6. Não devem haver nomes de atributos com apenas um caractere, como a, b, c. Exceto para o caractere i em loops.
// Exemplo bom
private Button LogginButton;
// Exemplo ruim
private Button b;1.7. Constantes devem ser escritas SCREAMING_SNAKE_CASE.
// Exemplo bom
private static int MINIMUM_PASSWORD_HEIGHT = 6;
// Exemplo ruim
private static int MINIMUMPASSWORDHEIGHT = 6;1.8. Tratar acrônimos como palavras.
// Exemplo bom
private String urlPostSaveStudent = https://trezentos-api.herokuapp.com/api/student/save;
// Exemplo ruim
private String URLPostSaveStudent = https://trezentos-api.herokuapp.com/api/student/save;2.1. Usar TAB para indentar, com tamanho 4.
// Exemplo bom
public String getStudentName(){
return studentName;
}
// Exemplo ruim
public String getStudentName(){
return studentName;
}2.2. Usar uma linha em branco para separar grupos lógicos.
// Exemplo bom
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menu_event_consultation, menu);
actionBar = getSupportActionBar();
setSearchBar(menu);
configActionBar();
radioGroup = (RadioGroup) findViewById(R.id.search_radio_group);
radioGroup.setOnCheckedChangeListener(this);
return true;
}
// Exemplo ruim
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menu_event_consultation, menu);
actionBar = getSupportActionBar();
setSearchBar(menu);
configActionBar();
radioGroup = (RadioGroup) findViewById(R.id.search_radio_group);
radioGroup.setOnCheckedChangeListener(this);
return true;
}2.3. Linhas devem possuir no máximo 80 caracteres.
// Exemplo bom
public String convertStudentToJson(Student studentToSave){
JSONStringer studentJson = new JSONStringer();
try{
studentJson.object()
.key("id").value(studentToSave.getId())
.key("name").value(studentToSave.getName())
.key("institution").value(studentToSave.getInstitution())
.key("rate").value(studentToSave.getRate())
.key("group").value(studentToSave.getGroup())
.key("class").value(studentToSave.getClass())
.key("photoPath").value(studentToSave.getPhotoPath())
.endObject();
}catch (JSONException e){
e.printStackTrace();
}
return studentJson.toString();
}
// Exemplo ruim
public String convertStudentToJson(Student studentToSave) {
JSONStringer studentJson = new JSONStringer();
try {
studentJson.object().key("id").value(studentToSave.getId()).key("name").value(studentToSave.getName()).key("institution").value(studentToSave.getInstitution()).key("rate").value(studentToSave.getRate()).key("group").value(studentToSave.getGroup()).key("class").value(studentToSave.getClass()).key("photoPath").value(studentToSave.getPhotoPath()).endObject();
} catch (JSONException e) {
e.printStackTrace();
}
return studentJson.toString();
}2.4. A chave de abertura de um método, loop ou estrutura condicional, deve estar na mesma linha, e a chave de fechamento deve estar um nível atrás do código.
// Exemplo bom
public List<Group> getClassGroups(){
return groups;
}
// Exemplo ruim
public List<Group> getClassGroups()
{
return groups;
}2.5. Deve haver espaços entre operadores, comparadores, =, : e ?.
// Exemplo bom
private void setClassIdOwner(int idOwner){
this.idOwner = idOwner;
}
// Exemplo ruim
private void setClassIdOwner(int idOwner){
this.idOwner=idOwner;
}2.6. Não deve haver espaços depois de (, [ e antes de ), ].
// Exemplo bom
private void setRate(Integer rate){
this.rate = rate;
}
// Exemplo ruim
private void setRate ( Integer rate ) {
this.rate = rate;
}2.7. Em loops, deve haver espaço depois do ponto e vírgula.
// Exemplo bom
for(i = 0; i < students.size(); i++){
for(int j = 0; j < students.size() - 1; j++){
if(student.get(j) > student.get(j + 1)){
Student auxiliarStudent = student.get(j);
students.set(j, students.get(j+1));
students.set(j+1, auxiliarStudent);
}
}
}
// Exemplo ruim
for(i = 0;i < students.size();i++){
for(int j = 0; j < students.size() - 1; j++){
if(student.get(j) > student.get(j + 1)){
Student auxiliarStudent = student.get(j);
students.set(j, students.get(j+1));
students.set(j+1, auxiliarStudent);
}
}
}2.8. Não deve haver espaços depois do nome do método e depois de for, if, else if e switch.
// Exemplo bom
private boolean getUserLoginStatus(){
boolean isUserLoggedIn = false;
LoginUtility loginUtility = new LoginUtility(this.getActivity());
if(loginUtility.hasUserLoggedIn()){
isUserLoggedIn = true;
}
else{
isUserLoggedIn = false;
}
return isUserLoggedIn;
}
// Exemplo ruim
private boolean getUserLoginStatus () {
boolean isUserLoggedIn = false;
LoginUtility loginUtility = new LoginUtility(this.getActivity());
if(loginUtility.hasUserLoggedIn()) {
isUserLoggedIn = true;
}
else {
isUserLoggedIn = false;
}
return isUserLoggedIn;
}3.1. Os comentários devem ter a mesma indentação do código.
// Exemplo bom
// Sets the required adapter to adapt items of the places array in items of the places list
PlaceAdapter placeAdapter = new PlaceAdapter(getActivity(),places);
// Exemplo ruim
// Sets the required adapter to adapt items of the places array in items of the places list
PlaceAdapter placeAdapter = new PlaceAdapter(getActivity(),places);3.2. Os comentários devem ser escritos na mesma linguagem do código.
3.3. Sempre deve ser usado // para comentários de uma linha e nunca /* ... */.
// Exemplo bom
//File: ClassHelper.java
//Purpose: Contains methods to help class' management
// Exemplo ruim
/**
* File: ClassHelper.java
* Purpose: Contains methods to help class' management
*/3.5. Deve ser colocado @Override antes de todos métodos sobrescritos.
// Exemplo bom
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
// Exemplo ruim
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}4.1. Use constantes ao invés de números e strings mágicas.
// Exemplo bom
private final Double INVALID_LATITUDE = Double.valueOf(91);
private Double latitude = INVALID_LATITUDE;
// Exemplo ruim
private Double latitude = Double.valueOf(91);4.2. Um método deve realizar apenas uma tarefa.
// Exemplo bom
public String convertStudentToJson(Student studentToSave) {
JSONStringer studentJson = new JSONStringer();
try {
studentJson.object()
.key("id").value(studentToSave.getId())
.key("name").value(studentToSave.getName())
.key("institution").value(studentToSave.getInstitution())
.key("rate").value(studentToSave.getRate())
.key("group").value(studentToSave.getGroup())
.key("class").value(studentToSave.getClass())
.key("photoPath").value(studentToSave.getPhotoPath())
.endObject();
} catch (JSONException e) {
e.printStackTrace();
}
return studentJson.toString();
}