<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Blog de Nukleo &#187; Netbeans</title>
	<atom:link href="https://www.nukleo.fr/blog/tag/netbeans/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.nukleo.fr/blog</link>
	<description>Un blog de webdesign et développement</description>
	<lastBuildDate>Tue, 04 Mar 2014 15:50:19 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>L&#8217;importance de commenter son code</title>
		<link>https://www.nukleo.fr/blog/importance-de-commenter-son-code/</link>
		<comments>https://www.nukleo.fr/blog/importance-de-commenter-son-code/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 06:29:16 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=30</guid>
		<description><![CDATA[On ne le dira jamais assez, il est important &#8211; voir crucial &#8211; de correctement commenter le code qu&#8217;on écrit. Dans certains cas le bénéfice sera immédiat, dans tous les cas c&#8217;est sur le moyen/long terme que le bénéfice se fera ressentir… Pourquoi commenter ? Les intérêts sont multiples et variés allant du simple &#171;&#160;j&#8217;en<br /><a href="https://www.nukleo.fr/blog/importance-de-commenter-son-code/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>On ne le dira jamais assez, il est important &#8211; voir crucial &#8211; de correctement commenter le code qu&rsquo;on écrit. Dans certains cas le bénéfice sera immédiat, dans tous les cas c&rsquo;est sur le moyen/long terme que le bénéfice se fera ressentir…<span id="more-30"></span></p>
<h3>Pourquoi commenter ?</h3>
<p>Les intérêts sont multiples et variés allant du simple &laquo;&nbsp;j&rsquo;en suis là&nbsp;&raquo; à la fin de la journée jusqu&rsquo;à la documentation d&rsquo;une application.</p>
<h4>Commenter pour comprendre ce qu&rsquo;on a fait</h4>
<p>Lors d&rsquo;une session de développement on est souvent confronté à un problème nouveau à gérer et la solution n&rsquo;est pas forcément toujours évidente. On fait quelques recherches, on trouve une solution ou l&rsquo;inspiration pour la créer et on l&rsquo;intègre. Tout fonctionne, c&rsquo;est parfait, on est content.<br />
3 mois plus tard on doit revenir dessus car il faut améliorer la fonction en y intégrant de nouveaux paramètres ou s&rsquo;en resservir pour un autre projet, et là c&rsquo;est le drame : on ne comprend plus comment ça fonctionne, voire même à quoi sert ladite fonction… Les 30 secondes nécessaires à écrire les quelques commentaires salutaires nous auraient permises d&rsquo;éviter une décapilarisation crânienne subite et la perte de pas mal de temps.</p>
<h4>Commenter pour expliquer aux autres</h4>
<p>On peut travailler en équipe sur un projet et d&rsquo;autres développeurs risquent d&rsquo;avoir à intervenir sur votre code pendant que vous faites autre chose. Autre cas de figure : vous développez seul un projet puis un peu plus tard c&rsquo;est un autre développeur qui le reprend ou qui vous rejoin dessus. Vous pouvez également être en train de développer un script/module/librairie/application destiné(e) à être partagé(e) avec d&rsquo;autres (dans le cadre d&rsquo;open source par exemple).<br />
Encore une fois, le temps passé à commenter le code évitera aux autres d&rsquo;être complètement perdus à la lecture de votre chef d&rsquo;oeuvre. Ceci est d&rsquo;autant plus vrai que chaque développeur a son style et sa manière de coder et qui, bien souvent, n&rsquo;est limpide que pour lui-même…</p>
<h4>Commenter pour se faciliter la tâche</h4>
<p>Les IDE de qualité sont capable de lire les commentaires <a href="http://en.wikipedia.org/wiki/PHPDoc">DocBlock</a> et de s&rsquo;en servir pour afficher, lors de la saisie, les informations d&rsquo;utilisation que vous avez pris le soin d&rsquo;entrer. Dans le cadre du développement d&rsquo;une application répartie en plusieurs fichiers (souvent le cas en POO ou en utilisant un framework), les commentaires révèlent toute leur puissance en vous évitant de replonger dans le code d&rsquo;une fonction pour retrouver quels arguments lui passer ou encore ce qu&rsquo;elle retourne.<br />
Ce type de commentaire peut aussi être utilisé pour l&rsquo;écriture automatique de la documentation d&rsquo;une API, par exemple, à l&rsquo;aide d&rsquo;un générateur de documentation tel que <a href="http://www.phpdoc.org/">PHPdocumentor</a> ou <a href="http://en.wikipedia.org/wiki/Doxygen">Doxygen</a></p>
<h3>Les différents types de commentaires</h3>
<p>Il existe 3 types de commentaires : ligne simple, multiligne et DocBlock. Les 2 premiers ne servent qu&rsquo;à indiquer des informations courtes au sein même du code alors que le DocBlock permettra aux IDE et générateurs de documentation d&rsquo;en faire bien plus.</p>
<p>Les commentaires simples et multilignes se présentent de la manière suivante :</p>
<pre class="brush: php; title: ; notranslate">
// je suis un commentaire sur une seule ligne
/* je suis
un commentaire
sur plusieurs lignes */
</pre>
<p>Le commentaire DocBlock se présente ainsi :</p>
<pre class="brush: php; title: ; notranslate">
/**
 * Cette fonction sert à faire ceci...
 * un commentaire
 * sur plusieurs lignes
 *
 * @param string $text Description du paramètre
 * @param int $id Description du paramètre
 * @return bool Description de ce que retourne (ou non) la fonction
*/
</pre>
<p>Notez l&rsquo;utilisation de certains mots clés (@param, @return) dont vous trouverez <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html">la liste complète ici</a>. C&rsquo;est précisément ces mots-clés qui permettrons à l&rsquo;IDE et au générateur de documentation de travailler.</p>
<h4>Un exemple d&rsquo;utilisation</h4>
<p>Voici un petit exemple d&rsquo;utilisation des 3 types de commentaires dans un modèle du framework <a href="http://codeigniter.com/">CodeIgniter</a> :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

class Blog_model extends CI_Model {

	// constructeur
	function __construct() {
		parent::__construct();
	}

	/**
	 * Recupération des derniers posts de wordpress
	 *
	 * @param	int $count	Le nombre de posts que l'on veut afficher (optionnel)
	 * @return	object		Les posts à afficher
	 */
	function get_latest_posts($count = 5) {
		// requete mysql à l'aide d'ActiveRecord
		$this-&gt;db-&gt;select('post_title, post_name');
		$this-&gt;db-&gt;where('post_status', 'publish');
		$this-&gt;db-&gt;where('post_type', 'post');
		$this-&gt;db-&gt;limit($count);
		$this-&gt;db-&gt;order_by('ID', 'desc');

		$query = $this-&gt;db-&gt;get('wp_posts');
		
		/* on récupère les posts
		sous forme d'objet */
		$data = $query-&gt;result();

		//var_dump($data); exit; // test des résultats obtenus
		
		// renvoi des résultats au controlleur
		return $data;
	}

}
</pre>
<p>J&rsquo;ai eu la main un peu lourde ici mais en même temps il vaut mieux trop de commentaires que pas assez !</p>
<h3>Conclusion</h3>
<p>Il y a peu de temps j&rsquo;ai eu l&rsquo;occasion d&rsquo;intervenir sur un gros projet de CRM/ERP qui était quasiment abouti et dont le développeur a du se retirer. Malheureusement il n&rsquo;avait pas jugé utile de commenter son code et la conséquence directe à été une grosse perte de temps pour moi (le temps de comprendre le fonctionnement) et une grosse perte de temps et d&rsquo;argent pour le client car il a du supporter le coût de &laquo;&nbsp;temps de compréhension&nbsp;&raquo; du code existant en plus du temps de développement nécessaire au résultat demandé&#8230;<br />
Pour faire bref, <strong>passez un peu de temps à commenter votre code</strong> &#8211; votre client, les utilisateurs de votre code et vous-même ne vous remercieront jamais assez !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/importance-de-commenter-son-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autocomplete (remplissage auto) de CodeIgniter dans Netbeans</title>
		<link>https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/</link>
		<comments>https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 08:00:42 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Netbeans]]></category>

		<guid isPermaLink="false">http://www.nukleo.fr/blog/?p=16</guid>
		<description><![CDATA[L&#8217;éditeur de code Netbeans implémente par défaut le remplissage automatique (autocomplete) pour les frameworks Zend et Symfony depuis peu. Pour les autres, et notamment CodeIgniter, niet. Qu&#8217;à cela ne tienne voici comment ajouter l&#8217;autocomplete pour CodeIgniter ! J&#8217;ai trouvé cette astuce, en cherchant un peu partout une solution à ce problème, sur ce blog. Je<br /><a href="https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/">Lire l'article</a>]]></description>
			<content:encoded><![CDATA[<p>L&rsquo;éditeur de code <a href="http://netbeans.org/" target="_blank">Netbeans</a> implémente par défaut le remplissage automatique (autocomplete) pour les frameworks Zend et Symfony depuis peu. Pour les autres, et notamment CodeIgniter, niet. Qu&rsquo;à cela ne tienne voici comment ajouter l&rsquo;autocomplete pour CodeIgniter !<br />
<span id="more-16"></span></p>
<p>J&rsquo;ai trouvé cette astuce, en cherchant un peu partout une solution à ce problème, sur <a href="http://rhasan.com/blog/2009/09/codeigniter-auto-complete-with-netbeans/" target="_blank">ce blog</a>. Je me suis simplement permis de traduire en partie sa mise en place.</p>
<h3>Autocomplete de base</h3>
<p>Pour accéder à l&rsquo;autocomplete des <strong>fonctions de base de CodeIgniter,</strong> il suffit simplement de créer un fichier &laquo;&nbsp;nom_du_fichier.php&nbsp;&raquo; dans le dossier de projet de Netbeans <strong>(nbproject)</strong> de votre application et d&rsquo;y coller le contenu ci-dessous. Après cela, relancez Netbeans. Pour ce tutorial nous supposerons que ce fichier sera nommé &laquo;&nbsp;ci_autocomplete.php&nbsp;&raquo;.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

/**
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
* @property CI_Benchmark $benchmark
* @property CI_Calendar $calendar
* @property CI_Cart $cart
* @property CI_Config $config
* @property CI_Controller $controller
* @property CI_Email $email
* @property CI_Encrypt $encrypt
* @property CI_Exceptions $exceptions
* @property CI_Form_validation $form_validation
* @property CI_Ftp $ftp
* @property CI_Hooks $hooks
* @property CI_Image_lib $image_lib
* @property CI_Input $input
* @property CI_Language $language
* @property CI_Loader $load
* @property CI_Log $log
* @property CI_Model $model
* @property CI_Output $output
* @property CI_Pagination $pagination
* @property CI_Parser $parser
* @property CI_Profiler $profiler
* @property CI_Router $router
* @property CI_Session $session
* @property CI_Sha1 $sha1
* @property CI_Table $table
* @property CI_Trackback $trackback
* @property CI_Typography $typography
* @property CI_Unit_test $unit_test
* @property CI_Upload $upload
* @property CI_URI $uri
* @property CI_User_agent $user_agent
* @property CI_Validation $validation
* @property CI_Xmlrpc $xmlrpc
* @property CI_Xmlrpcs $xmlrpcs
* @property CI_Zip $zip
*/

class Controller {};

/**
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
* @property CI_Config $config
* @property CI_Loader $load
* @property CI_Session $session
*/

class Model {};

?&gt;
</pre>
<h3>Comment ça fonctionne ?</h3>
<p>Au lancement de Netbeans, celui-ci lit les fichiers contenus dans le répertoire <strong>nbproject</strong> (notamment project.xml et project.properties) afin de préparer l&rsquo;environnement de développement.<br />
En &laquo;&nbsp;lisant&nbsp;&raquo; le fichier <strong>ci_autocomplete.php</strong> il repère les <strong>propriétés définies dans le <a href="http://en.wikipedia.org/wiki/PHPDoc" target="_blank" title="Explication des commentaires DocBlock sur WikiPedia (anglais)">DocBlock</a></strong> pour les classes Controller et Model.<br />
C&rsquo;est cela qui lui permettra de fournir l&rsquo;autocomplete lors de l&rsquo;édition d&rsquo;un controlleur ou d&rsquo;un modèle. En parcourant le contenu du fichier on remarquera que l&rsquo;on liste simplement les classes mises à disposition par CodeIgniter.</p>
<p><img src="http://www.nukleo.fr/blog/wp-content/uploads/2010/12/CI-netbeans-autocomplete.png" alt="Remplissage auto de CodeIgniter dans Netbeans" width="620" height="369" class="alignnone size-full wp-image-18" title="autocomplete des fonctions de base de CodeIgniter" /></p>
<h3>Ajoutez vos propres classes</h3>
<p>Le but de la manoeuvre étant aussi d&rsquo;accéder à l&rsquo;autocomplete sur vos modèles et librairies, il suffit d&rsquo;éditer le fichier <strong>ci_autocomplete.php</strong> que vous venez de créer pour les y incorporer :</p>
<pre class="brush: php; title: ; notranslate">* @property Nom_de_votre_classe $nom_de_votre_objet</pre>
<p>Par exemple, en ajoutant</p>
<pre class="brush: php; title: ; notranslate">* @property Portfolio_model $portfolio_model</pre>
<p>dans le DocBlock Controller, vous aurez accès aux méthodes du modèle Portfolio_model lors de l&rsquo;édition d&rsquo;un controlleur :</p>
<p><img src="http://www.nukleo.fr/blog/wp-content/uploads/2011/01/CI-netbeans-autocomplete2.png" alt="Autocomplete de CodeIgniter dans Netbeans" title="Autocomplete sur vos modèles" width="620" height="288" class="alignnone size-full wp-image-20" /></p>
<p><strong>Note :</strong> pour que toutes les fonctions de vos modèles soient également disponibles pendant l&rsquo;édition d&rsquo;un modèle, il faudra également ajouter les modèles dans le DocBlock du modèle.</p>
<h3>Conclusion</h3>
<p>Il est dommage que, par défaut, on ne puisse pas accéder à l&rsquo;autocomplete des fonctions de CodeIgniter — ceci étant apparemment dû à la manière dont le code est commenté — mais grâce à cette petite astuce tout rentre dans l&rsquo;ordre.<br />
Dernier petit conseil : utilisez également les commentaires DocBlock avec vos méthodes de modèles pour facilement en afficher l&rsquo;utilisation lors de l&rsquo;édition de controlleurs et modèles.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.nukleo.fr/blog/autocomplete-codeigniter-netbeans/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
