<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://felix-lambert.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://felix-lambert.github.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-09-17T17:33:36-04:00</updated><id>https://felix-lambert.github.io/feed.xml</id><title type="html">Felix Lambert</title><subtitle>Felix Lambert is a Lead Mobile Engineer based in Toronto with 10+ years in front-end and mobile development (React Native, Kotlin, React). Bilingual English/French. Open to new opportunities.</subtitle><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><entry xml:lang="fr"><title type="html">Histoire / chronologie</title><link href="https://felix-lambert.github.io/posts/2025/11/01/histoire-chronologie/" rel="alternate" type="text/html" title="Histoire / chronologie" /><published>2025-11-01T06:18:00-04:00</published><updated>2025-11-01T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2025/11/01/histoire-chronologie</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2025/11/01/histoire-chronologie/"><![CDATA[<p>Cette chronologie — 715 entrées en 14 chapitres, du Big Bang à aujourd’hui —
est en cours de refonte et n’est pas publiée pour le moment. Le projet est
décrit sur la page <a href="/fr/projets/#histoire-du-monde">Projets</a> ; il reviendra en
ligne une fois retravaillé.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="history" /><summary type="html"><![CDATA[Cette chronologie — 715 entrées en 14 chapitres, du Big Bang à aujourd’hui — est en cours de refonte et n’est pas publiée pour le moment. Le projet est décrit sur la page Projets ; il reviendra en ligne une fois retravaillé.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="fr"><title type="html">Le rituel</title><link href="https://felix-lambert.github.io/posts/2025/06/17/rituel/" rel="alternate" type="text/html" title="Le rituel" /><published>2025-06-17T06:18:00-04:00</published><updated>2025-06-17T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2025/06/17/rituel</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2025/06/17/rituel/"><![CDATA[<p>Le rituel est une éducation de l’attention. Lorsqu’on transforme un geste ordinaire — comme servir un verre d’eau — en rituel, on commence à remarquer des détails qu’on aurait autrement ignorés : une émotion sur un visage, une tension dans un geste. À force de répétition, cette attention devient naturelle, intégrée à notre manière d’être. On apprend à “voir bien” et donc à “agir bien”.</p>

<p>Un bon exercice consiste à choisir une action quotidienne et à s’y engager pleinement : être conscient de ce qu’on fait, de la manière dont on le fait, et de l’effet que cela produit. Même si le geste est d’abord maladroit ou un peu forcé comme une politesse trop théâtrale par exemple, il peut malgré tout améliorer la relation. Car une attitude bienveillante, même imparfaite, peut, avec le temps, devenir sincère.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="philosophy" /><summary type="html"><![CDATA[Le rituel est une éducation de l’attention. Lorsqu’on transforme un geste ordinaire — comme servir un verre d’eau — en rituel, on commence à remarquer des détails qu’on aurait autrement ignorés : une émotion sur un visage, une tension dans un geste. À force de répétition, cette attention devient naturelle, intégrée à notre manière d’être. On apprend à “voir bien” et donc à “agir bien”.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="fr"><title type="html">Bureaucratie</title><link href="https://felix-lambert.github.io/posts/2025/06/16/bureaucratie/" rel="alternate" type="text/html" title="Bureaucratie" /><published>2025-06-16T06:18:00-04:00</published><updated>2025-06-16T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2025/06/16/bureaucratie</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2025/06/16/bureaucratie/"><![CDATA[<p><span style="display:block;text-align:center"><img src="/assets/img/bureaucratie.webp" alt="Octocat" /></span></p>

<p>«Le ministère de la Santé, la Direction générale de la santé, Santé publique France, la Haute Autorité de santé, les agences régionales de santé, l’Agence épidémiologie France,
l’Agence nationale de sécurité du médicament et des produits de santé, le Conseil scientifique de la présidence de la République, le Haut Conseil de la santé publique,
l’Agence nationale de sécurité de logistique médicale ont le plaisir de vous annoncer la naissance du petit dernier: le Haut Conseil d’orientation pour la stratégie vaccinale!»</p>

<p>Le but ultime de la bureaucratie n’est-il pas, au fond, de tout formaliser ? De transformer les relations humaines en comportements réduits à des obligations ou des interdictions, autrement dit à des rapports fondés sur le pouvoir ?</p>

<p>Comment agir pour se protéger contre l’invasion bureaucratique, que ce soit en réalité financière, fiscale, immobilière, étatique…. ?</p>

<p>1 Nous devons d’abord changer notre façon de communiquer. Évitons l’obscurcissement délibéré du langage de la bureaucratie, ou de toute autre forme de fausse expertise. Cherchons à créer avec d’autres humains un langage non-bureaucratique, non-idéologique qui rentre en profondeur dans le registre de l’amicalité. Il s’agit ici de recréer de la communication sincère avec les autres, de la gentillesse et de l’amitié.</p>

<p>2 Il est essentiel de ne pas idéaliser certaines règles et de toujours considérer le contexte. Des règles considérées comme bonnes peuvent s’avérer inadaptées si elles sont appliquées sans tenir compte du contexte spécifique dans lequel elles sont utilisées.</p>

<p>3 Il nous faut aussi protéger notre intimité. Nous pouvons lui résister en cultivant une part de retrait. Cela signifie limiter ce que nous dévoilons et partager seulement ce qui est vraiment contraint.</p>

<p>le pouvoir bureaucratique une force qui, fondamentalement, étouffait l’élan humain vers la créativité, la convivialité, l’imagination.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="philosophy" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">Technophilia and technophobia</title><link href="https://felix-lambert.github.io/posts/2025/06/16/defending-technologies/" rel="alternate" type="text/html" title="Technophilia and technophobia" /><published>2025-06-16T06:18:00-04:00</published><updated>2025-06-16T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2025/06/16/defending-technologies</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2025/06/16/defending-technologies/"><![CDATA[<p>SOURCE:</p>

<ul>
  <li><a href="https://www.youtube.com/watch?v=AUxvauMIZzQ">Dangers de la technophobie</a></li>
  <li><a href="https://www.latribune.fr/opinions/tribunes/20140610trib000836155/technophiles-contre-technophobes-biophiles-contre-biophobes-un-essai-de-definition.html">Technophile contre technophobe</a></li>
</ul>

<p>Seeing new technologies, like AI or smartphone,s only as threats often drives people back to old ideologies, religious or political. Thinkers on television even call these tools as proof of social decline or disaster.Why is this the only story we keep hearing?</p>

<p>History shows that technology increases freedom. The washing machine freed women from endless laundry, the refrigerator gave families control over their food, and the smartphone gives instant access to knowledge without relying on “experts.”</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="technology" /><summary type="html"><![CDATA[SOURCE:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">Hack</title><link href="https://felix-lambert.github.io/posts/2025/06/16/hack/" rel="alternate" type="text/html" title="Hack" /><published>2025-06-16T06:18:00-04:00</published><updated>2025-06-16T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2025/06/16/hack</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2025/06/16/hack/"><![CDATA[<ul>
  <li><a href="https://www.youtube.com/watch?v=GoUK2_vXqQk">Herman Hollerith</a></li>
  <li><a href="https://www.youtube.com/watch?v=KG2M4ttzBnY">Punching cards</a></li>
</ul>

<p><em>“The hacker culture is a subculture of individuals who enjoy the intellectual challenge of creatively overcoming limitations of software systems to achieve novel and clever outcomes”</em></p>

<p>Linux hacked computers to transform them into operating systems. The Internet and the web, hacked microsoft, and transformed the computer from an operating system to a connected device. And even in offline life, when change happens, it’s often because of something creative happening. We tend to idealize revolutions, but when real change happens, it’s often because of a new behavior with individuals that can improvise by seeing things in new ways. The energy of change in this behavior can create a new wave of behavior. We can evaluate the current situation and see that new ways of relating with objects and people can arise.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="philosophy" /><summary type="html"><![CDATA[Herman Hollerith Punching cards]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="fr"><title type="html">Tang ping</title><link href="https://felix-lambert.github.io/posts/2024/11/23/tang-ping/" rel="alternate" type="text/html" title="Tang ping" /><published>2024-11-23T05:18:00-05:00</published><updated>2024-11-23T05:18:00-05:00</updated><id>https://felix-lambert.github.io/posts/2024/11/23/tang-ping</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2024/11/23/tang-ping/"><![CDATA[<p><span style="display:block;text-align:center"><img src="/assets/img/lie-flat-blog-1.webp" alt="Octocat" /></span></p>

<p><span style="display:block;text-align:center"><img src="/assets/img/lying-flat.webp" alt="Octocat" /></span></p>

<p>En 2016, Luo Huazhong, 26 ans, quitte son emploi à l’usine parce qu’il se sent vide. Il parcourt ensuite 2 100 km du Sichuan au Tibet. Puis, de retour dans sa ville natale de Jiande, dans l’est de la province du Zhejiang, il passe son temps à lire de la philosophie, et se débrouille en faisant quelques petits boulots et en prenant 60 $US par mois de ses économies. Il mange deux repas par jour, généralement des œufs, du riz et des nouilles, ne dépensant qu’environ 200 yuans (31 dollars) par mois.</p>

<p>Luo, sous le pseudo, “Kind-Hearted Traveler”, partage un article sur le moteur de recherche chinois Baidu expliquant pourquoi il mène une vie minimaliste.</p>

<p><em>Je n’ai pas travaillé pendant deux ans, j’ai juste traîné et je ne vois rien de mal à cela. La pression vient principalement des comparaisons avec vos pairs et des valeurs de l’ancienne génération. Ces pressions ne cessent d’apparaître… Mais, nous n’avons pas à respecter ces normes. Je peux vivre comme Diogène et dormir dans un seau en bois, profitant du soleil. Je peux vivre comme Héraclite dans une grotte, en pensant au “logos”. S’allonger par terre est mon mouvement philosophique. Ce n’est qu’en s’allongeant par terre sur le dos à plât que l’homme peut devenir la mesure de toutes choses.</em></p>

<p>Luo gagne de l’argent grâce à des petits boulots, qui implique précisément de rester allonger sur le dos - l’un de ses petits boulots consiste à être un figurant dans des films, dans lesquels il joue parfois un cadavre.</p>

<p>Dans une interview, il déclare qu’il passe la plupart de son temps à nager et à lire des livres.</p>

<p>Les internautes se sont identifiés comme des “lying flatism”, publiant des photos de chats et de phoques allongés sur le dos.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="history" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">Denouncing or changing</title><link href="https://felix-lambert.github.io/posts/2024/05/07/denouncing-or-changing/" rel="alternate" type="text/html" title="Denouncing or changing" /><published>2024-05-07T06:18:00-04:00</published><updated>2024-05-07T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2024/05/07/denouncing-or-changing</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2024/05/07/denouncing-or-changing/"><![CDATA[<p>When we feel indignation, it’s natural to point out what’s wrong. Yet, real change is like adjusting in a band when the music isn’t flowing. If our dignity is challenged and harmony is unattainable with some, we don’t have to force it. Instead, we step away from the discord and seek a new type of harmony with those who are open to a more constructive rhythm.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="technology" /><summary type="html"><![CDATA[When we feel indignation, it’s natural to point out what’s wrong. Yet, real change is like adjusting in a band when the music isn’t flowing. If our dignity is challenged and harmony is unattainable with some, we don’t have to force it. Instead, we step away from the discord and seek a new type of harmony with those who are open to a more constructive rhythm.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">Resist nostalgia</title><link href="https://felix-lambert.github.io/posts/2023/06/20/avoid-nostalgia/" rel="alternate" type="text/html" title="Resist nostalgia" /><published>2023-06-20T06:18:00-04:00</published><updated>2023-06-20T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2023/06/20/avoid-nostalgia</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2023/06/20/avoid-nostalgia/"><![CDATA[<p>Maybe in our culture nostalgia is a real problem for building the future. We tend to idealize the 80s or the 90s for example and have some kind of romantic fascination with the past. And probably, in the future we’ll idealize today. Maybe this is a symptom showing how much we have trouble appreciating what is in front of us. But we have everything today: we can easily connect with each other and have conversations with anybody, available to listen. We can access all the cultures of the world for free to build ourselves as individuals. We basically have all the necessary tools for building new projects. So why coming back to the past? Why do we sometimes have this feeling of nostalgia?</p>

<p>Ian Bogost is wondering why we don’t have the same level of fascination of the objects of today as the objects of the 70s or the 80s. Isn’t the personal computer an amazing tool? The internet box or the game console, motivating you for your fitness is actually really important for us and beautiful. Or your smartphone with all the apps that are helping you daily getting better could be a tool as important as the light bulb or the printer.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="technology" /><summary type="html"><![CDATA[Maybe in our culture nostalgia is a real problem for building the future. We tend to idealize the 80s or the 90s for example and have some kind of romantic fascination with the past. And probably, in the future we’ll idealize today. Maybe this is a symptom showing how much we have trouble appreciating what is in front of us. But we have everything today: we can easily connect with each other and have conversations with anybody, available to listen. We can access all the cultures of the world for free to build ourselves as individuals. We basically have all the necessary tools for building new projects. So why coming back to the past? Why do we sometimes have this feeling of nostalgia?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="fr"><title type="html">Comment changer?</title><link href="https://felix-lambert.github.io/posts/2023/06/20/comment-changer/" rel="alternate" type="text/html" title="Comment changer?" /><published>2023-06-20T06:18:00-04:00</published><updated>2023-06-20T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2023/06/20/comment-changer</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2023/06/20/comment-changer/"><![CDATA[<p>Les dynamismes du changement peuvent aujourd’hui venir de partout, de chaque individu. Il peut suffire de rester chez soi et de refuser de retourner au travail après la crise du Covid pour déclencher une révolution de la mobilité, peut-être aussi importante que celle d’Internet. De même, s’allonger dans sa chambre sans rien faire ou effectuer des petits boulots temporaires peut servir de protestation contre les exigences familiales ou nationales dans certains pays. On n’est plus dans un système aujourd’hui où il faut monter les escaliers du pouvoir pour changer le monde. On est aujourd’hui dans une société en réseaux. La qualité de la contribution dans ce réseau change la qualité du monde dans lequel on vit. La qualité du web par exemple se construit en fonction de la qualité des contributions des personnes. Alors que faire concrètement ?</p>

<p>Lorsqu’on se retrouve dans une organisation un peu autoritaire et hiérarchisé, il est peut-être intéressant de promouvoir la diversité et d’adopter de nouveaux comportements afin de fournir aux individus de nouvelles opportunités d’action.</p>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="philosophy" /><summary type="html"><![CDATA[Les dynamismes du changement peuvent aujourd’hui venir de partout, de chaque individu. Il peut suffire de rester chez soi et de refuser de retourner au travail après la crise du Covid pour déclencher une révolution de la mobilité, peut-être aussi importante que celle d’Internet. De même, s’allonger dans sa chambre sans rien faire ou effectuer des petits boulots temporaires peut servir de protestation contre les exigences familiales ou nationales dans certains pays. On n’est plus dans un système aujourd’hui où il faut monter les escaliers du pouvoir pour changer le monde. On est aujourd’hui dans une société en réseaux. La qualité de la contribution dans ce réseau change la qualité du monde dans lequel on vit. La qualité du web par exemple se construit en fonction de la qualité des contributions des personnes. Alors que faire concrètement ? Lorsqu’on se retrouve dans une organisation un peu autoritaire et hiérarchisé, il est peut-être intéressant de promouvoir la diversité et d’adopter de nouveaux comportements afin de fournir aux individus de nouvelles opportunités d’action.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="en"><title type="html">Clean code javascript</title><link href="https://felix-lambert.github.io/posts/2023/03/27/clean-code-javascript/" rel="alternate" type="text/html" title="Clean code javascript" /><published>2023-03-27T06:18:00-04:00</published><updated>2023-03-27T06:18:00-04:00</updated><id>https://felix-lambert.github.io/posts/2023/03/27/clean-code-javascript</id><content type="html" xml:base="https://felix-lambert.github.io/posts/2023/03/27/clean-code-javascript/"><![CDATA[<p>SOURCE:</p>

<ul>
  <li><a href="https://github.com/airbnb/javascript">https://github.com/airbnb/javascript</a></li>
  <li><a href="https://google.github.io/styleguide/jsguide.html">https://google.github.io/styleguide/jsguide.html</a></li>
  <li><a href="https://medium.com/@konstankino/2019-reactjs-best-practices-design-patterns-516e1c3ca06a">https://medium.com/@konstankino/2019-reactjs-best-practices-design-patterns-516e1c3ca06a</a></li>
  <li><a href="https://americanexpress.io/clean-code-dirty-code/">https://americanexpress.io/clean-code-dirty-code/</a></li>
  <li><a href="https://dmitripavlutin.com/react-usestate-hook-guide/">https://dmitripavlutin.com/react-usestate-hook-guide/</a></li>
  <li><a href="https://lightsonsoftware.com/writing-code-that-reads-like-a-story/">https://lightsonsoftware.com/writing-code-that-reads-like-a-story/</a></li>
  <li><a href="https://opensource.com/business/15/10/jane-austen-on-python">https://opensource.com/business/15/10/jane-austen-on-python</a></li>
  <li><a href="https://eloquentjavascript.net/Eloquent_JavaScript.pdf">https://eloquentjavascript.net/Eloquent_JavaScript.pdf</a></li>
</ul>

<p>At its core, the ultimate objective of code is to be comprehensible by both machines and humans alike. If you communicate ideas in a way that only you can understand, it becomes impractical for others to utilize or build upon your work. Therefore, when creating a variable or any other code, it is crucial to consider whether it will enhance the readability and predictability of the code for the next developer. This helps to ensure that the code is easily understood and maintainable, facilitating collaboration and progress.</p>

<p>Metaphorically viewing code as a story can be an effective way to create clean and comprehensible code. Just as a poorly written story can be difficult for an audience to read and understand, code that is not easy to read can be a frustrating experience for developers. If the code is unclear or convoluted, it becomes challenging to work with, explain to others, and adapt in the future. Therefore, striving to write code that tells a clear and concise story can improve its readability and facilitate collaboration and progress.</p>

<p>Clean code can be summed up as simple code, nothing more. Even if you find yourself repeating certain code segments without abstraction, as long as the code remains straightforward and uncomplicated, it doesn’t matter.</p>

<h1 id="naming">Naming</h1>

<h2 id="use-meaningful-and-pronounceable-variable-names">Use meaningful and pronounceable variable names</h2>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">let</span> <span class="nx">d</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">elapsed</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">ages</span> <span class="o">=</span> <span class="nx">arr</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">i</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="nx">i</span><span class="p">.</span><span class="nx">age</span><span class="p">);</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">let</span> <span class="nx">daysSinceModification</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">agesOfUsers</span> <span class="o">=</span> <span class="nx">users</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">user</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="nx">user</span><span class="p">.</span><span class="nx">age</span><span class="p">);</span>
</code></pre></div></div>

<h2 id="make-meaningful-distinctions-and-dont-add-extra-unnecessary-nouns-to-the-variable-name">Make meaningful distinctions and don’t add extra, unnecessary nouns to the variable name</h2>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">let</span> <span class="nx">nameString</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">theUsers</span><span class="p">;</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">let</span> <span class="nx">name</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">users</span><span class="p">;</span>
</code></pre></div></div>

<h2 id="make-your-variable-names-easy-to-pronounce-because-for-the-human-mind-it-takes-less-effort-to-process">Make your variable names easy to pronounce, because for the human mind it takes less effort to process</h2>

<p>In short, don’t cause extra mental mapping with your names.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">let</span> <span class="nx">fName</span><span class="p">,</span> <span class="nx">lName</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">cntr</span><span class="p">;</span>

<span class="kd">let</span> <span class="nx">full</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">cart</span><span class="p">.</span><span class="nx">size</span> <span class="o">&gt;</span> <span class="mi">100</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">full</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">let</span> <span class="nx">firstName</span><span class="p">,</span> <span class="nx">lastName</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">counter</span><span class="p">;</span>

<span class="kd">const</span> <span class="nx">MAX_CART_SIZE</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
<span class="c1">// ...</span>
<span class="kd">const</span> <span class="nx">isFull</span> <span class="o">=</span> <span class="nx">cart</span><span class="p">.</span><span class="nx">size</span> <span class="o">&gt;</span> <span class="nx">MAX_CART_SIZE</span><span class="p">;</span>
</code></pre></div></div>

<h2 id="use-searchable-names">Use searchable names</h2>

<p>We will read more code than we will ever write. It’s important that the code we do write is readable and searchable. By not naming variables that end up being meaningful for understanding our program, we hurt our readers. Make your names searchable.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// What the heck is 86400000 for?</span>
<span class="nx">setTimeout</span><span class="p">(</span><span class="nx">blastOff</span><span class="p">,</span> <span class="mi">86400000</span><span class="p">);</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Declare them as capitalized named constants.</span>
<span class="kd">const</span> <span class="nx">MILLISECONDS_IN_A_DAY</span> <span class="o">=</span> <span class="mi">86400000</span><span class="p">;</span>

<span class="nx">setTimeout</span><span class="p">(</span><span class="nx">blastOff</span><span class="p">,</span> <span class="nx">MILLISECONDS_IN_A_DAY</span><span class="p">);</span>
</code></pre></div></div>

<h2 id="use-explanatory-variables">Use explanatory variables</h2>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">address</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">One Infinite Loop, Cupertino 95014</span><span class="dl">"</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">cityZipCodeRegex</span> <span class="o">=</span> <span class="sr">/^</span><span class="se">[^</span><span class="sr">,</span><span class="se">\\]</span><span class="sr">+</span><span class="se">[</span><span class="sr">,</span><span class="se">\\\s]</span><span class="sr">+</span><span class="se">(</span><span class="sr">.+</span><span class="se">?)\s</span><span class="sr">*</span><span class="se">(\d{5})?</span><span class="sr">$/</span><span class="p">;</span>
<span class="nx">saveCityZipCode</span><span class="p">(</span>
  <span class="nx">address</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">cityZipCodeRegex</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span>
  <span class="nx">address</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">cityZipCodeRegex</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
<span class="p">);</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">address</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">One Infinite Loop, Cupertino 95014</span><span class="dl">"</span><span class="p">;</span>
<span class="kd">const</span> <span class="nx">cityZipCodeRegex</span> <span class="o">=</span> <span class="sr">/^</span><span class="se">[^</span><span class="sr">,</span><span class="se">\\]</span><span class="sr">+</span><span class="se">[</span><span class="sr">,</span><span class="se">\\\s]</span><span class="sr">+</span><span class="se">(</span><span class="sr">.+</span><span class="se">?)\s</span><span class="sr">*</span><span class="se">(\d{5})?</span><span class="sr">$/</span><span class="p">;</span>
<span class="kd">const</span> <span class="p">[,</span> <span class="nx">city</span><span class="p">,</span> <span class="nx">zipCode</span><span class="p">]</span> <span class="o">=</span> <span class="nx">address</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">cityZipCodeRegex</span><span class="p">)</span> <span class="o">||</span> <span class="p">[];</span>
<span class="nx">saveCityZipCode</span><span class="p">(</span><span class="nx">city</span><span class="p">,</span> <span class="nx">zipCode</span><span class="p">);</span>
</code></pre></div></div>

<h2 id="avoid-mental-mapping">Avoid Mental Mapping</h2>

<p>Explicit is better than implicit.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">locations</span> <span class="o">=</span> <span class="p">[</span><span class="dl">"</span><span class="s2">Austin</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">New York</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">San Francisco</span><span class="dl">"</span><span class="p">];</span>
<span class="nx">locations</span><span class="p">.</span><span class="nx">forEach</span><span class="p">((</span><span class="nx">l</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="nx">doStuff</span><span class="p">();</span>
  <span class="nx">doSomeOtherStuff</span><span class="p">();</span>
  <span class="c1">// ...</span>
  <span class="c1">// ...</span>
  <span class="c1">// ...</span>
  <span class="c1">// Wait, what is `l` for again?</span>
  <span class="nx">dispatch</span><span class="p">(</span><span class="nx">l</span><span class="p">);</span>
<span class="p">});</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">locations</span> <span class="o">=</span> <span class="p">[</span><span class="dl">"</span><span class="s2">Austin</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">New York</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">San Francisco</span><span class="dl">"</span><span class="p">];</span>
<span class="nx">locations</span><span class="p">.</span><span class="nx">forEach</span><span class="p">((</span><span class="nx">location</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="nx">doStuff</span><span class="p">();</span>
  <span class="nx">doSomeOtherStuff</span><span class="p">();</span>
  <span class="c1">// ...</span>
  <span class="c1">// ...</span>
  <span class="c1">// ...</span>
  <span class="nx">dispatch</span><span class="p">(</span><span class="nx">location</span><span class="p">);</span>
<span class="p">});</span>
</code></pre></div></div>

<h2 id="use-the-same-vocabulary-for-the-same-type-of-variable">Use the same vocabulary for the same type of variable</h2>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">getUserInfo</span><span class="p">();</span>
<span class="nx">getClientData</span><span class="p">();</span>
<span class="nx">getCustomerRecord</span><span class="p">();</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">getUser</span><span class="p">();</span>
</code></pre></div></div>

<h2 id="function-names-should-say-what-they-do">Function names should say what they do</h2>

<p>Use long, descriptive names. A long descriptive name is way better than a short, enigmatic name or a long descriptive comment.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">addToDate</span><span class="p">(</span><span class="nx">date</span><span class="p">,</span> <span class="nx">month</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>

<span class="kd">const</span> <span class="nx">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">();</span>

<span class="c1">// It's hard to tell from the function name what is added</span>
<span class="nx">addToDate</span><span class="p">(</span><span class="nx">date</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">inv</span><span class="p">(</span><span class="nx">user</span><span class="p">)</span> <span class="p">{</span>
  <span class="cm">/* implementation */</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">addMonthToDate</span><span class="p">(</span><span class="nx">month</span><span class="p">,</span> <span class="nx">date</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>

<span class="kd">const</span> <span class="nx">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">();</span>
<span class="nx">addMonthToDate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">date</span><span class="p">);</span>
</code></pre></div></div>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">inviteUser</span><span class="p">(</span><span class="nx">emailAddress</span><span class="p">)</span> <span class="p">{</span>
  <span class="cm">/* implementation */</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="functions-should-be-named-for-what-they-do-not-how-they-do-it">Functions should be named for what they do, not how they do it</h2>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="kd">const</span> <span class="nx">loadConfigFromServer</span> <span class="o">=</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="p">...</span>
<span class="p">};</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// good</span>
<span class="kd">const</span> <span class="nx">loadConfig</span> <span class="o">=</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="p">...</span>
<span class="p">};</span>
</code></pre></div></div>

<h1 id="dont-indent-unnecessarily">Don’t indent unnecessarily</h1>

<p>Too many nested indentations often create a distorted view of its complexity.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">processItems</span><span class="p">(</span><span class="nx">list</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="p">[];</span>

  <span class="k">if</span> <span class="p">(</span><span class="nx">items</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">normalize</span><span class="p">(</span><span class="nx">items</span><span class="p">);</span>
    <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">len</span> <span class="o">=</span> <span class="nx">items</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">index</span> <span class="o">&lt;</span> <span class="nx">len</span><span class="p">;</span> <span class="o">++</span><span class="nx">index</span><span class="p">)</span> <span class="p">{</span>
      <span class="c1">// long code…</span>
    <span class="p">}</span>
  <span class="p">}</span>

  <span class="k">return</span> <span class="nx">result</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">processItems</span><span class="p">(</span><span class="nx">list</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="p">[];</span>

  <span class="k">if</span> <span class="p">(</span><span class="nx">items</span><span class="p">.</span><span class="nx">length</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">return</span> <span class="nx">result</span><span class="p">;</span>

  <span class="nx">normalize</span><span class="p">(</span><span class="nx">items</span><span class="p">);</span>
  <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">len</span> <span class="o">=</span> <span class="nx">items</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">index</span> <span class="o">&lt;</span> <span class="nx">len</span><span class="p">;</span> <span class="o">++</span><span class="nx">index</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// long code…</span>
  <span class="p">}</span>

  <span class="k">return</span> <span class="nx">result</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<h1 id="functions">Functions</h1>

<h2 id="use-default-arguments-instead-of-short-circuiting-or-conditionals">Use default arguments instead of short circuiting or conditionals</h2>

<p>Default arguments are often cleaner than short circuiting. Be aware that if you use them, your function will only provide default values for undefined arguments. Other “falsy” values such as ‘’, “”, false, null, 0, and NaN, will not be replaced by a default value.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">createMicrobrewery</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">breweryName</span> <span class="o">=</span> <span class="nx">name</span> <span class="o">||</span> <span class="dl">"</span><span class="s2">Hipster Brew Co.</span><span class="dl">"</span><span class="p">;</span>
  <span class="c1">// ...</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">createMicrobrewery</span><span class="p">(</span><span class="nx">name</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">Hipster Brew Co.</span><span class="dl">"</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="function-arguments-2-or-fewer-ideally">Function arguments (2 or fewer ideally)</h2>

<p>Usually, if you have more than two arguments then your function is trying to do too much. In cases where it’s not, most of the time a higher-level object will suffice as an argument.
Since JavaScript allows you to make objects on the fly, without a lot of class boilerplate, you can use an object if you are finding yourself needing a lot of arguments.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">createMenu</span><span class="p">(</span><span class="nx">title</span><span class="p">,</span> <span class="nx">body</span><span class="p">,</span> <span class="nx">buttonText</span><span class="p">,</span> <span class="nx">cancellable</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">createMenu</span><span class="p">({</span> <span class="nx">title</span><span class="p">,</span> <span class="nx">body</span><span class="p">,</span> <span class="nx">buttonText</span><span class="p">,</span> <span class="nx">cancellable</span> <span class="p">})</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>

<span class="nx">createMenu</span><span class="p">({</span>
  <span class="na">title</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Foo</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">body</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Bar</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">buttonText</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Baz</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">cancellable</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
<span class="p">});</span>
</code></pre></div></div>

<h2 id="functions-should-do-one-thing">Functions should do one thing</h2>

<p>This is by far the most important rule in software engineering. When functions do more than one thing, they are harder to reason about. When you can isolate a function to just one action, your code will read much cleaner.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">emailClients</span><span class="p">(</span><span class="nx">clients</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">clients</span><span class="p">.</span><span class="nx">forEach</span><span class="p">((</span><span class="nx">client</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">clientRecord</span> <span class="o">=</span> <span class="nx">database</span><span class="p">.</span><span class="nx">lookup</span><span class="p">(</span><span class="nx">client</span><span class="p">);</span>
    <span class="k">if</span> <span class="p">(</span><span class="nx">clientRecord</span><span class="p">.</span><span class="nx">isActive</span><span class="p">())</span> <span class="p">{</span>
      <span class="nx">email</span><span class="p">(</span><span class="nx">client</span><span class="p">);</span>
    <span class="p">}</span>
  <span class="p">});</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">emailActiveClients</span><span class="p">(</span><span class="nx">clients</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">clients</span><span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nx">isActiveClient</span><span class="p">).</span><span class="nx">forEach</span><span class="p">(</span><span class="nx">email</span><span class="p">);</span>
<span class="p">}</span>

<span class="kd">function</span> <span class="nx">isActiveClient</span><span class="p">(</span><span class="nx">client</span><span class="p">)</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">clientRecord</span> <span class="o">=</span> <span class="nx">database</span><span class="p">.</span><span class="nx">lookup</span><span class="p">(</span><span class="nx">client</span><span class="p">);</span>
  <span class="k">return</span> <span class="nx">clientRecord</span><span class="p">.</span><span class="nx">isActive</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div></div>

<h1 id="objects">Objects</h1>

<h2 id="dont-add-unneeded-context">Don’t add unneeded context</h2>

<p>If your class/object name tells you something, don’t repeat that in your variable name.
Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">Car</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">carMake</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Honda</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">carModel</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Accord</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">carColor</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Blue</span><span class="dl">"</span><span class="p">,</span>
<span class="p">};</span>
</code></pre></div></div>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">paintCar</span><span class="p">(</span><span class="nx">car</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">car</span><span class="p">.</span><span class="nx">carColor</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">Red</span><span class="dl">"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">Car</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">make</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Honda</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">model</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Accord</span><span class="dl">"</span><span class="p">,</span>
  <span class="na">color</span><span class="p">:</span> <span class="dl">"</span><span class="s2">Blue</span><span class="dl">"</span><span class="p">,</span>
<span class="p">};</span>

<span class="kd">function</span> <span class="nx">paintCar</span><span class="p">(</span><span class="nx">car</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">car</span><span class="p">.</span><span class="nx">color</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">Red</span><span class="dl">"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="dont-use-flags-as-function-parameters">Don’t use flags as function parameters</h2>

<p>Flags tell your user that this function does more than one thing. Functions should do one thing. Split out your functions if they are following different code paths based on a boolean.</p>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">createFile</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">temp</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">if</span> <span class="p">(</span><span class="nx">temp</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">fs</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="s2">`./temp/</span><span class="p">${</span><span class="nx">name</span><span class="p">}</span><span class="s2">`</span><span class="p">);</span>
  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
    <span class="nx">fs</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">name</span><span class="p">);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">createFile</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">fs</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">name</span><span class="p">);</span>
<span class="p">}</span>

<span class="kd">function</span> <span class="nx">createTempFile</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">createFile</span><span class="p">(</span><span class="s2">`./temp/</span><span class="p">${</span><span class="nx">name</span><span class="p">}</span><span class="s2">`</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="encapsulate-conditionals">Encapsulate conditionals</h2>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span> <span class="p">(</span><span class="nx">fsm</span><span class="p">.</span><span class="nx">state</span> <span class="o">===</span> <span class="dl">"</span><span class="s2">fetching</span><span class="dl">"</span> <span class="o">&amp;&amp;</span> <span class="nx">isEmpty</span><span class="p">(</span><span class="nx">listNode</span><span class="p">))</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">shouldShowSpinner</span><span class="p">(</span><span class="nx">fsm</span><span class="p">,</span> <span class="nx">listNode</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">return</span> <span class="nx">fsm</span><span class="p">.</span><span class="nx">state</span> <span class="o">===</span> <span class="dl">"</span><span class="s2">fetching</span><span class="dl">"</span> <span class="o">&amp;&amp;</span> <span class="nx">isEmpty</span><span class="p">(</span><span class="nx">listNode</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">if</span> <span class="p">(</span><span class="nx">shouldShowSpinner</span><span class="p">(</span><span class="nx">fsmInstance</span><span class="p">,</span> <span class="nx">listNodeInstance</span><span class="p">))</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="avoid-negative-conditionals">Avoid negative conditionals</h2>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">isDOMNodeNotPresent</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>

<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">isDOMNodeNotPresent</span><span class="p">(</span><span class="nx">node</span><span class="p">))</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">isDOMNodePresent</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>

<span class="k">if</span> <span class="p">(</span><span class="nx">isDOMNodePresent</span><span class="p">(</span><span class="nx">node</span><span class="p">))</span> <span class="p">{</span>
  <span class="c1">// ...</span>
<span class="p">}</span>
</code></pre></div></div>

<h1 id="error-handling">Error Handling</h1>

<p>Thrown errors are a good thing! They mean the runtime has successfully identified when something in your program has gone wrong and it’s letting you know by stopping function execution on the current stack, killing the process (in Node), and notifying you in the console with a stack trace.</p>

<h1 id="build-on-the-shoulders-of-giants">Build on the shoulders of giants</h1>

<h2 id="react">React</h2>

<h3 id="the-dom">The DOM</h3>

<p>We want to touch the DOM as little as possible. The DOM is a very complex API and rendering in browsers can take up a lot of time.</p>

<h3 id="separate-stateful-aspects-from-rendering">Separate stateful aspects from rendering</h3>

<p>Bad:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">class</span> <span class="nx">User</span> <span class="kd">extends</span> <span class="nx">Component</span> <span class="p">{</span>
  <span class="nx">state</span> <span class="o">=</span> <span class="p">{</span> <span class="na">loading</span><span class="p">:</span> <span class="kc">true</span> <span class="p">};</span>

  <span class="nx">render</span><span class="p">()</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="p">{</span> <span class="nx">loading</span><span class="p">,</span> <span class="nx">user</span> <span class="p">}</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">;</span>
    <span class="k">return</span> <span class="nx">loading</span> <span class="p">?</span> <span class="p">(</span>
      <span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span><span class="nx">Loading</span><span class="p">...</span><span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>    <span class="p">)</span> <span class="p">:</span> <span class="p">(</span>
      <span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span><span class="nx">First</span> <span class="nx">name</span><span class="p">:</span> <span class="p">{</span><span class="nx">user</span><span class="p">.</span><span class="nx">firstName</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>        <span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span><span class="nx">First</span> <span class="nx">name</span><span class="p">:</span> <span class="p">{</span><span class="nx">user</span><span class="p">.</span><span class="nx">lastName</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>        <span class="p">...</span>
      <span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>    <span class="p">);</span>
  <span class="p">}</span>

  <span class="nx">componentDidMount</span><span class="p">()</span> <span class="p">{</span>
    <span class="nx">fetchUser</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">id</span><span class="p">).</span><span class="nx">then</span><span class="p">((</span><span class="nx">user</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
      <span class="k">this</span><span class="p">.</span><span class="nx">setState</span><span class="p">({</span> <span class="na">loading</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">user</span> <span class="p">});</span>
    <span class="p">});</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Good:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">class</span> <span class="nx">User</span> <span class="kd">extends</span> <span class="nx">Component</span> <span class="p">{</span>
  <span class="nx">state</span> <span class="o">=</span> <span class="p">{</span> <span class="na">loading</span><span class="p">:</span> <span class="kc">true</span> <span class="p">};</span>

  <span class="nx">render</span><span class="p">()</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="p">{</span> <span class="nx">loading</span><span class="p">,</span> <span class="nx">user</span> <span class="p">}</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">state</span><span class="p">;</span>
    <span class="k">return</span> <span class="nx">loading</span> <span class="p">?</span> <span class="o">&lt;</span><span class="nx">Loading</span> <span class="o">/&gt;</span> <span class="p">:</span> <span class="o">&lt;</span><span class="nx">RenderUser</span> <span class="nx">user</span><span class="o">=</span><span class="p">{</span><span class="nx">user</span><span class="p">}</span> <span class="sr">/&gt;</span><span class="err">;
</span>  <span class="p">}</span>

  <span class="nx">componentDidMount</span><span class="p">()</span> <span class="p">{</span>
    <span class="nx">fetchUser</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">props</span><span class="p">.</span><span class="nx">id</span><span class="p">).</span><span class="nx">then</span><span class="p">((</span><span class="nx">user</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
      <span class="k">this</span><span class="p">.</span><span class="nx">setState</span><span class="p">({</span> <span class="na">loading</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">user</span> <span class="p">});</span>
    <span class="p">});</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>]]></content><author><name>Felix Lambert</name><email>lambertfelix8@gmail.com</email></author><category term="technology" /><summary type="html"><![CDATA[SOURCE:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://felix-lambert.github.io/assets/img/og-card.png" /><media:content medium="image" url="https://felix-lambert.github.io/assets/img/og-card.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>