Oh, j'adore les éditeurs de texte simples et rapides. Étant un utilisateur de Linux, j'ai vécu des années en compagnie de Kate et de KWrite. Avec quelques modifications et plugins, je pourrais les rendre vraiment intelligents. J'ai écrit des projets entiers en Perl, Bash et même quelques PHP et Java dans ces éditeurs. Je peux apprécier tout l'enthousiasme qui entoure Sublime Text ou TextMate, mais je ne pourrais pas vivre sans un IDE complet aujourd'hui..
J'ai observé qu'il y a deux types de programmeurs. Le premier type a tendance à utiliser des applications pouvant offrir une productivité de plus en plus grande en manipulation de code, mais au prix d’une courbe d’apprentissage abrupte et de difficultés d’utilisation. Ces programmeurs sont ceux qui préfèrent Vi (m) ou Emacs.
La deuxième catégorie de programmeurs a tendance à migrer d'éditeurs simples vers des IDE. C’est aussi naturel d’une évolution que la première catégorie. Cependant, cela conduit à un état d'esprit différent et à une vision différente du projet et du code. Je suis un programmeur de cette catégorie, donc dans cet article, nous allons parler de l'IDE que j'utilise actuellement: PhpStorm.
Les outils et les préférences des utilisateurs pour les applications sont tellement volatiles que j'écris rarement sur un framework ou une application spécifique. Cependant, si vous utilisez une application chaque jour pendant 10 à 14 heures, elle devient une partie de votre vision du code, de vos projets. Il devient l’autoroute pour votre flux de travail quotidien. Donc, il mérite d'être mentionné et présenté.
J'avais l'habitude de créer un éditeur de texte rapide lorsque je n'avais besoin que de coder un script ou un programme court. Mais je ne fais plus. Les ordinateurs et les IDE actuels sont tellement rapides qu'il y a peu de différence entre démarrer PhpStorm et écrire le code ou démarrer KWrite et écrire le code. L'application elle-même est presque aussi rapide qu'un éditeur et créer un projet, même pour un ou deux fichiers, n'est pas plus lent que de créer les mêmes créations dans votre éditeur..
OK, OK… Ce sont toutes des similitudes. Mais quelle est cette chose IDE tout à propos? IDE provient de l'environnement de développement intégré. Cette expression a deux parties clés: intégré et environnement de développement. La partie environnement de développement peut être considérée comme l'éditeur et les fonctionnalités spécifiques à la manipulation du code source: fonctionnalités d'écriture de code, mise en surbrillance, fonctions de modification automatique et complète telles que la sélection multiple et l'édition multiple, des outils de refactoring, etc. La partie intégration peut être vue comme une intégration entre l'environnement de développement décrit ci-dessus et divers outils externes, frameworks de test, système de gestion de version de documents, débogueurs et outils de création d'interface utilisateur..
La principale caractéristique d'un IDE est sa compréhension du code que vous écrivez. Un IDE n’a pas seulement une liste de commandes que vous pouvez utiliser dans votre langue préférée, comme PHP. Il a des algorithmes complexes pour comprendre votre code. PhpStorm ne vous proposera pas une commande ou une expression qui serait syntaxiquement incorrecte. Il sait, par exemple, que vous ne pouvez pas écrire "print ('Hello World');
"directement à l'intérieur d'une classe, sans la mettre dans une fonction. Donc, cela ne suggère pas le"impression()
"commande quand il ne peut pas être utilisé. Mais ce n'est que la partie visible de l'iceberg. Voyons quelques exemples plus concrets.
Oui. Si vous avez lu les deux premières parties de la série Refactoring Legacy Code, The Golden Master et Magic Strings & Constants, vous avez peut-être remarqué qu'il y avait des captures d'écran dans le tutoriel avec un IDE. Voilà à quoi ressemble mon PhpStorm. Et voici comment PhpStorm m'aide à vous apprendre à programmer.
Ce qui est essentiel. La plupart des éditeurs simples peuvent également mettre en évidence le code de base, mais un IDE est une histoire différente. Ici, vous pouvez avoir différentes configurations de surbrillance pour différentes langues telles que PHP, HTML, CSS, etc. Chacun avec ses propres règles. Par exemple, j'aime les chaînes vertes en CSS et orange en PHP et HTML.
Sur la gauche, vous pouvez voir tous les types de fichiers pris en charge et les langues (certains peuvent être ajoutés par des plugins), au centre, vous pouvez voir les différents éléments de langage PHP pouvant être configurés séparément, en haut à droite, les options pour chaque élément. peut avoir, et au bas il y a un aperçu.
Lorsque nous étions à la recherche de chaînes magiques lors de notre session de refactoring, nous avons pu facilement les repérer en trouvant simplement des éléments orange à l'écran. Il en va de même pour les constantes et les nombres magiques. Quand ceux-ci ont été recherchés, la couleur bleue était notre ami.
La structure et la mise en page sont essentielles pour comprendre le code source, et une coloration et une mise en évidence appropriées sont essentielles à cet égard..
J'ai utilisé de nombreux IDE et éditeurs au cours de ma carrière. Celui que j'ai vraiment aimé et apprécié était NetBeans. Mais après environ cinq ans d'utilisation exclusive de NetBeans, j'ai dû abandonner. Il y a quelque chose que PhpStorm peut offrir, qu'aucun autre éditeur ou IDE pour PHP ne peut faire. C’est un ensemble d’outils de refactoring dont nous avons tant besoin dans notre travail quotidien..
La mise en surbrillance, l'indentation, la gestion de projet, les modèles, les macros sont autant de fonctionnalités que l'on trouve dans la plupart des éditeurs. Les intégrations avec les environnements de test et les débogueurs font par définition partie de tout environnement de développement intégré. Cependant, les outils de refactoring intelligents et complexes sont une histoire totalement différente.
En tant que programmeurs, nous passons la moitié de notre temps à lire du code, à environ 40% à modifier et à refactoriser le code existant et, si nous sommes chanceux, vraiment chanceux, à 10% à écrire du code totalement nouveau. Par conséquent, disposer de fonctionnalités de refactoring efficaces, rapides et fiables nous aidera à concentrer nos efforts davantage sur ce qu’il faut refactoriser et moins sur la façon de le faire. Nous gagnerons également du temps, mais j'estime que le gain de moins d'effort est beaucoup plus important. Lorsque vous pouvez abandonner la réflexion sur le processus dans votre IDE et ne penser qu'à la logique, aux algorithmes, aux dépendances, aux principes SOLID, il s'agit d'un gain de productivité qu'il convient de prendre en compte.
C'est pourquoi j'ai quitté le NetBeans gratuit et à source ouverte pour le PhpStorm payant. Il existe, dans PhpStorm, un ensemble d’outils de refactoring qui le rend spécial, le rend intéressant à payer pour.
L'une des modifications les plus simples avec lesquelles nous avons déjà travaillé dans Magic Strings & Constants a été Introduce Variable locale, également connue sous le nom de "Extraction de variable". Voici un rappel des étapes à suivre pour utiliser ce refactoring:
Ces étapes sont faciles à suivre si nous avons une seule valeur à transformer en une variable, mais qu’en est-il de l’étape deux? Comment trouvez-vous de manière fiable toutes les occurrences de cette valeur? Vous devez analyser votre code et prendre des décisions éclairées sur ce qui doit être remplacé ou non. Voici un exemple.
class SomeClass function printAPairOfPlayers () echo "Les joueurs sont:"; echo "Nom du joueur:". $ this-> getRandomPlayerName (); echo "Nom du joueur:". $ this-> getRandomPlayerName (); function printOnePlayer () echo "Nom du joueur:". $ this-> getRandomPlayerName (); function getRandomPlayerName () // Une certaine logique pour trouver les noms de joueurs // return $ playerName;
Dans printAPairOfPlayers ()
on peut observer que la ficelle "Nom de joueur:
"répète deux fois. Si nous voulons extraire cette chaîne dans une variable locale, une variable de la fonction, nous devrons remplacer les deux occurrences dans printAPairOfPlayers ()
mais pas celui de printOnePlayer ()
. Si printOnePlayer ()
100 lignes plus bas, nous pourrions même ne pas nous rendre compte qu’il existe une autre duplication de la chaîne dans une autre méthode.
Nous voulons donc une variable locale. Nous créons d'abord la variable, exécutons les tests, puis cherchons la chaîne et la trouvons dans la seconde écho
déclarations. On le remplace, on fait les tests, on regarde à nouveau, on le trouve dans le dernier écho
déclaration, nous le remplaçons, nous exécutons les tests. Nous regardons encore, nous arrivons à la fin de la méthode. Nous décidons d’en finir avec notre refactoring de variable locale d’extrait. C'est un processus cognitif assez exigeant, surtout avec un code laid et mal compris..
Ne serait-il pas utile d'appuyer sur un seul raccourci ou de sélectionner une option dans un menu contextuel pour que tout cela soit effectué par l'EDI? Ce serait génial, et PhpStorm est tout à fait capable de le faire pour vous.
Dans le code ci-dessus, placez simplement votre curseur dans le "Nom de joueur: "string n'importe où et Clic-droit.
Après avoir sélectionné "Extraire la variable… ", PhpStorm analysera votre code et recherchera différents morceaux de code que vous voudrez peut-être extraire. Il proposera deux possibilités pour notre cas..
Ce n'est pas seulement une fonctionnalité intéressante, mais très utile. Il y a tellement de cas où la duplication peut se produire en dehors de votre champ de vision. Quand une extraction est proposée, l'analyse est faite par PhpStorm à travers tout le code, pas seulement les quelques lignes que vous pouvez voir à l'écran. Dans ce cas, les options sont évidentes. Pour notre exercice, sélectionnons uniquement la partie de chaîne, sans concaténation.Maintenant que le morceau de code que vous voulez extraire a été identifié, l'étape suivante consiste à le nommer. "playerHeadersChaîne
"Cela semble être un nom de variable sensible. Vous n'avez pas à mettre"$
"devant le nom dans le champ de saisie. PhpStorm le mettra automatiquement dans le code. Un autre aspect important est qu’il existe une case à cocher. PhpStorm a trouvé toutes les occurrences de notre variable. Nous avons choisi d’extraire une variable locale afin PhpStorm savait qu'il ne cherchait que dans la méthode en cours et qu'il n'avait trouvé que deux occurrences. La même chaîne dans la méthode printOnePlayer (),
n'a pas été compté, ni proposé, et il ne sera pas remplacé. Cela conduirait à un code incorrect, et PhpStorm est suffisamment intelligent pour ne pas écrire de code invalide pour vous..
Un autre avantage de PhpStorm est que vous n'avez pas à exécuter vos tests souvent. Lorsque nous avons procédé à une refactorisation manuelle, nous effectuons nos tests après chaque étape. Si nous faisions une faute de frappe ou remplaçions quelque chose que nous pensions être la même chose, mais en réalité ce n’était pas le cas, nous avions besoin d’un filet de sécurité pour nous le dire rapidement. Cependant, PhpStorm ne remplacera pas quelque chose qui n’est pas logiquement correct dans le contexte. Vous pourriez être surpris qu'un morceau de code que vous espériez également extraire ne le soit pas, mais au moins, vous pouvez être sûr que le code obtenu sera correct. De plus, nous avons moins d'étapes. Manuellement, nous ne faisons qu'un seul pas. Après cette étape unique, nous devons exécuter nos tests une seule fois..
Peu importe comment vous le regardez, il est plus facile, plus rapide et beaucoup moins sujet aux erreurs que tout autre moyen de refactoriser.
Pour extraire notre chaîne dans une variable de classe (également appelée champ de classe), nous pouvons utiliser le "Extraire le champ"Option de refactoring dans le même menu que ci-dessus. On nous demandera d’identifier le morceau de code que nous devons extraire, et on nous présentera une forme légèrement différente.
Outre son nom, nous avons maintenant trois occurrences trouvées. PhpStorm savait que nous voulions une variable de classe et qu'il était capable d'identifier la même chaîne si nécessaire. Nous avons également des options pour initialiser la variable à divers endroits et définir sa visibilité. En sélectionnant les options comme dans l'image, le code résultant sera comme ci-dessous.
Bien sûr, si vous voulez que ce soit public, ou initialisé dans le constructeur, il vous suffit de sélectionner les options appropriées et de laisser PhpStorm faire le travail à votre place..
Lorsque vous extrayez une variable, vous souhaitez l’initialiser le plus près possible de sa première utilisation. Dans la plupart des cas, c'est simple, surtout s'il y a une utilisation unique de la variable. Mais qu'en est-il des cas plus complexes? Revenons sur l'une de nos extractions variables de Magic Strings & Constants.
dans le rouleau()
méthode, à la ligne 73 - celle sélectionnée - il y a un numéro "11
". C’est un nombre magique que nous venons d’identifier et que nous voulons extraire.
Si nous faisons notre méthode d'extraction à la main, nous devons suivre ces étapes:
Maintenant, c'est compliqué pour un humain. Et c'est sujet aux erreurs. Nous supposons que vous avez des tests qui peuvent vous aider, mais que se passe-t-il si vous travaillez sur un code obscur et inexplicable? PhpStorm comprendra le contexte de votre code. Il va correctement extraire la variable pour toutes les occurrences et la mettre exactement où elle devrait être.
Ce que nous avons présenté ci-dessus à propos des outils de refactoring n’est que la partie visible de l’iceberg. Extraire des variables est probablement la refactorisation la plus simple et la plus facile que vous puissiez faire. Nous n’avons pas encore utilisé la méthode d’extraction, ni la sous-classe d’extraits, ni même certains renommage plus complexes dans nos cours de refactorisation, mais nous le ferons. Nous allons apprendre à les faire à la main, mais je vous encouragerai à utiliser un IDE intelligent pour faire le travail à votre place..
PhpStorm est très doué pour renommer des variables ou des méthodes, même sur des centaines de classes. Imaginez combien il serait difficile de changer le nom d'une méthode publique utilisée dans 100 classes différentes de votre projet. PhpStorm peut en faire un travail de cinq minutes au lieu de deux heures. Il peut trouver et changer le nom de toutes les méthodes et il vous suffira de vérifier les correspondances manquantes avant de lui dire d'agir..
Oui, oui… Vous aurez besoin de vérifier certaines occurrences trouvées car PHP est un langage typé dynamiquement et dans certains cas, il est impossible que PhpStorm, ou tout autre algorithme ou programme de l'EDI, puisse savoir quel type d'objet est. utilisé pour cet appel de méthode spécifique. Imaginez, vous avez deux classes totalement différentes. Sur chacun d’eux, vous avez une méthode publique appelée "Trouver tout()
". Ceci est très commun et correct.
Maintenant, 50 classes utilisent votre première classe et 50 autres utilisent la seconde. Si vous avez utilisé les interfaces appropriées et si possible des indications de type, PhpStorm vous proposera les classes appropriées à modifier. Mais si vous n’avez pas spécifié le type que vous utilisez ou si vous n’avez utilisé aucune interface implémentée par votre classe avec le Trouver tout()
méthode, il n’ya aucun moyen de dire automatiquement laquelle de vos deux classes, les deux ayant un Trouver tout()
méthode, sera utilisé. C'est l'essence même du typage dynamique de PHP. Bien que ce soit un avantage dans certains cas, c'est un désavantage lorsque nous devons refactoriser de la sorte. Lorsque cela se produit, la seule chose que l’on puisse faire est qu’un humain évalue la nécessité du changement..
Avec tout cela, même s'il y a d'autres refactorings présents dans PhpStorm, c'est déjà le meilleur IDE avec juste des refactorings. Renommer, extraire et insérer des variables, extraire et mettre des méthodes en ligne sont les refactorisations les plus fréquemment utilisées chaque jour. Si ceux-ci fonctionnent bien, nous avons un IDE gagnant.
Mais PhpStorm ne s'arrête pas là. Il dispose de nombreux autres outils de refactoring qui vous permettent de vous sentir bien dans des situations difficiles. C'est vraiment ça "cerise sur le dessus" sentiment.
Vous faites TDD, non? Si vous ne le faites pas, vous devriez. Le test est aussi essentiel pour la programmation que l’écriture du code de production lui-même. Je ne pouvais pas imaginer ma vie sans TDD. J'y suis tellement habitué ces dernières années que penser au code sans penser aux tests ne semble ni naturel ni difficile.
Avec les tests, vos processus et outils doivent être aussi bons que le code de production lui-même. PhpStorm a une excellente intégration avec PHPUnit. C’est le seul IDE PHP que je connaisse qui soit directement lié au framework PHPUnit, qu’il soit étendu et utilisé pour rassembler toutes les informations à présenter. Cela lui donne une connexion beaucoup plus intime avec PHPUnit, une meilleure sortie pour l'utilisateur et des vitesses d'exécution de test beaucoup plus élevées.
D'autres IDE ont tendance à simplement utiliser l'exécutable PHPUnit, à écrire la sortie dans un fichier XML et à interpréter les résultats pour vous la montrer. Voici comment fonctionne NetBeans. Cette approche offre une plus grande flexibilité à l'utilisateur, si vous souhaitez pirater le système et le convaincre d'exécuter vos tests de manière inhabituelle (par exemple via telnet ou SSH). Mais cela a aussi un énorme inconvénient. Les choses deviennent lentes. Tout d'abord, un processus shell doit être créé. "exec ()
"est toujours un consommateur de temps important. Ensuite, le résultat doit être écrit dans un fichier, éventuellement sur une machine distante..
Nous savons tous que le système de fichiers est lent, très lent. Les SSD le rendent un peu mieux, mais ils sont encore à des années-lumière de la vitesse de la RAM. Ensuite, si nous exécutons nos tests à distance, nous devons copier ce fichier sur notre machine. Ainsi, non seulement nous devons accéder au système de fichiers une fois, nous devons également ajouter à ce délai, le coût de la communication réseau ainsi que son écriture dans un fichier local. Ensuite, le fichier doit être relu, afin qu'il puisse enfin être montré à l'utilisateur.
Bien que ce soit une solution super personnalisable et flexible, cela prend juste du temps. Trop de temps quand on pense aux tests unitaires et aux tests millisecondes. Et les tests unitaires dont l’exécution prend plus de cinq millisecondes ne sont plus des tests unitaires..
PhpStorm résout, ou du moins, réduit la surcharge en utilisant PHPUnit en interne et en lui demandant de générer le résultat de la manière préférée par PhpStorm. Cela réduit la flexibilité. Vous ne pouvez pas pirater pour tester en dehors de ses limites. Mais cela augmente beaucoup la vitesse. Pas plus exec
, plus de fichiers écrits sur des systèmes de fichiers lents. L'exécution à distance peut ajouter le prix de la communication réseau, mais nous ne pouvons pas l'éliminer de toute façon. Un autre avantage intéressant est que l'utilisation directe de PHPUnit permet de présenter de manière plus organisée des informations plus détaillées sur les tests ayant échoué. Nous gagnons donc en rapidité, en détails et en clarté au détriment de la flexibilité.
Étant habitué à NetBeans, j’ai eu du mal au début à accepter cette inflexibilité, mais en fin de journée, même si je dois parfois exécuter un script externe pour tester mon code sur des machines distantes, les gains de la meilleure intégration de PHPUnit sont en vigueur.
Comme la plupart des IDE, Phpstorm est également orienté projet. Généralement, dans un projet, vous pouvez avoir des fichiers sources et des tests. Comme PhpStorm fonctionne, vous devez spécifier un seul dossier en tant que dossier pour les tests. Je trouve assez utile d'avoir la même structure de répertoires entre le code source et le code de test. Cela aide également PhpStorm à trouver plus facilement vos tests et vous permet de basculer entre le code de production et les tests avec un seul raccourci..
Mais ce n'est pas tout. En ce qui concerne la recherche et l’ouverture de fichiers, PhpStorm a une caractéristique unique: Aller à Tout (ou Rechercher tout) - J'aime absolument celui-ci. Tout d’abord, son raccourci clavier par défaut de Maj + Maj (double shift) est si naturel à utiliser, d'autre part, c'est la fonction de navigation la plus utile. Il n’a été introduit que récemment et, auparavant, nous avions des zones de navigation et des raccourcis distincts pour ouvrir le fichier par nom, ouvrir le fichier par nom de classe, fichier ouvert contenant le symbole (nom de variable ou de méthode), etc. Maintenant, je peux doubler et commencer à taper. C'est incroyable et rapide.
Il y a tellement de fonctionnalités intéressantes dans les IDE d'aujourd'hui que nous pourrions continuer avec cette histoire pendant trois autres tutoriels sans toujours tout raconter. Mais nous devons nous arrêter à un moment donné. En tant que grand finisseur de notre mini-marathon de fonctionnalités PHPUnit dans PhpStorm, voici quelques-unes des dernières que nos collègues de Syneto et moi-même apprécions:
hg
"commande probablement deux fois ou plus. Il juste travaux.OK, assez parlé. Je vais maintenant vous laisser partir, télécharger et essayer PhpStorm vous-même. S'amuser.