: En fait il y a quelque chose que je ne comprends pas du coup.. Normalement return permet de retourner une valeur du coup si je dois retourner une
valeur de ma méthode je ne peux pas faire 2 return dans une seule méthode si ?
Bien sûr que non que tu ne peux pas avoir deux return, il faut choisir, soit return this, soit return autre chose.
L'idiome du chaînage n'est pas adapté à tous les usages. Ca marche bien quand tu effectues plusieurs opérations à la suite qui modifient l'état interne de l'objet; par contre si tu dois retourner une autre information alors tu es obligé de casser la chaîne.
Dit plus simple, ça peut se résumer grosso modo en: ça va pour les setters, mais pas pour les getters.
La variante que propose Victor est courante pour la construction de String ou de tableaux, l'exemple le plus célèbre est sans doute le StringBuffer/StringBuilder de Java (où l'appel qui marque la fin de la chaîne de concaténations est toString).
Est ce qu'il est possible de spécifier uniquement des méthodes après d'autres méthodes ? Exemple, je veux que method1 soit utilisable uniquement après
method2 et que la method2 soit "method3" soit utilisable après "method1" et "method2" ?
De base, non, ce n'est pas possible. Le plus simple c'est de lancer une exception si method2 est utilisée avant method1, pour que l'utilisateur de ton objet se rende compte de son erreur de logique.
Bien sûr, tu pourrais tricher en retournant un objet diminué, i.e. un objet qui n'a pas de method2, et au moment où method1 est appelé, retourner le vrai objet qui contient method2.
OU encors, assigner la propriété method2 à l'intérieur de method1. Mais c'est du travail pour pas grand chose, et côté utilisateur de l'objet, au cas où method2 est appelée avant method1, c'est toujours mieux de se ramasser une exception explicative qui sera (ou devrait être) explicite, plutôt qu'une exception générique genre ReferenceError ou TypeError parce qu'il a tenté d'appeler undefined.