déplace les contenues dans un repertoire par année
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta name="generator" content="Hugo 0.22.1" />
|
||||
<meta charset="utf-8">
|
||||
<title>Yannick François - Elsif.fr</title>
|
||||
|
||||
<meta name="DC.title" content="elsif.fr, site de Yannick François aka yaf (ou ya_f)."/>
|
||||
<meta name="description" content="Le site de Yannick François. Développeur Senior, Responsable Produit, Pédagogue. Je travail chez Scopyleft"/>
|
||||
<meta name="keywords" content="code, développement, programmation, apprentissage, apprendre, lean, agile, logiciel, tdd, objet, refactoring, libre, creative commons, linux, unix"/>
|
||||
<meta name="author" content="Yannick François, https://elsif.fr"/>
|
||||
<meta name="designer" content="Yannick François, https://elsif.fr"/>
|
||||
<meta name="geo.placename" content="Poissy, Ile de france, France"/>
|
||||
<meta name="robots" content="index,follow" />
|
||||
<meta name="language" content="French" />
|
||||
<meta name="HandheldFriendly" content="True" />
|
||||
<meta name="MobileOptimized" content="320" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<link rel="index" title="Yannick François / Développeur / Pédagogue" href="index.html" />
|
||||
<link rel="stylesheet" href="/css/201912-elsif.css" media="all"/>
|
||||
<link rel="alternate" type="application/rss" href="/feed.xml" title="elsif.fr/feed" />
|
||||
</head>
|
||||
<body>
|
||||
<article>
|
||||
<h1>Ruby: new vs initialize</h1>
|
||||
<p>Pour certain c’est une évidence, mais <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/255359">un vieux mail</a> sur la <a href="http://www.ruby-lang.org/fr/community/mailing-lists/">liste de diffusion de ruby_core</a> ma donné envie de me pencher sur la question.</p>
|
||||
<p>Venant du monde Java (enfin je n’en suis pas encore sorti), je suis un habitué du:</p>
|
||||
<p><code>MacLasse monObjet = MacLasse.new();</code></p>
|
||||
<p>pour <a href="http://www.ruby-lang.org">Ruby</a> ça devient:</p>
|
||||
<p><code>mon_objet = Mac_lasse.new</code></p>
|
||||
<p>Bon à part le typage dur de java versus le typage dynamique de ruby, pas de gros changement sur <em>l’interprétation</em> de la façon d’instancier un objet entre ces deux langages.</p>
|
||||
<p>Par contre c’est sur la classe elle même que ça change pas mal.</p>
|
||||
<p>En java MacLasse ressemble à ça:</p>
|
||||
<pre>
|
||||
{% highlight java %}
|
||||
public class MacLasse {
|
||||
public MacLasse(){
|
||||
// code a executer lors de l'instanciation de l'objet
|
||||
}
|
||||
}
|
||||
{% endhighlight %}
|
||||
</pre>
|
||||
<p>et en ruby on se retrouve avec ça:</p>
|
||||
<pre>
|
||||
{% highlight ruby %}
|
||||
class MaClasse
|
||||
def initialize
|
||||
// code a executer lors de l'instanciation de l'objet
|
||||
end
|
||||
end
|
||||
{% endhighlight %}
|
||||
</pre>
|
||||
<p>Cette methode en java s’appel un <code>constructeur</code> (ça c’est pour ceux du fond qui suivent pas hein ! ). On l’obtient en définissant une methode portant le même nom que la classe.</p>
|
||||
<p>Pour ruby, peut importe le nom de la classe, on utilise une methode <code>initialize</code>.</p>
|
||||
<p><strong>Alors <code>initialize</code> est-elle une methode de type <em>constructeur</em> ?</strong></p>
|
||||
<p>Non. et en Java non plus finalement. Ces deux methode ne <em>construisent</em> pas l’instance, elle l’initialise. Elles permettent de préparer l’instance avant de la rendre. En java comme en Ruby, on peut très bien ce passer de ces methodes.</p>
|
||||
<p>Maintenant on va s’éloigner de Java…</p>
|
||||
<p>En Ruby on pourrais définir une methode <code>new</code> en lieu et place d’<span class="citation" data-cites="initialize">@initialize</span>@. Non mais qu’est-ce que je raconte, heureusement y’en a au premier rang qui suivent. Merci.</p>
|
||||
<p>Je reprend. En ruby on peut surcharger la methode <code>new</code> <em>(Object#new)</em> en plus de la methode <code>initialize</code>. Le seul hic, c’est qu’il faut faire attention. Cette methode <code>new</code> est censé créer l’instance de la class. Il faut donc penser à renvoyer la bonne instance en fin de methode (<code>new</code> pour les voisins du radiateur).</p>
|
||||
<p>Voyons plutôt un petit bout de code:</p>
|
||||
<pre>
|
||||
{% highlight ruby %}
|
||||
class Test_initialize
|
||||
def initialize
|
||||
"test_initialiaze"
|
||||
end
|
||||
end
|
||||
|
||||
class Test_new
|
||||
def self.new(*args)
|
||||
"test_new"
|
||||
end
|
||||
end
|
||||
|
||||
class Test_new_2
|
||||
def self.new(*args)
|
||||
"test_new_2"
|
||||
Object.new
|
||||
end
|
||||
end
|
||||
|
||||
test = Test_initialize.new
|
||||
puts test.class # Test_initialize
|
||||
|
||||
test = Test_new.new("args")
|
||||
puts test.class # String
|
||||
|
||||
test = Test_new_2.new("args")
|
||||
puts test.class # Object
|
||||
{% endhighlight %}
|
||||
|
||||
</pre>
|
||||
<p>On le voit assez bien je pense: Surcharger <code>new</code> ne doit pas se faire à la légère. Utilisé <code>initialize</code> pour initialiser l’instance semble bien plus logique.</p>
|
||||
<p>Là dessus Ruby montre bien un de ces principe de base qui veux que le langage soit simple et logique. Contrairement a Java ou l’on parle de constructeur en lieu et place de methode d’initialisation.</p>
|
||||
<p><em>C’est de la sémantique c’est sur, mais le principe est là. J’aime ruby et j’aime bien java quand même :-)</em></p>
|
||||
</article>
|
||||
<footer>
|
||||
<ul>
|
||||
</ul>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user