Ruby Issue Tracking System: Issueshttps://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112016-10-07T17:46:10ZRuby Issue Tracking System
Redmine Ruby master - Feature #12820 (Rejected): Shorter syntax for assigning a method argument to an ins...https://redmine.ruby-lang.org/issues/128202016-10-07T17:46:10Zfornellas (Fabio Pugliese Ornellas)
<p>Hello,</p>
<p>The pattern:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Person</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="nb">name</span><span class="p">:)</span>
<span class="vi">@name</span> <span class="o">=</span> <span class="nb">name</span>
<span class="vi">@age</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>is so common, that Cristal Programming Language has a shortcut for it:<br>
<a href="https://crystal-lang.org/docs/syntax_and_semantics/methods_and_instance_variables.html" class="external">https://crystal-lang.org/docs/syntax_and_semantics/methods_and_instance_variables.html</a></p>
<pre><code class="crystal syntaxhl" data-language="crystal"><span class="k">class</span> <span class="nc">Person</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="vi">@name</span> <span class="p">:</span> <span class="no">String</span><span class="p">)</span>
<span class="vi">@age</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>This is a feature request to implement the same style to Ruby syntax, supporting both isolated parameters and Hash style parameters. Eg:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Person</span>
<span class="nb">attr_reader</span> <span class="ss">:name</span><span class="p">,</span> <span class="ss">:age</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="vi">@name</span><span class="p">,</span> <span class="vi">@age</span><span class="p">:)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">fabio</span> <span class="o">=</span> <span class="no">Person</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"Fabio"</span><span class="p">,</span> <span class="ss">age: </span><span class="mi">34</span><span class="p">)</span>
<span class="n">fabio</span><span class="p">.</span><span class="nf">name</span> <span class="c1">#=> "Fabio"</span>
<span class="n">fabio</span><span class="p">.</span><span class="nf">age</span> <span class="c1">#=> 34</span>
</code></pre>
<p>This will be very useful in methods that accept a lot of parameters and certainly will avoid bugs due to decreased duplicated code (eg: addind a new parameter to a method, and forgetting to set the instance variable to it). Other than implementing support for the syntax itself, I believe RDoc would also have to be updated, not to expose the "@" on documentation (as it is not relevant there).</p>
<p>What do you think?</p>
<p>Thank you.</p>