{"@attributes":{"version":"2.0"},"channel":{"title":"DEV Community: ysael pepin","description":"The latest articles on DEV Community by ysael pepin (@ysael).","link":"https:\/\/dev.to\/ysael","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%2F56686%2Fb62fbb5a-1643-4fa2-ae7e-a24c49222404.jpeg","title":"DEV Community: ysael pepin","link":"https:\/\/dev.to\/ysael"},"language":"en","item":[{"title":"Functional programming basics part 3: Currying","pubDate":"Sat, 02 Mar 2019 13:47:45 +0000","link":"https:\/\/dev.to\/ysael\/functional-programming-basics-part-3-currying-3bpn","guid":"https:\/\/dev.to\/ysael\/functional-programming-basics-part-3-currying-3bpn","description":"<h3>\n  \n  \n  So what is this thing people are calling currying?\n<\/h3>\n\n<p>Currying is <code>simply<\/code> the action of converting a function that take multiple arguments into one that can support the ability to return a new function if the argument it got is not the last one. <\/p>\n\n<p>If it is the last argument, it will execute.<\/p>\n\n<p>Let's say I have a simple function:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">add<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span><span class=\"p\">;<\/span>\n\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>If I try to call it with only one argument, it fails...<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">add<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nf\">add<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"c1\">\/\/ undefined <\/span>\n<span class=\"c1\">\/\/ (x is now 1 but y is undefined, so 1 + undefined = undefined)<\/span>\n\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Fortunately, modern JavaScript give us the ability to curry very easily via arrow functions.<\/p>\n\n<p>Here is the same function curried:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">add<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">y<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nf\">add<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"c1\">\/\/ function add() <\/span>\n<span class=\"cm\">\/* (this newly returned function as encapsulated \nthe value of 1 and will look like this --&gt; y =&gt; 1 + y ) *\/<\/span>\n\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>The nice thing about this is that now, we can call it with only one argument witch will return a new function that will expect one last argument <code>y<\/code>.<\/p>\n\n<p>We could alternatively put that new returned function in a variable and start using it:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">add<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">y<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">add1<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">add<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n\n\n<span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"nf\">add1<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">))<\/span> <span class=\"c1\">\/\/ 2<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Hope that helps you understand what currying is :) <\/p>\n\n","category":["javascript","functional","programming"]},{"title":"Functional programming basics part 2: Higher order function","pubDate":"Mon, 17 Sep 2018 14:17:02 +0000","link":"https:\/\/dev.to\/ysael\/functional-programming-basics-part-2-higher-order-function-2ckl","guid":"https:\/\/dev.to\/ysael\/functional-programming-basics-part-2-higher-order-function-2ckl","description":"<h3>\n  \n  \n  So what make a function of the highest order?\n<\/h3>\n\n<p>In order to be called a <code>Higher order function<\/code>, one must either take an other function as a parameter or return a function.<\/p>\n\n<p>Take function as a parameter??? what? no way!! <\/p>\n\n<p>Let's start by writing a simple function that is not from the highest order:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">addYtoX<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Now lets try to pass this function to an other function:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">ofTheHighestOrder<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">f<\/span><span class=\"p\">,<\/span> <span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span>  <span class=\"nx\">f<\/span><span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span>\n\n<span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span> <span class=\"p\">(<\/span><span class=\"nx\">ofTheHighestOrder<\/span><span class=\"p\">(<\/span><span class=\"nx\">addYtoX<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">))<\/span> <span class=\"c1\">\/\/ 3<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Woah that worked!! As you can see we can pass functions to other functions and use them like any other property! <\/p>\n\n<p>Let's rename our highness to make it more declarative:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code>    <span class=\"kd\">const<\/span> <span class=\"nx\">performOperation<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">operation<\/span><span class=\"p\">,<\/span> <span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span>  <span class=\"nx\">operation<\/span><span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span> <span class=\"p\">(<\/span><span class=\"nx\">performOperation<\/span><span class=\"p\">(<\/span><span class=\"nx\">addYtoX<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">))<\/span> <span class=\"c1\">\/\/ 3<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>That make senses right? I hope you can see at this point the value and the potential of a higher order function? <\/p>\n\n<p>Let's see an other example:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code>    <span class=\"kd\">const<\/span> <span class=\"nx\">addYtoX<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">multiplyYbyX<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">y<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">performOperation<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">operation<\/span><span class=\"p\">,<\/span> <span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span>  <span class=\"nx\">operation<\/span><span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span> <span class=\"p\">(<\/span><span class=\"nx\">performOperation<\/span><span class=\"p\">(<\/span><span class=\"nx\">addYtoX<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">))<\/span> <span class=\"c1\">\/\/ 3<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span> <span class=\"p\">(<\/span><span class=\"nx\">performOperation<\/span><span class=\"p\">(<\/span><span class=\"nx\">multiplyYbyX<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">))<\/span> <span class=\"c1\">\/\/ 2<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Voil\u00e0!! There is so much more we can do with this but we will stop here for now and look at the second variation of a higher order function; a function that returns a function... humm that sound weird lets just write one and see if this works!<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code>    <span class=\"kd\">const<\/span> <span class=\"nx\">ofTheHighestOrder<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nx\">poke<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">... your highness?? <\/span><span class=\"dl\">'<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">ofTheHighestOrder<\/span><span class=\"p\">())<\/span> <span class=\"c1\">\/\/ function poke()<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Cool! As you can see we are able to return a function from a function!!! Let's fiddle a bit more with this guy:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code>    <span class=\"kd\">const<\/span> <span class=\"nx\">ofTheHighestOrder<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nx\">poke<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">... your highness?? <\/span><span class=\"dl\">'<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kd\">const<\/span> <span class=\"nx\">willPoke<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">ofTheHighestOrder<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">willPoke<\/span><span class=\"p\">())<\/span> <span class=\"c1\">\/\/ ... your highness?? <\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>Awesome! we can create other functions using a function that returns a function which make them of the highest order as well. <\/p>\n\n<p>For now that might seem quite useless but that opens the door to a lot more possibilities that we will explore in further episodes. <\/p>\n\n<p>Until then, stay high!<\/p>\n\n","category":["javascript","functional","programming"]},{"title":"Functional programming basics part 1: Pure function","pubDate":"Thu, 13 Sep 2018 01:23:49 +0000","link":"https:\/\/dev.to\/ysael\/functional-programming-basics-part-1-pure-function-e55","guid":"https:\/\/dev.to\/ysael\/functional-programming-basics-part-1-pure-function-e55","description":"<h3>\n  \n  \n  What is purity?\n<\/h3>\n\n<p>Purity for a function is defined as one that will always return the same output for the same input and perform no side effects. <\/p>\n\n<p>So what do we mean by same output for the same input? <\/p>\n\n<p>well... lets see some examples...<\/p>\n\n<p>lets say we have this code:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">let<\/span> <span class=\"nx\">y<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">2<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">addYtoX<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>This function is not considered pure as the output could be modified by the value of <code>y<\/code> witch mean we cannot guaranty it will return the same output for the same input.<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">let<\/span> <span class=\"nx\">y<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">addYtoX<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span>\n\n<span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">addYtoX<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">))<\/span> <span class=\"c1\">\/\/ 5<\/span>\n\n<span class=\"nx\">y<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span> \n<span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">addYtoX<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">))<\/span> <span class=\"c1\">\/\/ 4<\/span>\n\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>As you can see the value of <code>y<\/code> will affect the output of the function even if we call it using the same input... this is definitely impure.<\/p>\n\n<p>Lets look at the pure version of the same function:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code>\n<span class=\"kd\">const<\/span> <span class=\"nx\">addYtoX<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>There you go!!! <\/p>\n\n<p>I can call this guy as many times as I want and I can be sure to get the same output for the same input. <\/p>\n\n<p>That's cool man, but what about that side effect thing? <\/p>\n\n<p>well... lets see the same function but with added side effects!<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code>\n<span class=\"kd\">const<\/span> <span class=\"nx\">addYtoX<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">x<\/span><span class=\"p\">,<\/span> <span class=\"nx\">y<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">makeSomeNoodles<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">x<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">y<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p>I hope you can guess the side effect is caused by the <code>makeSomeNoodles<\/code> function call right? <\/p>\n\n<p>Why is that bad? Well... the function is suppose to add x to y and now it is making noodles before computing my values? And I have no idea what is happening during that function.... maybe it is actually crashing my simple function before it can execute or worst!!! <\/p>\n\n<p>Anyway, I hope you get the basic idea. :) <\/p>\n\n<p>Until next time... stay pure! <\/p>\n\n","category":["javascript","functional","programming","purity"]}]}}