<?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>Forem: Jacob Stern</title>
    <description>The latest articles on Forem by Jacob Stern (@jacobdavidstern).</description>
    <link>https://forem.com/jacobdavidstern</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%2F1702046%2Fa62ed9ef-b0c3-44c6-8604-20b3694e6b6c.jpeg</url>
      <title>Forem: Jacob Stern</title>
      <link>https://forem.com/jacobdavidstern</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jacobdavidstern"/>
    <language>en</language>
    <item>
      <title>Credit Card Validator Challenge</title>
      <dc:creator>Jacob Stern</dc:creator>
      <pubDate>Mon, 16 Sep 2024 07:36:42 +0000</pubDate>
      <link>https://forem.com/jacobdavidstern/day-77-100-days-of-code-credit-card-validator-challenge-93m</link>
      <guid>https://forem.com/jacobdavidstern/day-77-100-days-of-code-credit-card-validator-challenge-93m</guid>
      <description>&lt;p&gt;Sun, September 15, 2024&lt;/p&gt;

&lt;p&gt;(Originally published as part of a 100 Days of Code series. Revised for clarity and purpose.)&lt;/p&gt;

&lt;p&gt;This week has been all about code challenges, which has been glorious! One intriguing challenge was implementing a credit card validator using the Luhn algorithm, which prevents single-digit errors and adjacent transpositions like &lt;code&gt;90 → 09&lt;/code&gt;. Coding the Luhn algorithm is straightforward once you break it down—so let’s walk through my implementation.&lt;/p&gt;

&lt;p&gt;It turned out to be a great excuse to lean into some Functional Programming (FP). Instead of an imperative function where you queue up credit card numbers to test, the verification becomes a method you apply directly to credit card number variables. This modular approach increases the value of your code because it can be reused in more contexts without rewriting. One side effect of FP is that data becomes the star—not functions—which ends up looking very streamlined.&lt;/p&gt;

&lt;p&gt;I kicked things off with an arrow function to stay aligned with the FP paradigm. While arrow functions shine in one-liners, they’re still a solid choice for readability and modern style.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Set Aside the Last Digit: Starting with the example number &lt;code&gt;4539 1488 0343 6467&lt;/code&gt;, we isolate the last digit (&lt;code&gt;7&lt;/code&gt;) and store it in a variable called &lt;code&gt;lastDigit&lt;/code&gt;. This is done with the common pattern &lt;code&gt;array.length - 1&lt;/code&gt;, which grabs the final element in a zero-indexed array.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reverse the Array: With the last digit set aside, we take the rest of the number—&lt;code&gt;4539 1488 0343 646&lt;/code&gt;—and reverse it. That gives us: &lt;code&gt;6463 3408 8841 9354&lt;/code&gt;, which we store in a new array named &lt;code&gt;allExceptLastReversed&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Double Every Other Element: Starting from index &lt;code&gt;0&lt;/code&gt;, we double every other digit in the reversed array. So values like &lt;code&gt;6 → 12&lt;/code&gt;, &lt;code&gt;4 → 4&lt;/code&gt;, &lt;code&gt;6 → 12&lt;/code&gt;, &lt;code&gt;3 → 3&lt;/code&gt;, and so on. If a doubled number is greater than &lt;code&gt;9&lt;/code&gt;, we subtract 9 to keep it in single digits (e.g., &lt;code&gt;12 → 3&lt;/code&gt;). The array becomes something like &lt;code&gt;[3, 4, 3, 3, ...]&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sum the Elements and Validate: Next, we sum all the adjusted digits using &lt;code&gt;reduce&lt;/code&gt;, add back the &lt;code&gt;lastDigit&lt;/code&gt; (&lt;code&gt;7&lt;/code&gt;), and check if the total is divisible by 10. If it is, the number passes the Luhn check.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This challenge was a fun way to work with both functional and imperative styles. It also reinforced how nice it is when your code stays flexible and easy to reuse. I'm looking forward to tackling more of these bite-sized problems and seeing what new patterns and tricks pop up along the way.&lt;/p&gt;

&lt;p&gt;Here’s the complete code:&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;const&lt;/span&gt; &lt;span class="nx"&gt;validateCred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cardNumber&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lastDigit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cardNumber&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;cardNumber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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;allExceptLastReversed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cardNumber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;for &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;i&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="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;allExceptLastReversed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="nx"&gt;allExceptLastReversed&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;allExceptLastReversed&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;allExceptLastReversed&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;allExceptLastReversed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;lastDigit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="c1"&gt;// sum all digits&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;10&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="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Iterating with Methods</title>
      <dc:creator>Jacob Stern</dc:creator>
      <pubDate>Fri, 06 Sep 2024 07:44:58 +0000</pubDate>
      <link>https://forem.com/jacobdavidstern/day-67-100-days-of-code-iterating-with-methods-41hc</link>
      <guid>https://forem.com/jacobdavidstern/day-67-100-days-of-code-iterating-with-methods-41hc</guid>
      <description>&lt;p&gt;Thu, September 5, 2024&lt;/p&gt;

&lt;p&gt;(Originally published as part of a 100 Days of Code series. Revised for clarity and purpose.)&lt;/p&gt;

&lt;p&gt;Iterators are yet another JavaScript power tool. Today’s assignment was titled Iterators: &lt;code&gt;.forEach()&lt;/code&gt;, &lt;code&gt;.map()&lt;/code&gt;, &lt;code&gt;.findIndex()&lt;/code&gt;, &lt;code&gt;.filter()&lt;/code&gt;, and &lt;code&gt;.reduce()&lt;/code&gt;, but to be clear—these are methods that use iterators behind the scenes to do their work.&lt;/p&gt;

&lt;p&gt;Here’s a quick rundown of what each one does:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.forEach()&lt;/code&gt;: Runs a function on each element (but doesn’t return anything)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.map()&lt;/code&gt;: Creates a new array by transforming each element&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.findIndex()&lt;/code&gt;: Returns the index of the first element that matches a condition&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.reduce()&lt;/code&gt;: Combines elements into a single value (like a sum or total)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.filter()&lt;/code&gt;: Returns a new array with only the elements that meet a condition&lt;/p&gt;

&lt;p&gt;These methods are part of the Array prototype and handle the repetitive looping for you, letting you focus on the actual data instead.&lt;/p&gt;

&lt;p&gt;After trying them all out, &lt;code&gt;.filter()&lt;/code&gt; stood out the most for me. It’s clean, powerful, and super flexible—it lets you carve out subsets from an array based on any condition you want. For example, you can use it to pull all elements greater than a certain value, or to isolate all objects with a matching property. It reminds me a little of a factory function: same input shape, different outputs depending on the logic.&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;const&lt;/span&gt; &lt;span class="nx"&gt;bigNumbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;148&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;918&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// Using filter() to get all elements above 200&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allAbove200&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bigNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;200&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;allAbove200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: [256, 384, 918, 512]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Destructured Assignment</title>
      <dc:creator>Jacob Stern</dc:creator>
      <pubDate>Tue, 03 Sep 2024 22:12:34 +0000</pubDate>
      <link>https://forem.com/jacobdavidstern/day-64-100-days-of-code-1haa</link>
      <guid>https://forem.com/jacobdavidstern/day-64-100-days-of-code-1haa</guid>
      <description>&lt;p&gt;Mon, Sep 2, 2024&lt;/p&gt;

&lt;p&gt;(Originally published as part of a 100 Days of Code series. Revised for clarity and purpose.)&lt;/p&gt;

&lt;p&gt;One key thing about most programming languages is that they’re backward compatible. This means old code usually keeps working years—even decades—after it was written. That’s important because we want proven, reliable code running critical systems like Air Traffic Safety Control. But just because languages protect legacy code doesn’t mean they stop evolving.&lt;/p&gt;

&lt;p&gt;JavaScript is based on the ECMAScript standard, which gets updated every year or two. The biggest update so far was ES6 in 2016, and since 2017 all major browsers support it. JavaScript used to be just for browsers, but in 2009 Node.js brought it to app developers everywhere.&lt;/p&gt;

&lt;p&gt;I’ve talked before about arrow functions and &lt;code&gt;for..in&lt;/code&gt; / &lt;code&gt;for..of&lt;/code&gt; loops, which changed how JavaScript handles data compared to traditional programming. But that’s just the beginning—JavaScript has some really powerful features under the hood. Remember, an object is a collection of properties and functions. Here’s an example featuring the Millennium Falcon (see footnote):&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;// Example: The Millennium Falcon, see Footnote&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;millenniumFalcon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;modelNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YT-1300F&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;yearOfProduction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;56 BBY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Before the Battle of Yavin&lt;/span&gt;
  &lt;span class="na"&gt;engineCapacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2 Girodyne SRB42 sublight engines&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;rateOfTravel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;atmosphericSpeed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1,200 km/h&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;spaceSpeed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3,000 G&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hyperdrive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.5 HCR (Hyperdrive Class Rating)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;currentSpeed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;800 km/h&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Example current speed&lt;/span&gt;
  &lt;span class="nf"&gt;logCurrentSpeed&lt;/span&gt;&lt;span class="p"&gt;()&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Current Millennium Falcon speed: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentSpeed&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;millenniumFalcon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;logCurrentSpeed&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// Output: Current Millennium Falcon speed: 800 km/h.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;this&lt;/code&gt; keyword lets a method access data from the specific object it belongs to. Without this, the method wouldn’t find currentSpeed and would return &lt;code&gt;undefined&lt;/code&gt;. So &lt;code&gt;this&lt;/code&gt; provides the right context.&lt;/p&gt;

&lt;p&gt;Just like the Rebel Alliance needs a fleet of starships to fight the Galactic Empire, JavaScript helps us create lots of objects with Factory Functions. Here’s how you can make Starships in bulk. Note: Property Value Shorthand reduces how much you have to type.&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;// Factory function for creating Starships&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createStarship&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lastly, JavaScript has Destructured Assignment, which makes pulling properties out of objects far easier. Compare:&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;const&lt;/span&gt; &lt;span class="nx"&gt;engineCapacity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;millenniumFalcon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;engineCapacity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;engineCapacity&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;millenniumFalcon&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can even grab nested properties like this:&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;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;hyperdrive&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;millenniumFalcon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rateOfTravel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These object features give JavaScript developers powerful tools to write cleaner, more efficient, and easier-to-maintain code. Keep exploring them as you code and see how they can help your projects.&lt;/p&gt;




&lt;p&gt;Footnotes&lt;br&gt;
The Millennium Falcon is an extensively modified Corellian YT-1300 light freighter. Known for its speed and agility, it was mainly used for smuggling before becoming a key asset for the Rebel Alliance.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
