IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Passer des fonctions aux objets ?


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut Passer des fonctions aux objets ?
    Bonjour,

    Débutant en programmation, je suis parvenu à rédiger des fonctions dont j'ai besoin pour convertir des dates. Cependant, j'ai lu dans ce site que les objets sont souvent plus utiles, plus maniables et plus partageables. La question que je me pose est donc : comment (et pourquoi) transformer mes fonctions en objet ?
    Voici mes quatre fonctions que j'ai commenté pour expliquer ce qu'elles font.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    function edConvertNb2(n) {
        // ex. : 2 become 02, for a best format of dates.
        if (n < 9) {
            n = '0' + n;
        }
        return n;
    }
     
    function edConvertMonth(month) {
        // edConvert 3 first letters of the month in english to a number
        // delete problems of accentued caracters in french
        switch (month.match(/^./)[0]) {
        case 'f':
            month = "feb";
            break;
        case 'a':
            if (month.match(/^../) == "ao") {
                month = "aug";
            } else {
                month = "avr";
            }
            break;
        case 'd':
            month = "dec";
            break;
        }
     
        var mo = month;
     
        var m = ["jan", "feb", "mar", "avr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
        for (var i = 0; i < 12; i++) {
            if (m[i] == month) {
                var month = edConvertNb2(i + 1);
                break;
            };
        };
        if (month == mo) {
            var m = ["janv", "fevr", "mars", "avri", "mai", "juin", "juil", "août", "sept", "octo", "nove", "déce"];
            for (var i = 0; i < 12; i++) {
                var test = eval("/^" + m[i] + "/");
                if (mo.match(eval(test)) != null) {
                    var month = edConvertNb2(i + 1);
                    break;
                };
            };
        }
     
        return month;
    }
     
    function edConvertHms(time) {
        // edConvert time format, from h:m:s to hh:mm:ss
        if (typeof time == 'object') {
            time = time[0]
        };
        var h = eval(time.match(/^[0-9]*/)[0]);
        (h < 10) ? h = '0' + h : h = h;
        var m = eval(time.replace(/^[0-9]*\:|\:[0-9]*$/g, ''));
        (m < 10) ? m = '0' + m : m = m;
        var s = eval(time.match(/[0-9]*$/)[0]);
        (s < 10) ? s = '0' + s : s = s;
        time = h + ':' + m + ':' + s;
        return time;
    }
     
    function edConvertDate(date) {
        // edConvert a date at a Date() format to ISO 8601 format.
        if (date.match(/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}\:[0-9]{2}\:[0-9]{2}\+[0-9]{2}\:[0-9]{2}/)) {
            return date;
        } else {
            date = date.toLowerCase();
            if (date.match(/\(cet\)/)) {
                date = date.replace(/^....| gmt\+0100 \(cet\)/g, '');
                var year = date.match(/[0-9]{4}/);
                var month = edConvertMonth(date.match(/^[a-z]+/));
                var day = date.match(/[0-9]{2}/);
                var hms = date.match(/[0-9]{2}\:[0-9]{2}\:[0-9]{2}/);
                hms = edConvertHms(hms);
                date = year + '-' + month + '-' + day + 'T' + hms + '+01:00';
            } else if (date.match(/cet$/)) {
                var d = date.replace(/^[a-z]{3}\. | cet$/g, '');
                var year = d.match(/[0-9)]{4}/);
                var month = edConvertMonth(edConvertNb2(d.split(" ")[1].replace(/\./, '')));
                var day = d.match(/../);
                var hms = edConvertHms(d.match(/.{8}$/));
                date = year + '-' + month + '-' + day + 'T' + hms + '+01:00';
            } else if (date.match(/[0-9]{4}-[0-9]*-[0-9]\.[0-9]*:[0-9]/)) {
                var year = date.match(/^[0-9]{4}/);
                date = date.replace(/^...../, '');
                var month = edConvertNb2(date.match(/^[0-9]*/));
                date = date.replace(/^[0-9]*-/, '');
                var day = edConvertNb2(date.match(/^[0-9]*/)[0]);
                date = edConvertHms(date.replace(/^[0-9]*\./, ''));
                date = year + '-' + month + '-' + day + 'T' + date + '+01:00';
            } else {
                return "";
            }
        }
        return (date);
    }
     
    // EXEMPLES
    //print(edConvertDate('jeu. 08 janv. 2009 22:29:28 CET'));
    //print(edConvertDate('2010-1-2.13:26'));
    Merci de l'aide,
    Thibaud.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 119
    Points : 777
    Points
    777
    Par défaut
    pour une démo ou un micro site, ça ne sert pas à grand chose de passer aux objets
    mais dès que tu veux voir plus gros, c'est une bonne pratique que de le faire, autant en JS que dans d'autres langages
    - ça évite de polluer les variables globales (et donc d'avoir des conflits avec des scripts que tu ne maitrises pas comme les pubs, les librairies, d'autres codeurs qui arrivent sur le projet ...)
    - ça te permet d'organiser ton code, ce qui devient vital dès lors que tu n'es plus tout seul sur un tout petit site : moins de bugs, moins de maintenance

    par exemple comme toutes tes fonctions sont liés, on va les ranger ensemble, et il y a une fonction qui n'a pas besoin d'être exposée au monde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    var MONSITE = {}; // namespace global dans lequel tout le code du site va être rangé
    MONSITE.utils = {}; // sous namespace (pour ranger ..)
     
    // astuce JS pour avoir des variables privées
    function() { 
     
    MONSITE.utils.date = {
      convertDate: function(...) { ... },
      convertMonth: function(...) { ... },
      convertHms: function(...) { ... }
    }; // on n'oublie pas le ; final
     
    // ici, convertNb2 est privée : invisible et donc pas écrasable en dehors de MONSITE.utils.date
    var convertNb2 = function() ...;
     
    }(); // fin de l'astuce JS
    voilà, ton code est appellable avec MONSITE.utils.date.convertDate( ...) par exemple. Ca marche pareil mais c'est organisé

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 41
    Points
    41
    Par défaut
    Super, merci ! Du coup pour ranger le reste de mon code, ça va être du boulot...
    Où trouve-t-on ces conseils de bonnes pratiques communes ? Les discussions axées 'bonnes pratiques' ou architecture du code sont en général plus pointues (ajax) et donc moins évidentes pour un débutant. J'ai bien regardé la théorie avec uml, mais de là à mettre en application il y a une marche à franchir...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Propagation des droits aux objets enfants
    Par rabddoul dans le forum C#
    Réponses: 2
    Dernier message: 28/10/2008, 13h05
  2. Passer des parametres aux handler de signaux
    Par TheDrev dans le forum POSIX
    Réponses: 84
    Dernier message: 23/10/2008, 11h01
  3. Passer des valeurs aux éléments d'un contrôle
    Par alex_noox dans le forum Silverlight
    Réponses: 10
    Dernier message: 16/07/2008, 19h27
  4. Réponses: 1
    Dernier message: 06/09/2006, 18h11
  5. [String] passer des minuscules aux majuscules
    Par Lady_jade dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2005, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo