<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ahmed Noor E Alam</title>
    <description>The latest articles on DEV Community by Ahmed Noor E Alam (@ahmednoor).</description>
    <link>https://dev.to/ahmednoor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F417001%2F24429c3b-2d31-4319-9c5c-1029fc22c76b.png</url>
      <title>DEV Community: Ahmed Noor E Alam</title>
      <link>https://dev.to/ahmednoor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahmednoor"/>
    <language>en</language>
    <item>
      <title>Lino - A command line text editor with notepad like key bindings</title>
      <dc:creator>Ahmed Noor E Alam</dc:creator>
      <pubDate>Tue, 02 Feb 2021 07:19:35 +0000</pubDate>
      <link>https://dev.to/ahmednoor/lino-a-command-line-text-editor-with-notepad-like-key-bindings-3aon</link>
      <guid>https://dev.to/ahmednoor/lino-a-command-line-text-editor-with-notepad-like-key-bindings-3aon</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hey Everyone&lt;/strong&gt;, I hope you are all doing great.&lt;/p&gt;

&lt;p&gt;I am quite a noob in Rust programming language. So, in order to play with it and make something serious, I have recently made a command-line text editor with Notepad like key bindings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Notepad like keybindings.&lt;/li&gt;
&lt;li&gt;Multi-line indentation.&lt;/li&gt;
&lt;li&gt;Auto-indented new lines.&lt;/li&gt;
&lt;li&gt;Line numbers.&lt;/li&gt;
&lt;li&gt;Syntax highlighting.&lt;/li&gt;
&lt;li&gt;Copy, Paste.&lt;/li&gt;
&lt;li&gt;Undo, Redo.&lt;/li&gt;
&lt;li&gt;Find, Replace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your love and feedback will be greatly appreciated. (Link Below)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link: &lt;a href="https://github.com/ahmednooor/lino"&gt;https://github.com/ahmednooor/lino&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thank You &amp;amp;&amp;amp; Take Care 😊&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>rust</category>
      <category>text</category>
      <category>editor</category>
    </item>
    <item>
      <title>react-scroll-restorer</title>
      <dc:creator>Ahmed Noor E Alam</dc:creator>
      <pubDate>Sun, 06 Dec 2020 15:36:35 +0000</pubDate>
      <link>https://dev.to/ahmednoor/react-scroll-restorer-5548</link>
      <guid>https://dev.to/ahmednoor/react-scroll-restorer-5548</guid>
      <description>&lt;p&gt;Hey every one, I hope you are all doing great.&lt;/p&gt;

&lt;p&gt;I have just published a &lt;code&gt;React&lt;/code&gt; package &lt;code&gt;react-scroll-restorer&lt;/code&gt; that helps restoring old scroll positions after component re-mounts.&lt;/p&gt;

&lt;p&gt;Your feedback &amp;amp; love will be greatly appreciated. Link to the GitHub repo below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ahmednooor/react-scroll-restorer"&gt;https://github.com/ahmednooor/react-scroll-restorer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you 😊&lt;/p&gt;

</description>
      <category>react</category>
      <category>restore</category>
      <category>scroll</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Hacking my way into creating a free URL shortening service by knitting several free pieces of the Internet</title>
      <dc:creator>Ahmed Noor E Alam</dc:creator>
      <pubDate>Mon, 02 Nov 2020 23:56:09 +0000</pubDate>
      <link>https://dev.to/ahmednoor/hacking-my-way-into-creating-a-free-url-shortening-service-by-knitting-several-free-pieces-of-the-internet-49o6</link>
      <guid>https://dev.to/ahmednoor/hacking-my-way-into-creating-a-free-url-shortening-service-by-knitting-several-free-pieces-of-the-internet-49o6</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The most important part of a URL shortening service is a short domain. It had to be free, so thanks to &lt;a href="//freenom.com"&gt;freenom.com&lt;/a&gt; for that :)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now a free backend server was required. But there weren't much services that were actually free and provided a good basic service as well. But thanks to &lt;a href="https://www.pythonanywhere.com/"&gt;pythonanywhere.com&lt;/a&gt; for that :)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;But wait, they don't let you have a separate IP. hmmm ...&lt;/li&gt;
&lt;li&gt;Ok, I will just add the &lt;code&gt;A&lt;/code&gt; record in my DNS to my &lt;code&gt;pythonanywhere&lt;/code&gt; app's sub-domain. Problem solved!&lt;/li&gt;
&lt;li&gt;Not so fast. If only I had known that you can't put domain names in &lt;code&gt;A&lt;/code&gt; records. hmmm :/&lt;/li&gt;
&lt;li&gt;Ok, so I found something interesting from &lt;code&gt;pythonanywhere&lt;/code&gt; forums. You can redirect your naked domain i.e. &lt;code&gt;example[dot]com&lt;/code&gt; to &lt;code&gt;www[dot]example[dot]com&lt;/code&gt; by using an IP from a free service called &lt;a href="http://wwwizer.com/naked-domain-redirect"&gt;wwwizer.com&lt;/a&gt; and then you can add a &lt;code&gt;CNAME&lt;/code&gt; record for &lt;code&gt;www&lt;/code&gt; and redirect that to your pythonanywhere app's sub-domain. Ok, lets do that!&lt;/li&gt;
&lt;li&gt;:/ hmmm... it seems that &lt;code&gt;pythonanywhere&lt;/code&gt; guys are clever. They don't let you go to your app's sub-domain from a &lt;code&gt;www redirect&lt;/code&gt; unless you are a paying client.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ok, it seems that it isn't gonna work, so lets just leave it ...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;So, I had an idea the next day. What if I used another free service that lets me host a static page, and I could redirect from my DNS to that static page which would then redirect to the actual site hosted at pythonanywhere? Hmmm ... so what platform lets you have static pages? Aha! it's &lt;a href="https://github.com/"&gt;github.com&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;So after experimenting, I came to know that I can't redirect my &lt;code&gt;CNAME&lt;/code&gt; record to anything that has a path following the actual domain e.g. &lt;code&gt;username[dot]github[dot]io&lt;/code&gt; is fine but &lt;code&gt;username[dot]github[dot]io/something&lt;/code&gt; is not. Which means I would need to make a &lt;code&gt;github organization&lt;/code&gt; to have a separate &lt;code&gt;username[dot]github[dot]io&lt;/code&gt; domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ok, done that, but it seems that &lt;code&gt;github pages&lt;/code&gt; doesn't support dynamic routing e.g. if you enter &lt;code&gt;username[dot]github[dot]io/something&lt;/code&gt;, it will look for a repo with the name &lt;code&gt;something&lt;/code&gt; instead  of serving the page at the root domain and let you parse the &lt;code&gt;/something&lt;/code&gt; yourself. Which makes sense since it is a static file hosting platform.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Thanks to the awesome people who created this &lt;a href="https://github.com/rafgraph/spa-github-pages"&gt;spa-github-pages&lt;/a&gt; hack/solution. It lets you handle all dynamic routes on a single static file. Check out their README for more details.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally! it's done and it works.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;You can try it out on &lt;a href="http://rout.ml"&gt;rout.ml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code is available at &lt;a href="https://github.com/routml"&gt;github.com/routml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It might not work always due to the limitations of free-ness. So if you are looking at this from the future, thank you for your time :) I hope this has been helpful to you in some way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Below is a diagram that shows how the request from the naked public domain goes all the way to the actual app hosting  sub-domain.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SERFoBJl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/routml/routml-about/main/explanation_diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SERFoBJl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/routml/routml-about/main/explanation_diagram.png" width="200px"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I hope this has been interesting for you.&lt;br&gt;
Take Care &amp;amp;&amp;amp; Good Bye. 😊&lt;/p&gt;

</description>
      <category>routing</category>
      <category>dns</category>
      <category>javascript</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Implementing Polymorphism in Rust</title>
      <dc:creator>Ahmed Noor E Alam</dc:creator>
      <pubDate>Thu, 02 Jul 2020 03:02:03 +0000</pubDate>
      <link>https://dev.to/ahmednoor/implementing-polymorphism-in-rust-4b3f</link>
      <guid>https://dev.to/ahmednoor/implementing-polymorphism-in-rust-4b3f</guid>
      <description>&lt;p&gt;In this post we will be implementing Polymorphism in Rust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what is Polymorphism?&lt;/strong&gt;&lt;br&gt;
In simple terms, it is the ability to pass an argument that can be of different types, to a function with only one implementation, instead of separate ones for each different type.&lt;/p&gt;

&lt;p&gt;Code: &lt;a href="https://repl.it/repls/PerfectSandybrownCarat"&gt;Online Demo Link&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c"&gt;// Polymorphism in Rust&lt;/span&gt;
&lt;span class="c"&gt;// Online Demo: https://repl.it/repls/PerfectSandybrownCarat&lt;/span&gt;

&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.1416&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Circle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// Since both Circle and Rectangle are shapes,&lt;/span&gt;
&lt;span class="c"&gt;// we can label common behavior in a `trait` type.&lt;/span&gt;
&lt;span class="c"&gt;// A `trait` is basically a type that groups&lt;/span&gt;
&lt;span class="c"&gt;// certain behaviors that are similar in meaning&lt;/span&gt;
&lt;span class="c"&gt;// but can be different in implementation. e.g. a&lt;/span&gt;
&lt;span class="c"&gt;// dog and a human, both can walk, but they walk&lt;/span&gt;
&lt;span class="c"&gt;// differently. You can also think of traits as &lt;/span&gt;
&lt;span class="c"&gt;// kind of similar to interfaces in other languages.&lt;/span&gt;
&lt;span class="k"&gt;trait&lt;/span&gt; &lt;span class="n"&gt;Shape&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// Although both shapes have an area&lt;/span&gt;
&lt;span class="c"&gt;// but their ways of calculating it&lt;/span&gt;
&lt;span class="c"&gt;// are different. e.g. (dog human walking analogy)&lt;/span&gt;
&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;Shape&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Circle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.radius&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.radius&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;Shape&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.height&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.width&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// Here, we are saying, hey accept&lt;/span&gt;
&lt;span class="c"&gt;// any type that implements a `trait`&lt;/span&gt;
&lt;span class="c"&gt;// called Shape. e.g. any object that&lt;/span&gt;
&lt;span class="c"&gt;// can walk (from dog human analogy).&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;print_area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;dyn&lt;/span&gt; &lt;span class="n"&gt;Shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="nf"&gt;.area&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// Or we can also make a generic function.&lt;/span&gt;
&lt;span class="c"&gt;// This is similar to `print_area` but may&lt;/span&gt;
&lt;span class="c"&gt;// have the benifits of static type checking,&lt;/span&gt;
&lt;span class="c"&gt;// since it's a generic, so two versions of the&lt;/span&gt;
&lt;span class="c"&gt;// same function get generated with relevant&lt;/span&gt;
&lt;span class="c"&gt;// absolute/concrete types. (not sure though)&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="n"&gt;print_area_generic&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Shape&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="nf"&gt;.area&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;circle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Circle&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;rectangle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nf"&gt;print_area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;circle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;// 12.5664&lt;/span&gt;
  &lt;span class="nf"&gt;print_area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rectangle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;// 15&lt;/span&gt;

  &lt;span class="nf"&gt;print_area_generic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;circle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;// 12.5664&lt;/span&gt;
  &lt;span class="nf"&gt;print_area_generic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rectangle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;// 15&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I hope this has been interesting for you.&lt;br&gt;
Take Care &amp;amp;&amp;amp; Good Bye. 😊&lt;/p&gt;

</description>
      <category>rust</category>
      <category>polymorphism</category>
      <category>oop</category>
    </item>
    <item>
      <title>Attempting OOP in the Functional Paradigm</title>
      <dc:creator>Ahmed Noor E Alam</dc:creator>
      <pubDate>Fri, 26 Jun 2020 00:18:55 +0000</pubDate>
      <link>https://dev.to/ahmednoor/attempting-oop-in-the-functional-paradigm-3ajd</link>
      <guid>https://dev.to/ahmednoor/attempting-oop-in-the-functional-paradigm-3ajd</guid>
      <description>&lt;p&gt;Imagine if OOP was developed using Functional Programming concepts. In this post I will be trying to explore that in JavaScript.&lt;/p&gt;

&lt;p&gt;JS Code: (&lt;a href="https://repl.it/repls/BelovedLikelyDebugger"&gt;Online Demo Link&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* OOP in a Functional way, with HOFs, Currying and Closures.
 * Online Demo: https://repl.it/repls/BelovedLikelyDebugger */&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Rectangle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;methods&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;_h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getW&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;_w&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getArea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;_h&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;_w&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;setH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;_h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;getMethod&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;setW&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;_w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;getMethod&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getMethod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;methodName&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;methodName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// If method was found, then return it, else raise error&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
            &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
            &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`"&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;methodName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;" is not a method name.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;getMethod&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// ^ Since the returned `getMethod` function uses `methods` array&lt;/span&gt;
    &lt;span class="c1"&gt;// which contains functions that use the `_h` and `_w` variables,&lt;/span&gt;
    &lt;span class="c1"&gt;// those variables don't get cleaned up when the function returns.&lt;/span&gt;
    &lt;span class="c1"&gt;// Hence we have a saved state mimicking object fields.&lt;/span&gt;
    &lt;span class="c1"&gt;// `getMethod` and functions in `methods` array are called&lt;/span&gt;
    &lt;span class="c1"&gt;// Closures, because they kinda enclose local variables and&lt;/span&gt;
    &lt;span class="c1"&gt;// keep them from being cleaned up.&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myRectangleObject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// `myRectangleObject` is actually a function returned&lt;/span&gt;
&lt;span class="c1"&gt;// by `Rectangle` which is a Higher Order Function (HOF).&lt;/span&gt;
&lt;span class="c1"&gt;// A HOF is a function that either takes functions&lt;/span&gt;
&lt;span class="c1"&gt;// as arguments or returns a function.&lt;/span&gt;
&lt;span class="c1"&gt;// In our case, the `Rectangle` HOF returns another&lt;/span&gt;
&lt;span class="c1"&gt;// HOF `getMethod` since it also returns a function&lt;/span&gt;
&lt;span class="c1"&gt;// upon calling. See below for demonstration.&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myRectangleObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getArea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)());&lt;/span&gt; &lt;span class="c1"&gt;// 6&lt;/span&gt;

&lt;span class="nx"&gt;myRectangleObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;setH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// sets _h to 4&lt;/span&gt;
&lt;span class="c1"&gt;// ^ The first call `("setH")` returns another function&lt;/span&gt;
&lt;span class="c1"&gt;// that has the ability to change the local variable `_h`.&lt;/span&gt;
&lt;span class="c1"&gt;// The second call `(4)` then changes the `_h` variable.&lt;/span&gt;
&lt;span class="c1"&gt;// This sequential passing of arguments is Currying.&lt;/span&gt;

&lt;span class="nx"&gt;myRectangleObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;setW&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// sets _w to 5&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myRectangleObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getArea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)());&lt;/span&gt; &lt;span class="c1"&gt;// 20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Confused much? 😀&lt;br&gt;
Lets go through it once again, in steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Rectangle&lt;/code&gt; takes two arguments &lt;code&gt;h&lt;/code&gt; and &lt;code&gt;w&lt;/code&gt; and stores their values in local variables &lt;code&gt;_h&lt;/code&gt; and &lt;code&gt;_w&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Rectangle&lt;/code&gt; has a local 2D array called &lt;code&gt;methods&lt;/code&gt;. It contains a string in first column and an anonymous function in second column in each row. The string can be used as sort of an identifier for the function.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Rectangle&lt;/code&gt; returns a function called &lt;code&gt;getMethod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;getMethod&lt;/code&gt; takes a string as an argument and uses that to filter out a matching pair of string and anonymous function in &lt;code&gt;methods&lt;/code&gt; 2D array. If it finds such pair, then it returns the anonymous function from that pair. Otherwise, it raises an error.&lt;/li&gt;
&lt;li&gt;Based on what anonymous function got returned from &lt;code&gt;getMethod&lt;/code&gt;, we can perform different operations on local variables &lt;code&gt;_h&lt;/code&gt; and &lt;code&gt;_w&lt;/code&gt; such as setting different values and getting their product i.e. area etc.. We can do this magic because the anonymous function that got returned and the local variables are in the same lexical scope.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hope this has broadened (confused) your horizons a lot. 😀&lt;/p&gt;

&lt;p&gt;And for the bonus, below is a snippet of the same concept implemented in Scheme Programming Language which is a dialect of Lisp.&lt;/p&gt;

&lt;p&gt;Scheme Code: (&lt;a href="https://repl.it/repls/CalmSmoothClasslibrary"&gt;Online Demo Link&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight scheme"&gt;&lt;code&gt;&lt;span class="c1"&gt;; OOP in a Functional way&lt;/span&gt;
&lt;span class="c1"&gt;; Online Demo: https://repl.it/repls/CalmSmoothClasslibrary&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;define&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Rectangle&lt;/span&gt; &lt;span class="nv"&gt;h&lt;/span&gt; &lt;span class="nv"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;define&lt;/span&gt; &lt;span class="nv"&gt;_h&lt;/span&gt; &lt;span class="nv"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;define&lt;/span&gt; &lt;span class="nv"&gt;_w&lt;/span&gt; &lt;span class="nv"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;define&lt;/span&gt; &lt;span class="nv"&gt;methods&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;
                        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cons&lt;/span&gt; &lt;span class="s"&gt;"getH"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nv"&gt;_h&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cons&lt;/span&gt; &lt;span class="s"&gt;"getW"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nv"&gt;_w&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cons&lt;/span&gt; &lt;span class="s"&gt;"getArea"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;_h&lt;/span&gt; &lt;span class="nv"&gt;_w&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
                        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cons&lt;/span&gt; &lt;span class="s"&gt;"setH"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set!&lt;/span&gt; &lt;span class="nv"&gt;_h&lt;/span&gt; &lt;span class="nv"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;getMethod&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cons&lt;/span&gt; &lt;span class="s"&gt;"setW"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set!&lt;/span&gt; &lt;span class="nv"&gt;_w&lt;/span&gt; &lt;span class="nv"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;getMethod&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;define&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getMethod&lt;/span&gt; &lt;span class="nv"&gt;methodName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cdr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;car&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt; 
                          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;equal?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;car&lt;/span&gt; &lt;span class="nv"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;methodName&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                          &lt;span class="nv"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
        &lt;span class="nv"&gt;getMethod&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;define&lt;/span&gt; &lt;span class="nv"&gt;myRectangle&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Rectangle&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;myRectangle&lt;/span&gt; &lt;span class="s"&gt;"getArea"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="c1"&gt;; 6&lt;/span&gt;
&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;myRectangle&lt;/span&gt; &lt;span class="s"&gt;"setH"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;; sets _h to 4&lt;/span&gt;
&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;myRectangle&lt;/span&gt; &lt;span class="s"&gt;"setW"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;; sets _w to 5&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;myRectangle&lt;/span&gt; &lt;span class="s"&gt;"getArea"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="c1"&gt;; 20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And that's it for now. Thank you.&lt;br&gt;
Take Care &amp;amp;&amp;amp; Good Bye. 😊&lt;/p&gt;

</description>
      <category>functional</category>
      <category>oop</category>
      <category>javascript</category>
      <category>computerscience</category>
    </item>
  </channel>
</rss>
