{"componentChunkName":"component---src-templates-post-js","path":"/blog/arrow-functions-I","result":{"data":{"markdownRemark":{"html":"<p class='intro'>Today, I am going to talk about Arrow functions. This is a hot topic in ES6. I have divided this post into two parts so that one post doesn't get awfully long. Let's get started!\n</p>\n<h3>Arrow functions are short and nice</h3>\n<p>One of the main things about arrow functions is that they look nice and are shorter to write. Let's take a code example and compare normal functions with arrow functions.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> numbers <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">,</span> <span class=\"token number\">44</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">67</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">34</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">201</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// I want a new array where all the numbers are postive</span>\n\n<span class=\"token comment\">// Old way of doing this</span>\n<span class=\"token keyword\">const</span> positiveNumbers <span class=\"token operator\">=</span> numbers<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">num</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>positiveNumbers<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// [4, 3, 11, 44, 67, 34, 100, 201]</span></code></pre></div>\n<p>We used a normal function inside <code class=\"language-text\">map</code>. We could write it in a more concise way using arrow functions. The first thing we need to do is get rid of keyword <code class=\"language-text\">function</code> and put a fat arrow (<code class=\"language-text\">=&gt;</code>) after parameters.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token comment\">// This is how you do with arrow functions</span>\n<span class=\"token keyword\">const</span> positiveNumbers <span class=\"token operator\">=</span> numbers<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">num</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Okay, but it's still not that big of a deal. I don't understand the hype around them. That's because I haven't told you the full story yet. If you have only one parameter/argument then you can remove the parenthesis as well.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> positiveNumbers <span class=\"token operator\">=</span> numbers<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">num</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3>Implicit Return</h3>\n<p>Explicit return is when we write the keyword <code class=\"language-text\">return</code> in a function. In many callbacks like above, we only write one line of code and return it. In that case, we can remove the keyword <code class=\"language-text\">return</code> and also remove the curly braces.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> positiveNumbers <span class=\"token operator\">=</span> numbers<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">num</span> <span class=\"token operator\">=></span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>num<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Aha! Now, it looks super cool. But remember you can do this only with one-liner functions. If a function takes no argument then you have to use empty parenthesis.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> ones <span class=\"token operator\">=</span> numbers<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>ones<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// [1, 1, 1, 1, 1, 1, 1, 1]</span></code></pre></div>\n<h3>Implicit return for an object</h3>\n<p>What if we need to return an object as implicit return. Suppose, we have an array of names and we want to return an array of objects, where each object has a name property.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> names <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'Elliot'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Leon'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Vera'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// This will not work because open curly braces for object</span>\n<span class=\"token comment\">// will be confused with function's opening curly braces</span>\n<span class=\"token keyword\">const</span> objNames <span class=\"token operator\">=</span> names<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span> name<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Here's the correct way to do it</span>\n<span class=\"token keyword\">const</span> objNames <span class=\"token operator\">=</span> names<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> name <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3>Arrow functions are anonymous</h3>\n<p>All arrow functions are anonymous, meaning they don't have a name. However, we can put an arrow function inside a variable.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">sayHi</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">name</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Hi! '</span> <span class=\"token operator\">+</span> name<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>This is it for this post. I will be talking about how arrow functions do not change the value of <code class=\"language-text\">this</code> in my next post. Thanks for reading.</p>\n<p><strong>Recommended Course =></strong> <a href=\"https://es6.io\" target=\"_blank\" >ES6 For Everyone </a> by Wes Bos.</p>","timeToRead":2,"frontmatter":{"title":"Arrow functions in Javascript Part I","date":"2017-12-15T00:00:00.000Z","tags":["Javascript"]}}},"pageContext":{"slug":"arrow-functions-I"}},"staticQueryHashes":["3649515864","63159454"]}