Coder Social home page Coder Social logo

project2_openclassroom's People

Contributors

benoitloic avatar

Watchers

 avatar

project2_openclassroom's Issues

Les constructeurs par défaut

En java, quand tu ne précises pas de constructeur sur une classe, un "constructeur par défaut" est créé automatiquement qui ne prend pas de paramètre et qui ne fait rien. A partir du moment où tu ajoutes un constructeur, ce "constructeur par défaut" n'est plus ajouté.

Cela signifie que si le seul constructeur de ta classe est comme ceci :

public class CountDataFrequencies {

    public CountDataFrequencies (){}

Tu peux carrément le supprimer car il est inutile. Ca va alléger un peu ton code.

Utilisation de git

Comme discuté lors de la session, il est important de bien utiliser git.

Il faut que tes commits soit atomique, c'est à dire que, dans la mesure du possible, ils ne concernent qu'une seule chose. Par exemple : ajout de javadoc, correction d'un bug, ajout d'une feature... Le message de commit doit aussi montrer explicitement ce que contient le commit.

Tu peux aussi utiliser les branches pour travailler. Lorsque tu développes une nouvelle fonctionnalité tu peux faire une branche, effectuer plusieurs commits pour arriver à développer ta feature, puis merger sur master une fois que c'est terminé. Tu peux t'exercer avec la feature de tri qu'il te manque actuellement par exemple. Tu peux ouvrir des pull request si tu le souhaites pour voir ce que ça donne !

Utilisation de polymorphisme

Le quoi ? :p

Prenons un exemple tiré de ton projet :

    public HashMap<String, Integer> countFrequencies(ArrayList<String> list)  {
        HashMap<String, Integer> myHashMap = new HashMap<>();
        for (String i : list) {
            Integer j = myHashMap.get(i); //
            myHashMap.put(i, (j == null) ? 1 : j + 1);
        } 
        return myHashMap;
    }

Cette méthode peut poser problème car elle retourne un objet de type HashMap. Cela signifie que tous ceux qui t'appelent doivent utiliser cette classe. Si demain tu souhaites utiliser une LinkedHashMap (parce que pourquoi pas), toutes les méthodes qui utilisent cette méthode devront être modifiées.

Il existe une méthode simple pour solutionner ce problème : utiliser le polymorphisme. On peut en reparler pendant une session si tu le souhaites !

Formatage du code

Même ci ça n'est pas indispensable au bout fonctionnement de ton code, il y a des règles de formatage du code en Java. Si tu utilises un IDE (je crois que tu utilises IJ), tu peux lui demander de formater ton code tout seul. Par exemple :

package com.hemebiotech.analytics;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Sort ArrayList into HashMap
 * Key == String
 * Value == occurrence
 * Write the HashMap in "result.out" and show result in Terminal
 */
public class CountDataFrequencies {

    public CountDataFrequencies (){}


    public HashMap<String, Integer> countFrequencies(ArrayList<String> list)  {

        HashMap<String, Integer> myHashMap = new HashMap<>();



        for (String i : list) {

            Integer j = myHashMap.get(i); //
            myHashMap.put(i, (j == null) ? 1 : j + 1);

        } return myHashMap;





    }

} 

Devient :

package com.hemebiotech.analytics;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Sort ArrayList into HashMap
 * Key == String
 * Value == occurrence
 * Write the HashMap in "result.out" and show result in Terminal
 */
public class CountDataFrequencies {

    public CountDataFrequencies() {
    }
    
    public HashMap<String, Integer> countFrequencies(ArrayList<String> list) {

        HashMap<String, Integer> myHashMap = new HashMap<>();
        
        for (String i : list) {
            Integer j = myHashMap.get(i); //
            myHashMap.put(i, (j == null) ? 1 : j + 1);
        }
        
        return myHashMap;
    }

}

C'est plus lisible, et tous les dev java y sont habitués !

Dans IJ, tu fais Code -> Reformat Code (ou Ctrl+Alt+L par défaut) pour le faire.

N'hésite pas à fermer l'issue quand c'est bon ;)

Gestion des exceptions

En Java l est important de gérer correctement les exceptions. Par exemple :

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Ce code extrait de ta classe DataFileWriter pose problème. En effet, vu que tu catch l'exception, celui qui t'appelle ne sait pas qu'il y a eu un prolème et donc que le fichier n'a pas été créé correctement. Dans ce cas il est important de remonter l'exception à l'appelant.

Mettre en place un fichier gitignore

En général, on évite de versionner (aka mettre dans git) certains fichiers. Par exemple, les fichiers générés (.class) ne doivent pas se trouver dans git.

Pour cela, on utilise un fichier nommé .gitignore. Il serait bien de mettre ce fichier en place sur ton projet.

La doc du gitignore : https://git-scm.com/docs/gitignore

Ajouter de la Javadoc

La documentation est importante, presque indispensable. Elle est souvent délaissée, et ne devrait pas.

Il est nécessaire de faire de la javadoc pour, au minimum, tout ce qui est déclaré public.

N'oublie pas, la doc est importante pour les autres... mais aussi pour toi !

Nommage de variable

En général, il est préférable d'essayer de nommer les variable avec un nom clair. Le but est que le code soit le plus rapidement compréhensible. Il faut donc éviter d'avoir des variables nommées i ou j par exemple. Une des exceptions cependant : lorsque tu fais une boucle for type for(int i = 0; i < max; i++)

Exemple de code à modifier :

        for (String i : list) {

            Integer j = myHashMap.get(i); //
            myHashMap.put(i, (j == null) ? 1 : j + 1);

        }

Fermeture des classes Closeable

Dans ce code :

        try {

            FileWriter writer = new FileWriter(outputFilepath);


            for (Map.Entry<String, Integer> maps : map.entrySet()){

                writer.write(maps.getKey() + " : " + maps.getValue() + "\n");
                System.out.print(maps.getKey() + " : " + maps.getValue() + "\n" );}
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

Il y a un risque de ne pas fermer l'objet writer en cas d'exception. Il faut résoudre ce problème.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.