Salut salut,

j'ai une question toute bête, mais je me la pose quand même.

Vaut mieux avoir (js et php) une fonction et 15 conditions ? ou 15 fonctions ?
Modérateur
Salut,

Une fonction ou une méthode (poo) doit faire uniquement une seule chose !
Salut Jencal,
je reconnais volontiers me l'être également posée pour construire des commandes d'une pseudo-animation qui proposaient au visiteur (ô luxe délirant !) des contrôles dynamiques.

Sept contrôles distincts :

1. play/stop (conserver vitesse, sens de lecture, boucle ou pas)
2. en boucle ou pas (conserver tous les contrôles initiaux)
3. choisir parmi 4 vitesses de lecture (selon le sens de lecture, boucle ou pas, play ou stop)
4. en-avant/en-arrière (selon la vitesse de lecture, boucle ou pas, play ou stop)
5. avancer/reculer d'une image/40ms (puis conserver les contrôles initiaux ...)
6. avancer/reculer de 25 images/40ms (puis conserver les contrôle initiaux ...)
7. revenir-au-début/aller-à-la-fin (selon le sens de lecture, vitesse, boucle, play ou stop ...)

Tu devine aisément que nombreuses fonctions devaient s'intégrer les unes aux autres pour constituer des 'blocs fonctionnels' pouvant pour certains exprimer une finalité spécifique selon de multiples cas de figure ...

Je m'en suis finalement pas mal sorti (en réalité : parfaitement huuu !) dès lors que j'ai fait appel au css, par condition de class (d'un ou plusieurs id) et de changement de class : if, else if. Ce fut pour mon bon délire LA bonne trouvaille, mais je me dis aujourd'hui que ces conditions de class pourraient être absolument 'virtuelles' :
.a1{display:none}
.a2{display:none}


Ainsi pour te répondre : vraisemblablement tu seras amené à devoir constituer de mêmes 'blocs fonctionnels' et les conjuguer les uns aux autres pour obtenir deux voire trois ou encore quatre fonctions finales, qui elles seules seront soumises aux 'event handlers' du visiteur.
Modifié par pictural (30 Jul 2015 - 20:43)
hahaha

Ok !

et niuxe tu dis :
Une fonction ou une méthode (poo) doit faire uniquement une seule chose


mais une fonction PEUT faire beaucoup plus. c'est très gérable si c'est bien fait. perso j'ai préférer éclater cela sur plusieurs fonction (100 - 200 de lignes donc pas grand chose)

mais je me demande si je peux regrouper tout en un, et suivant un unique paramètre faire des actions différentes.

Merci de vos retours.
JENCAL a écrit :

(...) mais je me demande si je peux regrouper tout en un, et suivant un unique paramètre faire des actions différentes.


Je pense que non, sauf par random ET un setInterval du random !

Mais oui par exemple grâce à une seule astuce finale de condition de class ... par 'event handler' ou par le temps (année mois jour minute seconde milliseconde et le onload ET un 'refresh' de la page) ou par cookie précocement auto-destructeur qui engendre un autre cookie etc.
if(){}else if(){}
car par qui ou par quoi ton unique paramètre va-t-il varier c-a-d changer ? Peut-être par le déplacement c-a-d la geolocalisation d'un visteur itinérant ? Et pourquoi pas : recalculer ce que font les satellites : e=mc2 c-a-d que le temps d'une personne itinérante ne connaît pas le même temps qu'un satellite géostationnaire qui de toute façon se déplace en altitude plus vite que la personne itinérante parce que la Terre tourne sur elle-même !!! Si si cela est très sérieux pour pouvoir répondre à ta question (existentielle). Et si tu lançais simultanément deux geolocalisations, tu obtiendrais deux résultats différents, au micron (même dans 50 ans) ...

Ou, procéder à un calcul mathématique relativement complexe (mais simple à mettre en oeuvre ; par exemple le calcul de pi = 3,1415926535897932384626433832795...) qui considère qu'un nombre fini ne peut être obtenu, et ce faisant par l'approximation du 36è chiffre après la virgule impose au résultat une aberration (de pixel à exploiter) qui engendre un nouveau calcul ... L'aberration mathématique est aujourd'hui parfaitement reconnue, qui n'est pas aléatoire toutefois ! (Attention de ne pas provoquer une surdose de CPU de l'ordi, et le plantage de l'ordi : car là tu t'en voudrais des tonnes).

J'ai eu le loisir de constater que certains logiciels de traitement d'image procédent du phénomène d'aberration que je viens d'évoquer ; non pas qu'ils eussent été médiocres, bien au contraire : ils considèrent d'emblée ce phénomène mathématique de l'aberration, et donc proposent des solutions différentes, à reprendre AUTOMATIQUEMENT notre ouvrage mille fois, que l'oeil humain peut percevoir assez facilement ; cela tiendrait du fait d'une chose très complexe et multiple en somme : des paramètres pratiquement ingérables comme la capacité de mémoire de l'ordi +/- moins saturée à un moment donné et la température du micro-processeur et sa vitesse d'exécution et (...) Alors qui peut savoir à l'octet près lequel s'exprime prioritairement dans le temps ? Mais le résultat : différent à chaque fois qui exprime une forme d'aberration avérée comme un bras de levier plutôt merveilleux : si si ! les mathématiciens nous le diront. Et cela n'est pas du tout aléatoire, c'est-à-dire hasardeux ; car le hasard est totalement étranger aux mathématiques ; le hasard (mot d'origine arabe, alea en latin) n'est qu'une superstition inventée (culturellement et nécessairement) par l'homme.

C'est Jencal qui va être content, finalement.
Modifié par pictural (30 Jul 2015 - 21:44)
Modérateur
Une fonction peut faire de multiples choses, mais elle est centrée sur son action principale. Exemple, cette semaine en scss j'ai créé une mixin. C'est une sorte de fonction. Elle ne fait qu'une chose mais elle le fait bien !

Cette mixin me permet d'orienter/de placer l'objet (haut, droite, bas et gauche).
Il vaut mieux plusieurs fonctions qui font qu'une seule chose et très bien, qu'une grosse fonction usine à gaz.... Le code sera plus souple.

Tu as un autre bon exemple en poo sur un pattern mvc. Une méthode du controller peut faire une multitude de chose, mais c'est centrer sur une seule action. Ensuite dans ton model, tu vas surement traiter les données. Ex : beforeSave. Avant de sauver tes données par exemple, tu vas faire plusieurs choses (ex : update, delete) mais ta methode ne fera qu'une seule action : quoi faire avant de sauvegarder.

Là où je veux en venir, il ne faut pas que tu mélanges le fromage avec la confiture. Par exemple dans le beforeSave, tu ne vas pas traiter les données après la sauvegarde des données. Dans ce cas, tu vas créer un afterSave.

En exemple supplémentaire, il y a les commandes Unix / Unix like qui sont dans le même esprit. Par exemple, la commande "ls" qui permet de lister les fichiers dans un répertoire. Tu peux lui rajouter des paramètres et ça t'affichera la listes des fichiers différemments. Si dans ce répertoire, tu cherches un fichier précis tout en listant les fichiers, tu feras appel à une autre commande : "grep". Ces commandes font une seule chose mais elles le font très bien.

La série des exemples.... Regarde le manuel de php et regarde str_pad(). Elle ne fait qu'une seule chose ! Cette fonction, tu pourras par exemple la cumuler avec strlen() afin de connaitre par exemple le nombre de caractères au total.
Modifié par niuxe (30 Jul 2015 - 21:42)
niuxe a écrit :
(...) afin de connaitre par exemple le nombre de caractères au total.

Niuxe,
considérons une pianiste de clavier accomplie : elle saisit son texte tandis que tu lances simultanément deux analyses de caractères composés ; relance dix fois tes analyses tandis qu'elle sévit toujours et tu constateras que le résultat apparaîtrait différent au moins 1 x !

Cela la signifie que l'unité de temps d'un ordi (et le plus galopant) devra choisir entre un avant et un après l'unité de temps réel qui est incommensurable ...

Jencal en sera-t-il ravi ?
Après rien n'empêche de créer plusieurs fonctions qui vont faire UNE seule chose...
Et si tu t'aperçois par exemple que ces fonctions sont souvent rappelés dans un même ordre, tu n'auras qu'à faire une nouvelle fonction qui les lancera toutes !
Tu allieras le fait, que tes fonctions primaires pourront toutes être indépendantes (et plus maintenables et réutilisables dans d'autres projets -> intérêt premier de la POO), et en même temps tu auras ta "super" fonction qui permettra de factoriser ton code.
Moi je suis ravi,
je vous remercie de vos réponse bien propre et clair. presque philosophique Smiley lol

Je pense avoir une bonne idée du comment développer ma suite logique.

- le OOCSS je connaissais pas du tout ! merci.
- SolidSnake je suis d'accord avec toi, mais niuxe à raison, si on peut éviter de faire une usine à gaz c'est mieux.
- pictural tu m'a ravi. merci

cdt