diff options
Diffstat (limited to 'gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html')
| -rw-r--r-- | gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html | 182 |
1 files changed, 94 insertions, 88 deletions
diff --git a/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html b/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html index 1d521fd6..c4f8a629 100644 --- a/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html +++ b/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.html @@ -2,12 +2,17 @@ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Key Takeaways from The Well-Grounded Rubyist</title> <link rel="shortcut icon" type="image/gif" href="/favicon.ico" /> <link rel="stylesheet" href="../style.css" /> <link rel="stylesheet" href="style-override.css" /> </head> -<body> +<body class="rfx-boot"> +<div class="rfx-overlay-grid"></div> +<div class="rfx-overlay-scanlines"></div> +<div id="rfx-stars"></div> +<div class="rfx-vignette"></div> <p class="header"> <a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-10-11-key-takeaways-from-the-well-grounded-rubyist.gmi">Gemini</a> </p> @@ -54,19 +59,19 @@ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="silver"># At the top level, self is the main object</font></i> -p <b><u><font color="#000000">self</font></u></b> -<i><font color="silver"># => main</font></i> -p <b><u><font color="#000000">self</font></u></b>.<b><u><font color="#000000">class</font></u></b> -<i><font color="silver"># => Object</font></i> +<pre><i><font color="#ababab"># At the top level, self is the main object</font></i> +<font color="#ff0000">p </font><b><font color="#ffffff">self</font></b> +<i><font color="#ababab"># => main</font></i> +<font color="#ff0000">p </font><b><font color="#ffffff">self</font></b><font color="#F3E651">.</font><b><font color="#ffffff">class</font></b> +<i><font color="#ababab"># => Object</font></i> -<b><u><font color="#000000">def</font></u></b> foo - <i><font color="silver"># Inside a method, self is the object that received the call</font></i> - p <b><u><font color="#000000">self</font></u></b> -<b><u><font color="#000000">end</font></u></b> +<b><font color="#ffffff">def</font></b><font color="#ff0000"> foo</font> +<font color="#ff0000"> </font><i><font color="#ababab"># Inside a method, self is the object that received the call</font></i> +<font color="#ff0000"> p </font><b><font color="#ffffff">self</font></b> +<b><font color="#ffffff">end</font></b> -foo -<i><font color="silver"># => main</font></i> +<font color="#ff0000">foo</font> +<i><font color="#ababab"># => main</font></i> </pre> <br /> <span>This code demonstrates how <span class='inlinecode'>self</span> changes depending on the context. At the top level, it's <span class='inlinecode'>main</span>, an instance of <span class='inlinecode'>Object</span>. When <span class='inlinecode'>foo</span> is called without a receiver, it's called on <span class='inlinecode'>main</span>.</span><br /> @@ -79,17 +84,17 @@ foo by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>obj = <font color="#808080">"a string"</font> +<pre><font color="#ff0000">obj </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"a string"</font> -<b><u><font color="#000000">def</font></u></b> obj.shout - <b><u><font color="#000000">self</font></u></b>.upcase + <font color="#808080">"!"</font> -<b><u><font color="#000000">end</font></u></b> +<b><font color="#ffffff">def</font></b><font color="#ff0000"> obj</font><font color="#F3E651">.</font><font color="#ff0000">shout</font> +<font color="#ff0000"> </font><b><font color="#ffffff">self</font></b><font color="#F3E651">.</font><font color="#ff0000">upcase </font><font color="#F3E651">+</font><font color="#ff0000"> </font><font color="#bb00ff">"!"</font> +<b><font color="#ffffff">end</font></b> -p obj.shout -<i><font color="silver"># => "A STRING!"</font></i> +<font color="#ff0000">p obj</font><font color="#F3E651">.</font><font color="#ff0000">shout</font> +<i><font color="#ababab"># => "A STRING!"</font></i> -obj2 = <font color="#808080">"another string"</font> -<i><font color="silver"># obj2.shout would raise a NoMethodError</font></i> +<font color="#ff0000">obj2 </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">"another string"</font> +<i><font color="#ababab"># obj2.shout would raise a NoMethodError</font></i> </pre> <br /> <span>Here, the <span class='inlinecode'>shout</span> method is only available on the <span class='inlinecode'>obj</span> object. This is a powerful feature for adding behavior to specific instances.</span><br /> @@ -102,15 +107,15 @@ obj2 = <font color="#808080">"another string"</font> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>MyClass = Class.new <b><u><font color="#000000">do</font></u></b> - <b><u><font color="#000000">def</font></u></b> say_hello - puts <font color="#808080">"Hello from a dynamically created class!"</font> - <b><u><font color="#000000">end</font></u></b> -<b><u><font color="#000000">end</font></u></b> +<pre><font color="#ff0000">MyClass </font><font color="#F3E651">=</font><font color="#ff0000"> Class</font><font color="#F3E651">.</font><font color="#ff0000">new </font><b><font color="#ffffff">do</font></b> +<font color="#ff0000"> </font><b><font color="#ffffff">def</font></b><font color="#ff0000"> say_hello</font> +<font color="#ff0000"> puts </font><font color="#bb00ff">"Hello from a dynamically created class!"</font> +<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b> +<b><font color="#ffffff">end</font></b> -instance = MyClass.new -instance.say_hello -<i><font color="silver"># => Hello from a dynamically created class!</font></i> +<font color="#ff0000">instance </font><font color="#F3E651">=</font><font color="#ff0000"> MyClass</font><font color="#F3E651">.</font><font color="#ff0000">new</font> +<font color="#ff0000">instance</font><font color="#F3E651">.</font><font color="#ff0000">say_hello</font> +<i><font color="#ababab"># => Hello from a dynamically created class!</font></i> </pre> <br /> <span>This shows how to create a new class and assign it to a constant. This is what happens behind the scenes when you use the <span class='inlinecode'>class</span> keyword.</span><br /> @@ -127,27 +132,27 @@ instance.say_hello by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="silver"># For ranges, it checks for inclusion</font></i> -p (<font color="#000000">1</font>..<font color="#000000">5</font>) === <font color="#000000">3</font> <i><font color="silver"># => true</font></i> +<pre><i><font color="#ababab"># For ranges, it checks for inclusion</font></i> +<font color="#ff0000">p </font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">..</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">===</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><i><font color="#ababab"># => true</font></i> -<i><font color="silver"># For classes, it checks if the object is an instance of the class</font></i> -p String === <font color="#808080">"hello"</font> <i><font color="silver"># => true</font></i> +<i><font color="#ababab"># For classes, it checks if the object is an instance of the class</font></i> +<font color="#ff0000">p String </font><font color="#F3E651">===</font><font color="#ff0000"> </font><font color="#bb00ff">"hello"</font><font color="#ff0000"> </font><i><font color="#ababab"># => true</font></i> -<i><font color="silver"># For regexes, it checks for a match</font></i> -p /llo/ === <font color="#808080">"hello"</font> <i><font color="silver"># => true</font></i> +<i><font color="#ababab"># For regexes, it checks for a match</font></i> +<font color="#ff0000">p </font><font color="#ff0000">/llo/</font><font color="#ff0000"> </font><font color="#F3E651">===</font><font color="#ff0000"> </font><font color="#bb00ff">"hello"</font><font color="#ff0000"> </font><i><font color="#ababab"># => true</font></i> -<b><u><font color="#000000">def</font></u></b> check(value) - <b><u><font color="#000000">case</font></u></b> value - <b><u><font color="#000000">when</font></u></b> String - <font color="#808080">"It's a string"</font> - <b><u><font color="#000000">when</font></u></b> (<font color="#000000">1</font>..<font color="#000000">10</font>) - <font color="#808080">"It's a number between 1 and 10"</font> - <b><u><font color="#000000">else</font></u></b> - <font color="#808080">"Something else"</font> - <b><u><font color="#000000">end</font></u></b> -<b><u><font color="#000000">end</font></u></b> +<b><font color="#ffffff">def</font></b><font color="#ff0000"> check</font><font color="#F3E651">(</font><font color="#ff0000">value</font><font color="#F3E651">)</font> +<font color="#ff0000"> </font><b><font color="#ffffff">case</font></b><font color="#ff0000"> value</font> +<font color="#ff0000"> </font><b><font color="#ffffff">when</font></b><font color="#ff0000"> String</font> +<font color="#ff0000"> </font><font color="#bb00ff">"It's a string"</font> +<font color="#ff0000"> </font><b><font color="#ffffff">when</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">1</font><font color="#F3E651">..</font><font color="#bb00ff">10</font><font color="#F3E651">)</font> +<font color="#ff0000"> </font><font color="#bb00ff">"It's a number between 1 and 10"</font> +<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b> +<font color="#ff0000"> </font><font color="#bb00ff">"Something else"</font> +<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b> +<b><font color="#ffffff">end</font></b> -p check(<font color="#000000">5</font>) <i><font color="silver"># => "It's a number between 1 and 10"</font></i> +<font color="#ff0000">p check</font><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font><font color="#ff0000"> </font><i><font color="#ababab"># => "It's a number between 1 and 10"</font></i> </pre> <br /> <h3 style='display: inline' id='blocks-and-yield'>Blocks and <span class='inlinecode'>yield</span></h3><br /> @@ -158,18 +163,18 @@ p check(<font color="#000000">5</font>) <i><font color="silver"># => "It's a by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><u><font color="#000000">def</font></u></b> my_iterator - puts <font color="#808080">"Entering the method"</font> - <b><u><font color="#000000">yield</font></u></b> - puts <font color="#808080">"Back in the method"</font> - <b><u><font color="#000000">yield</font></u></b> -<b><u><font color="#000000">end</font></u></b> +<pre><b><font color="#ffffff">def</font></b><font color="#ff0000"> my_iterator</font> +<font color="#ff0000"> puts </font><font color="#bb00ff">"Entering the method"</font> +<font color="#ff0000"> </font><b><font color="#ffffff">yield</font></b> +<font color="#ff0000"> puts </font><font color="#bb00ff">"Back in the method"</font> +<font color="#ff0000"> </font><b><font color="#ffffff">yield</font></b> +<b><font color="#ffffff">end</font></b> -my_iterator { puts <font color="#808080">"Inside the block"</font> } -<i><font color="silver"># Entering the method</font></i> -<i><font color="silver"># Inside the block</font></i> -<i><font color="silver"># Back in the method</font></i> -<i><font color="silver"># Inside the block</font></i> +<font color="#ff0000">my_iterator </font><font color="#F3E651">{</font><font color="#ff0000"> puts </font><font color="#bb00ff">"Inside the block"</font><font color="#ff0000"> </font><font color="#F3E651">}</font> +<i><font color="#ababab"># Entering the method</font></i> +<i><font color="#ababab"># Inside the block</font></i> +<i><font color="#ababab"># Back in the method</font></i> +<i><font color="#ababab"># Inside the block</font></i> </pre> <br /> <span>This simple iterator shows how <span class='inlinecode'>yield</span> transfers control to the block. You can also pass arguments to <span class='inlinecode'>yield</span> and get a return value from the block.</span><br /> @@ -178,13 +183,13 @@ my_iterator { puts <font color="#808080">"Inside the block"</font> } by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><u><font color="#000000">def</font></u></b> with_return - result = <b><u><font color="#000000">yield</font></u></b>(<font color="#000000">5</font>) - puts <font color="#808080">"The block returned #{result}"</font> -<b><u><font color="#000000">end</font></u></b> +<pre><b><font color="#ffffff">def</font></b><font color="#ff0000"> with_return</font> +<font color="#ff0000"> result </font><font color="#F3E651">=</font><font color="#ff0000"> </font><b><font color="#ffffff">yield</font></b><font color="#F3E651">(</font><font color="#bb00ff">5</font><font color="#F3E651">)</font> +<font color="#ff0000"> puts </font><font color="#bb00ff">"The block returned #{result}"</font> +<b><font color="#ffffff">end</font></b> -with_return { |n| n * <font color="#000000">2</font> } -<i><font color="silver"># => The block returned 10</font></i> +<font color="#ff0000">with_return </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000">n</font><font color="#F3E651">|</font><font color="#ff0000"> n </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#F3E651">}</font> +<i><font color="#ababab"># => The block returned 10</font></i> </pre> <br /> <span>This demonstrates passing an argument to the block and using its return value.</span><br /> @@ -201,17 +206,17 @@ with_return { |n| n * <font color="#000000">2</font> } by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="silver"># Two strings with the same content are different objects</font></i> -p <font color="#808080">"foo"</font>.object_id -p <font color="#808080">"foo"</font>.object_id +<pre><i><font color="#ababab"># Two strings with the same content are different objects</font></i> +<font color="#ff0000">p </font><font color="#bb00ff">"foo"</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font> +<font color="#ff0000">p </font><font color="#bb00ff">"foo"</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font> -<i><font color="silver"># Two symbols with the same content are the same object</font></i> -p :foo.object_id -p :foo.object_id +<i><font color="#ababab"># Two symbols with the same content are the same object</font></i> +<font color="#ff0000">p </font><font color="#F3E651">:</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font> +<font color="#ff0000">p </font><font color="#F3E651">:</font><font color="#ff0000">foo</font><font color="#F3E651">.</font><font color="#ff0000">object_id</font> -<i><font color="silver"># Modern hash syntax uses symbols as keys</font></i> -my_hash = { name: <font color="#808080">"Paul"</font>, language: <font color="#808080">"Ruby"</font> } -p my_hash[:name] <i><font color="silver"># => "Paul"</font></i> +<i><font color="#ababab"># Modern hash syntax uses symbols as keys</font></i> +<font color="#ff0000">my_hash </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> name</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"Paul"</font><font color="#F3E651">,</font><font color="#ff0000"> language</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">"Ruby"</font><font color="#ff0000"> </font><font color="#F3E651">}</font> +<font color="#ff0000">p my_hash</font><font color="#F3E651">[:</font><font color="#ff0000">name</font><font color="#F3E651">]</font><font color="#ff0000"> </font><i><font color="#ababab"># => "Paul"</font></i> </pre> <br /> <span>This code highlights the difference between strings and symbols and shows the convenient hash syntax.</span><br /> @@ -224,13 +229,13 @@ p my_hash[:name] <i><font color="silver"># => "Paul"</font></i> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="silver"># Array of strings</font></i> -p %w[one two three] -<i><font color="silver"># => ["one", "two", "three"]</font></i> +<pre><i><font color="#ababab"># Array of strings</font></i> +<font color="#ff0000">p </font><font color="#F3E651">%</font><font color="#ff0000">w</font><font color="#F3E651">[</font><font color="#ff0000">one two three</font><font color="#F3E651">]</font> +<i><font color="#ababab"># => ["one", "two", "three"]</font></i> -<i><font color="silver"># Array of symbols</font></i> -p %i[one two three] -<i><font color="silver"># => [:one, :two, :three]</font></i> +<i><font color="#ababab"># Array of symbols</font></i> +<font color="#ff0000">p </font><font color="#F3E651">%</font><font color="#ff0000">i</font><font color="#F3E651">[</font><font color="#ff0000">one two three</font><font color="#F3E651">]</font> +<i><font color="#ababab"># => [:one, :two, :three]</font></i> </pre> <br /> <span>A quick way to create arrays. You can also retrieve multiple values at once.</span><br /> @@ -239,13 +244,13 @@ p %i[one two three] by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre>arr = [<font color="#000000">10</font>, <font color="#000000">20</font>, <font color="#000000">30</font>, <font color="#000000">40</font>, <font color="#000000">50</font>] -p arr.values_at(<font color="#000000">0</font>, <font color="#000000">2</font>, <font color="#000000">4</font>) -<i><font color="silver"># => [10, 30, 50]</font></i> +<pre><font color="#ff0000">arr </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#bb00ff">10</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">20</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">30</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">40</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">50</font><font color="#F3E651">]</font> +<font color="#ff0000">p arr</font><font color="#F3E651">.</font><font color="#ff0000">values_at</font><font color="#F3E651">(</font><font color="#bb00ff">0</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">)</font> +<i><font color="#ababab"># => [10, 30, 50]</font></i> -hash = { a: <font color="#000000">1</font>, b: <font color="#000000">2</font>, c: <font color="#000000">3</font> } -p hash.values_at(:a, :c) -<i><font color="silver"># => [1, 3]</font></i> +<font color="#ff0000">hash </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> a</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">,</font><font color="#ff0000"> b</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> c</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><font color="#F3E651">}</font> +<font color="#ff0000">p hash</font><font color="#F3E651">.</font><font color="#ff0000">values_at</font><font color="#F3E651">(:</font><font color="#ff0000">a</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000">c</font><font color="#F3E651">)</font> +<i><font color="#ababab"># => [1, 3]</font></i> </pre> <br /> <span>The <span class='inlinecode'>values_at</span> method is a concise way to get multiple elements.</span><br /> @@ -264,11 +269,12 @@ p hash.values_at(:a, :c) <br /> <a class='textlink' href='../'>Back to the main site</a><br /> <p class="footer"> - Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> | - served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> | - <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a> - <br /> - Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a> + Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> | + served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> | + <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a> + <br /> + Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a> </p> +<script type="text/javascript" src="../retrofuturistic.js"></script> </body> </html> |
