Folha de Estilo Java Android - AnaCarolcs/Lembrol GitHub Wiki

1. Nomeação

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;

Voltar ao topo

2. Formatação

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;
    }

Voltar ao topo

3. Comentários

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);
    }

Voltar ao topo

4. Boas Práticas

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();
    }
⚠️ **GitHub.com Fallback** ⚠️