<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shamoil Arsiwala</title>
    <description>The latest articles on DEV Community by Shamoil Arsiwala (@shamoilarsi).</description>
    <link>https://dev.to/shamoilarsi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F399236%2F20cc0bb2-a826-4142-b11d-f5e9262db80d.png</url>
      <title>DEV Community: Shamoil Arsiwala</title>
      <link>https://dev.to/shamoilarsi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shamoilarsi"/>
    <language>en</language>
    <item>
      <title>Nullish Coalescing (??) in Javascript</title>
      <dc:creator>Shamoil Arsiwala</dc:creator>
      <pubDate>Fri, 30 Oct 2020 12:21:06 +0000</pubDate>
      <link>https://dev.to/shamoilarsi/nullish-coalescing-in-javascript-1caj</link>
      <guid>https://dev.to/shamoilarsi/nullish-coalescing-in-javascript-1caj</guid>
      <description>&lt;h3&gt;
  
  
  Basics
&lt;/h3&gt;

&lt;p&gt;Before we start, let's get the basic concepts out of the way.&lt;/p&gt;

&lt;p&gt;There are 6 falsy values in JavaScript which are &lt;code&gt;undefined&lt;/code&gt;, &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;NaN&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;""&lt;/code&gt; , &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;These above values will be taken as a &lt;code&gt;false&lt;/code&gt; value in a condition. &lt;a href="https://www.sitepoint.com/javascript-truthy-falsy/"&gt;learn more&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;We generally use logical OR (&lt;code&gt;||&lt;/code&gt;) operator to return the right operand if the left operand is falsy.&lt;/p&gt;

&lt;p&gt;The syntax goes as &lt;code&gt;leftExpression || rightExpression&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the &lt;code&gt;leftExpression&lt;/code&gt; is truthy, it will be returned.&lt;/p&gt;

&lt;p&gt;If the &lt;code&gt;leftExpression&lt;/code&gt; is falsy, &lt;code&gt;rightExpression&lt;/code&gt; will be returned.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;falsyValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;truthyValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;falsyValue&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;printed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//output: 'printed'&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;truthyValue&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nope&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//output: 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can lead to unexpected issues if you consider &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;""&lt;/code&gt;(empty string) as valid values.&lt;/p&gt;

&lt;p&gt;This is where Nullish Coalescing (&lt;code&gt;??&lt;/code&gt;) operator helps us. It was introduced in ES2020.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nullish Coalescing (??)
&lt;/h3&gt;

&lt;p&gt;Nullish Coalescing (&lt;code&gt;??&lt;/code&gt;) operator is used to return the right expression if left expression is nullish.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A nullish value is a value that is either &lt;code&gt;null&lt;/code&gt; or &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here are some examples of expressions:-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// comments represent the value returned&lt;/span&gt;

&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// 0&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// expressionB&lt;/span&gt;

&lt;span class="dl"&gt;''&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// ''&lt;/span&gt;
&lt;span class="dl"&gt;''&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// expressionB&lt;/span&gt;

&lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// expressionB&lt;/span&gt;
&lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// expressionB&lt;/span&gt;

&lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// expressionB&lt;/span&gt;
&lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// expressionB&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt; &lt;span class="c1"&gt;// same for [] as well&lt;/span&gt;
&lt;span class="nx"&gt;object&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// {}&lt;/span&gt;
&lt;span class="nx"&gt;object&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expressionB&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// {} &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Short-Circuiting
&lt;/h3&gt;

&lt;p&gt;Similar to AND (&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;) and OR (&lt;code&gt;||&lt;/code&gt;) operators, Nullish Coalescing (&lt;code&gt;??&lt;/code&gt;) is also short-circuited meaning it will not execute the right operand if the left operand is neither &lt;code&gt;null&lt;/code&gt; nor &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chaining
&lt;/h3&gt;

&lt;p&gt;Chaining &lt;code&gt;??&lt;/code&gt; with &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; or &lt;code&gt;||&lt;/code&gt; operator will throw a &lt;code&gt;SyntaxError&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Uncaught SyntaxError: Unexpected token '??'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can we avoided by using parentheses to explicitly specify the operator precedences&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "OK"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  References
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.javascripttutorial.net/es-next/javascript-nullish-coalescing-operator"&gt;JavaScript Nullish Coalescing Operator&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>QR based Event Registration Application</title>
      <dc:creator>Shamoil Arsiwala</dc:creator>
      <pubDate>Sat, 05 Sep 2020 18:07:50 +0000</pubDate>
      <link>https://dev.to/shamoilarsi/qr-based-event-registration-application-4e8j</link>
      <guid>https://dev.to/shamoilarsi/qr-based-event-registration-application-4e8j</guid>
      <description>&lt;p&gt;I've been a part of many college events, workshops and seminars. While they have been amazing, their registration process has always been on pen and paper. This makes it difficult to keep track of the number of registrations and the data of those who have registered. The sheet can get lost or torn. &lt;/p&gt;

&lt;p&gt;To solve this issue and make the whole process of registrations easier, I've developed an Android app to manage registrations using QR codes.&lt;/p&gt;

&lt;p&gt;Tech stack used -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;Firebase &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I prefer keeping it open-source so other interested developers can contribute and hence more people can benefit from it.&lt;/p&gt;

&lt;p&gt;The demo apk can be found here - &lt;a href="https://drive.google.com/file/d/1Yul7poaKJm7T3Z9q-jDp2DRR8NmTn2A1/view?usp=sharing"&gt;https://drive.google.com/file/d/1Yul7poaKJm7T3Z9q-jDp2DRR8NmTn2A1/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live demo - &lt;a href="https://www.linkedin.com/posts/shamoilarsi_github-reactnative-firebase-ugcPost-6707919741593415680-fYWw"&gt;https://www.linkedin.com/posts/shamoilarsi_github-reactnative-firebase-ugcPost-6707919741593415680-fYWw&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github Repository - &lt;a href="https://github.com/shamoilarsi/QR-Event-Registration"&gt;https://github.com/shamoilarsi/QR-Event-Registration&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PS - Some work is left on the UI of the app.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>reactnative</category>
      <category>firebase</category>
      <category>qrcodes</category>
    </item>
    <item>
      <title>Mock Aptitude Exam</title>
      <dc:creator>Shamoil Arsiwala</dc:creator>
      <pubDate>Sun, 31 May 2020 19:51:00 +0000</pubDate>
      <link>https://dev.to/shamoilarsi/mock-aptitude-exam-2gal</link>
      <guid>https://dev.to/shamoilarsi/mock-aptitude-exam-2gal</guid>
      <description>&lt;h1&gt;
  
  
  Aptitude Exam
&lt;/h1&gt;

&lt;p&gt;Aptitude exam is a mock test website for MCQs based questions mainly inspired by the MCQ exams held in colleges. &lt;br&gt;
All information is served by a private API I developed. (Links can be found at the end of the post)&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;has a login option where students can log in with their id and password.&lt;/li&gt;
&lt;li&gt;after logging in, the student is asked what category does he want to give the exam in.&lt;/li&gt;
&lt;li&gt;the request for MCQs is sent to the API which returns a JSON object.&lt;/li&gt;
&lt;li&gt;this JSON is parsed to be shown one at a time in the main exam region.&lt;/li&gt;
&lt;li&gt;A timer is started after which the exam will auto-submit.&lt;/li&gt;
&lt;li&gt;MCQ question and the options are displayed. The selected option turns green.&lt;/li&gt;
&lt;li&gt;Questions can be marked for review.&lt;/li&gt;
&lt;li&gt;An overview button shows all question numbers and gives details as to if they're answered and if they're marked for review.&lt;/li&gt;
&lt;li&gt;On submitting, your result is calculated with answers to all questions with explanations.&lt;/li&gt;
&lt;li&gt;also on submitting, your result is sent to the server to be stored in the file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Purpose of the app?
&lt;/h3&gt;

&lt;p&gt;I developed this mock test website mainly to get my hands dirty with React.js and web development in general. &lt;/p&gt;

&lt;h3&gt;
  
  
  Code
&lt;/h3&gt;

&lt;p&gt;React- &lt;a href="https://github.com/shamoilarsi/Mock-Aptitude-Exam"&gt;https://github.com/shamoilarsi/Mock-Aptitude-Exam&lt;/a&gt;&lt;br&gt;
Node- &lt;a href="https://github.com/shamoilarsi/Mock-Aptitude-Exam-API"&gt;https://github.com/shamoilarsi/Mock-Aptitude-Exam-API&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo
&lt;/h3&gt;

&lt;p&gt;Website is live on - &lt;a href="https://aptitude-exam.web.app/"&gt;https://aptitude-exam.web.app/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can find a video showing the flow of the website on &lt;a href="https://www.linkedin.com/posts/shamoilarsi_react-js-reactjs-activity-6672951654880571392-KdFu"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>node</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
