<?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: RealACJoshua</title>
    <description>The latest articles on Forem by RealACJoshua (@realacjoshua).</description>
    <link>https://forem.com/realacjoshua</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%2F1008416%2F7ec55b73-a346-4bd7-9cdf-1017832ed251.jpg</url>
      <title>Forem: RealACJoshua</title>
      <link>https://forem.com/realacjoshua</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/realacjoshua"/>
    <language>en</language>
    <item>
      <title>Edge Computing with Cloudflare Workers: How I Deployed Global APIs Without Cold Starts</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Tue, 24 Feb 2026 15:28:40 +0000</pubDate>
      <link>https://forem.com/realacjoshua/edge-computing-with-cloudflare-workers-how-i-deployed-global-apis-without-cold-starts-3p48</link>
      <guid>https://forem.com/realacjoshua/edge-computing-with-cloudflare-workers-how-i-deployed-global-apis-without-cold-starts-3p48</guid>
      <description>&lt;p&gt;I used to deploy everything to traditional serverless.&lt;/p&gt;

&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;Until it didn’t.&lt;/p&gt;

&lt;p&gt;Cold starts.&lt;br&gt;
Regional latency.&lt;br&gt;
Users far from my deployment region waiting longer than they should.&lt;/p&gt;

&lt;p&gt;Then I tried deploying at the edge.&lt;/p&gt;

&lt;p&gt;Not multi-region.&lt;/p&gt;

&lt;p&gt;Not auto-scaling.&lt;/p&gt;

&lt;p&gt;Actually at the edge.&lt;/p&gt;

&lt;p&gt;And that’s when I started using Cloudflare Workers.&lt;/p&gt;

&lt;p&gt;If you want sub-millisecond global execution without managing infrastructure, here’s what worked for me — including Durable Objects and KV.&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;In this post, I’ll walk you through building and deploying a real API on Cloudflare Workers, using KV for caching and Durable Objects for state — plus how it compares to traditional serverless.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;🎯 What We’re Building&lt;/p&gt;

&lt;p&gt;Workers + KV + Durable Objects = Global Edge API&lt;/p&gt;

&lt;p&gt;We’ll:&lt;/p&gt;

&lt;p&gt;• Deploy a Worker&lt;br&gt;
• Add KV caching&lt;br&gt;
• Use Durable Objects for state&lt;br&gt;
• Compare latency vs traditional serverless&lt;br&gt;
• Understand when edge makes sense&lt;/p&gt;



&lt;p&gt;🧠 First: What “Edge” Actually Means&lt;/p&gt;

&lt;p&gt;With traditional serverless (e.g., AWS Lambda), your function runs in a specific region.&lt;/p&gt;

&lt;p&gt;If your region is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;us-east-1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And your user is in Africa or Asia?&lt;/p&gt;

&lt;p&gt;Latency increases.&lt;/p&gt;

&lt;p&gt;With Cloudflare Workers:&lt;/p&gt;

&lt;p&gt;Your code runs in data centers close to the user.&lt;/p&gt;

&lt;p&gt;Same code.&lt;br&gt;
Executed globally.&lt;/p&gt;

&lt;p&gt;That’s a major architectural shift.&lt;/p&gt;



&lt;p&gt;🛠️ Step 1: Create a Worker&lt;/p&gt;

&lt;p&gt;Install Wrangler:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g wrangler&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Login:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wrangler login&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a new Worker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrangler init edge-api
&lt;span class="nb"&gt;cd &lt;/span&gt;edge-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basic Worker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello from the edge 🚀&lt;/span&gt;&lt;span class="dl"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wrangler deploy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;Your API is now running globally.&lt;/p&gt;

&lt;p&gt;No region configuration.&lt;/p&gt;

&lt;p&gt;No scaling config.&lt;/p&gt;

&lt;p&gt;No cold start provisioning.&lt;/p&gt;




&lt;p&gt;⚡ Performance Comparison: Edge vs Traditional Serverless&lt;/p&gt;

&lt;p&gt;Traditional Serverless:&lt;/p&gt;

&lt;p&gt;• Region-bound&lt;br&gt;
• Cold starts possible&lt;br&gt;
• Network hops to user&lt;br&gt;
• VPC complexity&lt;/p&gt;

&lt;p&gt;Edge Workers:&lt;/p&gt;

&lt;p&gt;• Globally distributed&lt;br&gt;
• No traditional cold starts&lt;br&gt;
• Lower latency&lt;br&gt;
• Runs in V8 isolates&lt;/p&gt;

&lt;p&gt;Workers don’t spin up containers.&lt;/p&gt;

&lt;p&gt;They use lightweight isolates.&lt;/p&gt;

&lt;p&gt;This is why startup time is extremely fast.&lt;/p&gt;

&lt;p&gt;For latency-sensitive APIs?&lt;/p&gt;

&lt;p&gt;This difference is noticeable.&lt;/p&gt;



&lt;p&gt;📦 Step 2: Add KV for Global Caching&lt;/p&gt;

&lt;p&gt;Cloudflare KV is a globally distributed key-value store.&lt;/p&gt;

&lt;p&gt;Use it for:&lt;/p&gt;

&lt;p&gt;• Caching API responses&lt;br&gt;
• Feature flags&lt;br&gt;
• Config data&lt;/p&gt;

&lt;p&gt;Bind KV in wrangler.toml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[[kv_namespaces]]&lt;/span&gt;
&lt;span class="py"&gt;binding&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"CACHE"&lt;/span&gt;
&lt;span class="py"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"your_kv_id"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then in your Worker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&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;cacheKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;homepage_data&lt;/span&gt;&lt;span class="dl"&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;cached&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CACHE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cacheKey&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;cached&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&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;freshData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fresh data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CACHE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cacheKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;freshData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;expirationTtl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;freshData&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;Now:&lt;/p&gt;

&lt;p&gt;• First request = compute&lt;br&gt;
• Next requests = edge cached&lt;br&gt;
• Globally replicated&lt;/p&gt;

&lt;p&gt;KV is eventually consistent.&lt;/p&gt;

&lt;p&gt;So don’t use it for strict transactional data.&lt;/p&gt;



&lt;p&gt;🧠 Step 3: Durable Objects for Stateful Logic&lt;/p&gt;

&lt;p&gt;Workers are stateless by default.&lt;/p&gt;

&lt;p&gt;Durable Objects give you:&lt;/p&gt;

&lt;p&gt;• Strong consistency&lt;br&gt;
• Per-instance state&lt;br&gt;
• Coordination logic&lt;/p&gt;

&lt;p&gt;Use cases:&lt;/p&gt;

&lt;p&gt;• Real-time rooms&lt;br&gt;
• Rate limiting&lt;br&gt;
• Game sessions&lt;br&gt;
• Counters&lt;/p&gt;

&lt;p&gt;Define a Durable Object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&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="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;()&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;value&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&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;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&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;Register in wrangler.toml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[[durable_objects.bindings]]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"COUNTER"&lt;/span&gt;
&lt;span class="py"&gt;class_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Counter"&lt;/span&gt;

&lt;span class="err"&gt;Use&lt;/span&gt; &lt;span class="err"&gt;it&lt;/span&gt; &lt;span class="err"&gt;in&lt;/span&gt; &lt;span class="err"&gt;your&lt;/span&gt; &lt;span class="err"&gt;Worker:&lt;/span&gt;

&lt;span class="err"&gt;export&lt;/span&gt; &lt;span class="err"&gt;default&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
  &lt;span class="err"&gt;async&lt;/span&gt; &lt;span class="err"&gt;fetch(request:&lt;/span&gt; &lt;span class="err"&gt;Request,&lt;/span&gt; &lt;span class="err"&gt;env:&lt;/span&gt; &lt;span class="err"&gt;any)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;const&lt;/span&gt; &lt;span class="py"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="err"&gt;env.COUNTER.idFromName(&lt;/span&gt;&lt;span class="s"&gt;"global"&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;
    &lt;span class="err"&gt;const&lt;/span&gt; &lt;span class="py"&gt;obj&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="err"&gt;env.COUNTER.get(id);&lt;/span&gt;
    &lt;span class="err"&gt;return&lt;/span&gt; &lt;span class="err"&gt;obj.fetch(request);&lt;/span&gt;
  &lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have:&lt;/p&gt;

&lt;p&gt;A globally addressable, stateful object.&lt;/p&gt;

&lt;p&gt;That’s powerful.&lt;/p&gt;

&lt;p&gt;Traditional serverless needs external databases for this.&lt;/p&gt;




&lt;p&gt;🌍 When Edge Wins&lt;/p&gt;

&lt;p&gt;Use Workers when:&lt;/p&gt;

&lt;p&gt;• You need global low latency&lt;br&gt;
• You’re building APIs for worldwide users&lt;br&gt;
• You want simple deployment&lt;br&gt;
• You need fast startup times&lt;br&gt;
• You’re building real-time coordination&lt;/p&gt;




&lt;p&gt;🧱 When Traditional Serverless Still Makes Sense&lt;/p&gt;

&lt;p&gt;Use regional serverless when:&lt;/p&gt;

&lt;p&gt;• You need heavy CPU tasks&lt;br&gt;
• Long-running background jobs&lt;br&gt;
• Deep integration with cloud-native services&lt;br&gt;
• Massive memory workloads&lt;/p&gt;

&lt;p&gt;Edge is not a replacement for everything.&lt;/p&gt;

&lt;p&gt;It’s a precision tool.&lt;/p&gt;




&lt;p&gt;🧩 What About Cloudflare Pages?&lt;/p&gt;

&lt;p&gt;Cloudflare Pages is great for static + frontend hosting.&lt;/p&gt;

&lt;p&gt;You can combine:&lt;/p&gt;

&lt;p&gt;Pages (frontend)&lt;/p&gt;

&lt;p&gt;Workers (API logic)&lt;/p&gt;

&lt;p&gt;But for backend logic, Workers are the real engine.&lt;/p&gt;




&lt;p&gt;⚠️ Mistakes I Made&lt;/p&gt;

&lt;p&gt;• Treating KV like a relational database&lt;br&gt;
• Forgetting eventual consistency&lt;br&gt;
• Storing large blobs unnecessarily&lt;br&gt;
• Not understanding Durable Object locality&lt;/p&gt;

&lt;p&gt;Understand your consistency model.&lt;/p&gt;

&lt;p&gt;Edge is fast — but it has architectural tradeoffs.&lt;/p&gt;




&lt;p&gt;🏁 Final Thoughts&lt;/p&gt;

&lt;p&gt;Deploying at the edge changed how I think about backend architecture.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;“What region should I deploy to?”&lt;/p&gt;

&lt;p&gt;You ask:&lt;/p&gt;

&lt;p&gt;“How close can I get to my users?”&lt;/p&gt;

&lt;p&gt;Cloudflare Workers remove friction.&lt;/p&gt;

&lt;p&gt;But you still need to design carefully.&lt;/p&gt;

&lt;p&gt;Edge computing isn’t hype.&lt;/p&gt;

&lt;p&gt;It’s architectural leverage.&lt;/p&gt;




&lt;p&gt;If you’re building globally distributed apps, this is worth exploring.&lt;/p&gt;

&lt;p&gt;Next, we could dive into:&lt;/p&gt;

&lt;p&gt;• Building a full real-time app with Durable Objects&lt;br&gt;
• Workers + AI inference at the edge&lt;br&gt;
• Benchmarking edge vs regional APIs&lt;/p&gt;

&lt;p&gt;Let me know which direction you want next.&lt;br&gt;
Check my portfolio out &lt;a href="https://theacj.com" rel="noopener noreferrer"&gt;TheACJ&lt;/a&gt;&lt;/p&gt;

</description>
      <category>worker</category>
      <category>cloud</category>
      <category>cloudflarechallenge</category>
      <category>api</category>
    </item>
    <item>
      <title>Rust for WebAssembly: How I Built Near-Native Performance Web Apps</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Sun, 22 Feb 2026 14:44:31 +0000</pubDate>
      <link>https://forem.com/realacjoshua/rust-for-webassembly-how-i-built-near-native-performance-web-apps-2f1g</link>
      <guid>https://forem.com/realacjoshua/rust-for-webassembly-how-i-built-near-native-performance-web-apps-2f1g</guid>
      <description>&lt;p&gt;I wanted browser performance.&lt;/p&gt;

&lt;p&gt;Not “fast enough.”&lt;br&gt;
Not “optimized JavaScript.”&lt;/p&gt;

&lt;p&gt;I wanted real performance.&lt;/p&gt;

&lt;p&gt;So I tried Rust + WebAssembly.&lt;/p&gt;

&lt;p&gt;What followed was:&lt;/p&gt;

&lt;p&gt;• Broken builds&lt;br&gt;
• Missing wasm targets&lt;br&gt;
• Confusing bundler errors&lt;br&gt;
• A lot of “why is this not loading?”&lt;/p&gt;

&lt;p&gt;But once it clicked?&lt;/p&gt;

&lt;p&gt;It became one of the most powerful tools in my stack.&lt;/p&gt;

&lt;p&gt;If you want to use Rust for WebAssembly without drowning in tooling chaos, here’s exactly what worked for me.&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;In this post, I’ll walk you from zero setup to running Rust in the browser — including performance use cases and production patterns.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;🎯 What We’re Building&lt;/p&gt;

&lt;p&gt;Rust + WebAssembly + JavaScript integration = 🚀&lt;br&gt;
Near-native performance inside the browser = ⚡&lt;/p&gt;

&lt;p&gt;We’ll:&lt;/p&gt;

&lt;p&gt;• Install the Rust WASM target&lt;br&gt;
• Use wasm-pack properly&lt;br&gt;
• Generate JS bindings&lt;br&gt;
• Integrate with a frontend&lt;br&gt;
• Understand where this actually makes sense&lt;/p&gt;

&lt;p&gt;No theory fluff. Just practical steps.&lt;/p&gt;



&lt;p&gt;🧠 Step 1: Install the WebAssembly Target&lt;/p&gt;

&lt;p&gt;First mistake I made?&lt;/p&gt;

&lt;p&gt;Trying to compile without the WASM target.&lt;/p&gt;

&lt;p&gt;Install it:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rustup target add wasm32-unknown-unknown&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If this fails, check your Rust version:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rustc --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Make sure you're on stable.&lt;/p&gt;



&lt;p&gt;🛠️ Step 2: Install wasm-pack (Critical Tool)&lt;/p&gt;

&lt;p&gt;This is what simplifies everything.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cargo install wasm-pack&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Without wasm-pack, you'll struggle generating JS bindings.&lt;/p&gt;

&lt;p&gt;It handles:&lt;/p&gt;

&lt;p&gt;• Compilation&lt;br&gt;
• Glue code&lt;br&gt;
• Packaging&lt;br&gt;
• npm compatibility&lt;/p&gt;



&lt;p&gt;🧩 Step 3: Create a Rust WASM Project&lt;/p&gt;

&lt;p&gt;Now initialize&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo new rust_wasm_demo &lt;span class="nt"&gt;--lib&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;rust_wasm_demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update your Cargo.toml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[lib]&lt;/span&gt;
&lt;span class="py"&gt;crate-type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"cdylib"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nn"&gt;[dependencies]&lt;/span&gt;
&lt;span class="py"&gt;wasm-bindgen&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.2"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This enables WebAssembly bindings.&lt;/p&gt;




&lt;p&gt;✍️ Step 4: Write Rust That Exports to JavaScript&lt;/p&gt;

&lt;p&gt;Inside src/lib.rs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;wasm_bindgen&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;prelude&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;#[wasm_bindgen]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;i32&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That #[wasm_bindgen] attribute?&lt;/p&gt;

&lt;p&gt;That’s what exposes your Rust function to JavaScript.&lt;/p&gt;

&lt;p&gt;Without it — nothing works.&lt;/p&gt;




&lt;p&gt;🚀 Step 5: Build for the Browser&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wasm-pack build --target web&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This generates a pkg/ directory containing:&lt;/p&gt;

&lt;p&gt;• .wasm binary&lt;br&gt;
• JavaScript bindings&lt;br&gt;
• Type definitions&lt;/p&gt;

&lt;p&gt;If you see strange linker errors, double-check:&lt;/p&gt;

&lt;p&gt;Rust target installed&lt;/p&gt;

&lt;p&gt;No Windows MSVC conflicts - if you see Windows MSVC conflict check out my post on fixing rust issues on Windows &lt;a href="https://dev.to/realacjoshua/-ditching-visual-studio-how-i-built-rust-on-windows-the-open-source-way-4m9e"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Correct crate type (cdylib)&lt;/p&gt;



&lt;p&gt;🌐 Step 6: Use It in the Browser&lt;/p&gt;

&lt;p&gt;Create a simple HTML file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"module"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./pkg/rust_wasm_demo.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;init&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="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open with a local server:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx serve .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because browsers block WASM loading via file://.&lt;/p&gt;

&lt;p&gt;That mistake cost me 30 minutes.&lt;/p&gt;




&lt;p&gt;⚡ Where Rust + WebAssembly Actually Shines&lt;/p&gt;

&lt;p&gt;Don’t rewrite your whole frontend.&lt;/p&gt;

&lt;p&gt;Use it for:&lt;/p&gt;

&lt;p&gt;• Heavy math computations&lt;br&gt;
• Cryptography&lt;br&gt;
• Image processing&lt;br&gt;
• Parsing large datasets&lt;br&gt;
• Blockchain logic&lt;br&gt;
• AI model preprocessing&lt;/p&gt;

&lt;p&gt;For simple UI logic? JavaScript is fine.&lt;/p&gt;



&lt;p&gt;📦 Production Pattern (What I Actually Use)&lt;/p&gt;

&lt;p&gt;My setup:&lt;/p&gt;

&lt;p&gt;Frontend (React / Next.js)&lt;br&gt;
⬇&lt;br&gt;
WASM module for heavy compute&lt;br&gt;
⬇&lt;br&gt;
Return results back to UI&lt;/p&gt;

&lt;p&gt;Example pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rust_wasm_demo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;init&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep WASM isolated to performance-critical functions.&lt;/p&gt;




&lt;p&gt;⚠️ Common Mistakes I Made&lt;/p&gt;

&lt;p&gt;• Trying to use WASM for everything&lt;br&gt;
• Forgetting async initialization&lt;br&gt;
• Not serving via HTTP&lt;br&gt;
• Fighting bundlers unnecessarily&lt;br&gt;
• Ignoring bundle size&lt;/p&gt;

&lt;p&gt;Remember:&lt;/p&gt;

&lt;p&gt;WASM is fast — but not magic.&lt;/p&gt;

&lt;p&gt;It improves compute speed, not DOM manipulation.&lt;/p&gt;




&lt;p&gt;🧠 Performance Reality Check&lt;/p&gt;

&lt;p&gt;Why is Rust fast?&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;p&gt;• It compiles to optimized machine-level bytecode&lt;br&gt;
• Memory is manually controlled&lt;br&gt;
• No runtime overhead like garbage collection&lt;/p&gt;

&lt;p&gt;When compiled to WebAssembly:&lt;/p&gt;

&lt;p&gt;You get near-native speed inside the browser sandbox.&lt;/p&gt;

&lt;p&gt;That’s powerful.&lt;/p&gt;




&lt;p&gt;🏁 Final Thoughts&lt;/p&gt;

&lt;p&gt;Rust + WebAssembly is not hype.&lt;/p&gt;

&lt;p&gt;It’s a precision tool.&lt;/p&gt;

&lt;p&gt;If you:&lt;/p&gt;

&lt;p&gt;• Need serious performance&lt;br&gt;
• Want memory safety&lt;br&gt;
• Are building compute-heavy apps&lt;/p&gt;

&lt;p&gt;It’s worth it.&lt;/p&gt;

&lt;p&gt;But use it strategically.&lt;/p&gt;

&lt;p&gt;Not emotionally.&lt;/p&gt;




&lt;p&gt;If this helped you break into Rust WASM without losing your sanity, drop a ❤️ or share it.&lt;/p&gt;

&lt;p&gt;Next, I might cover:&lt;/p&gt;

&lt;p&gt;• Rust WASM inside Next.js&lt;br&gt;
• Using WASM for blockchain clients&lt;br&gt;
• Benchmarking Rust vs JS properly&lt;/p&gt;

&lt;p&gt;Let me know which one you want.&lt;/p&gt;

&lt;p&gt;Check me out at &lt;a href="https://theacj.com.ng" rel="noopener noreferrer"&gt;https://theacj.com.ng&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webassembly</category>
      <category>rust</category>
      <category>pwa</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Next.js 16 Caching Explained: Revalidation, Tags, Draft Mode &amp; Real Production Patterns</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Sun, 22 Feb 2026 10:12:04 +0000</pubDate>
      <link>https://forem.com/realacjoshua/nextjs-16-caching-explained-revalidation-tags-draft-mode-real-production-patterns-26dl</link>
      <guid>https://forem.com/realacjoshua/nextjs-16-caching-explained-revalidation-tags-draft-mode-real-production-patterns-26dl</guid>
      <description>&lt;p&gt;I used to treat caching in Next.js like a superstition.&lt;/p&gt;

&lt;p&gt;Sometimes revalidate worked.&lt;br&gt;
Sometimes ISR felt magical.&lt;br&gt;
Sometimes nothing updated and I questioned reality.&lt;/p&gt;

&lt;p&gt;Then Next.js 16 dropped — and the caching model finally made sense.&lt;/p&gt;

&lt;p&gt;If you’re building production apps and want predictable caching, controlled invalidation, and proper preview workflows, this is the breakdown I wish I had earlier.&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;In this post, I’ll show you exactly how I now structure caching in Next.js 16 — using tags, on-demand revalidation, improved fetch controls, and draft mode.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;🎯 What We’re Building&lt;/p&gt;

&lt;p&gt;A production-ready mental model for caching:&lt;/p&gt;

&lt;p&gt;• Static + dynamic control using fetch&lt;br&gt;
• Tag-based invalidation&lt;br&gt;
• On-demand revalidation&lt;br&gt;
• Draft mode for preview workflows&lt;br&gt;
• Real-world patterns I actually use&lt;/p&gt;

&lt;p&gt;No guesswork. No accidental stale pages.&lt;/p&gt;



&lt;p&gt;🧠 First: The New Mental Model&lt;/p&gt;

&lt;p&gt;In Next.js 16, caching is no longer “page-based”.&lt;/p&gt;

&lt;p&gt;It’s data-based.&lt;/p&gt;

&lt;p&gt;The unit of caching is now the fetch() call.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;p&gt;• Every fetch can be cached or dynamic&lt;br&gt;
• Every fetch can define revalidation rules&lt;br&gt;
• Every fetch can be invalidated via tags&lt;/p&gt;

&lt;p&gt;This is cleaner and more scalable.&lt;/p&gt;



&lt;p&gt;🔥 1. Controlling Cache with fetch&lt;/p&gt;

&lt;p&gt;Here’s the default behavior:&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, this is cached in production.&lt;/p&gt;

&lt;p&gt;Now let’s control it explicitly.&lt;/p&gt;

&lt;p&gt;Static with Revalidation (ISR-style)&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;revalidate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&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;This means:&lt;/p&gt;

&lt;p&gt;• Cache this response&lt;br&gt;
• Revalidate every 60 seconds&lt;/p&gt;

&lt;p&gt;This replaces older ISR patterns in a more granular way.&lt;/p&gt;



&lt;p&gt;Fully Dynamic (No Cache)&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-store&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This forces dynamic rendering.&lt;/p&gt;

&lt;p&gt;Use this when:&lt;/p&gt;

&lt;p&gt;• User-specific data&lt;br&gt;
• Authenticated dashboards&lt;br&gt;
• Rapidly changing metrics&lt;/p&gt;



&lt;p&gt;🏷️ 2. The Real Upgrade: Cache Tags&lt;/p&gt;

&lt;p&gt;This is where Next.js 16 becomes powerful.&lt;/p&gt;

&lt;p&gt;You can now tag cached fetches.&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;tags&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="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the cache is associated with the "posts" tag.&lt;/p&gt;

&lt;p&gt;Why does this matter?&lt;/p&gt;

&lt;p&gt;Because you can invalidate it manually.&lt;/p&gt;




&lt;p&gt;🚀 3. On-Demand Revalidation with Tags&lt;/p&gt;

&lt;p&gt;Let’s say you create a new blog post via an admin panel.&lt;/p&gt;

&lt;p&gt;You don’t want to wait 60 seconds.&lt;/p&gt;

&lt;p&gt;You want instant refresh.&lt;/p&gt;

&lt;p&gt;Create a route handler:&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;// app/api/revalidate/route.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;revalidateTag&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/cache&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;revalidateTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;revalidated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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;Now whenever you hit this endpoint, all cached fetches tagged "posts" are invalidated.&lt;/p&gt;

&lt;p&gt;This is precise.&lt;/p&gt;

&lt;p&gt;Not page-level.&lt;br&gt;
Not global.&lt;br&gt;
Targeted.&lt;/p&gt;

&lt;p&gt;This is production-grade control.&lt;/p&gt;



&lt;p&gt;🧪 4. Combining Revalidation + Tags (Best Pattern)&lt;/p&gt;

&lt;p&gt;This is what I now use in real projects:&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;revalidate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tags&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="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What this gives me:&lt;/p&gt;

&lt;p&gt;• Automatic hourly refresh&lt;br&gt;
• Manual invalidation when needed&lt;br&gt;
• No unnecessary rebuilds&lt;/p&gt;

&lt;p&gt;This is the sweet spot.&lt;/p&gt;



&lt;p&gt;📝 5. Draft Mode for Preview Workflows&lt;/p&gt;

&lt;p&gt;If you’re building a CMS-driven app, preview matters.&lt;/p&gt;

&lt;p&gt;Next.js 16 improves draft handling significantly.&lt;/p&gt;

&lt;p&gt;Enable draft mode:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;draftMode&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/headers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;draftMode&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;enable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/admin&lt;/span&gt;&lt;span class="dl"&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;Then inside your page:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;draftMode&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/headers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Page&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;isEnabled&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;draftMode&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;isEnabled&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-store&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="s2"&gt;force-cache&lt;/span&gt;&lt;span class="dl"&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When draft mode is active:&lt;/p&gt;

&lt;p&gt;• Cache is bypassed&lt;br&gt;
• You see unpublished changes&lt;/p&gt;

&lt;p&gt;When off:&lt;/p&gt;

&lt;p&gt;• Full caching resumes&lt;/p&gt;

&lt;p&gt;This makes preview systems predictable.&lt;/p&gt;




&lt;p&gt;⚙️ 6. Production Pattern I Actually Use&lt;/p&gt;

&lt;p&gt;Here’s my standard architecture:&lt;/p&gt;

&lt;p&gt;Public content:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;next: { revalidate: 600, tags: ["posts"] }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Admin updates:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;revalidateTag("posts")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;User dashboards:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cache: "no-store"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Preview routes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;draftMode + no-store&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This gives:&lt;/p&gt;

&lt;p&gt;• Performance&lt;br&gt;
• Freshness&lt;br&gt;
• Precision&lt;br&gt;
• Scalability&lt;/p&gt;




&lt;p&gt;⚠️ Common Mistakes I Made&lt;/p&gt;

&lt;p&gt;• Mixing cache: "no-store" with revalidate&lt;br&gt;
• Forgetting tags and trying to revalidate entire paths&lt;br&gt;
• Assuming dev mode reflects production caching&lt;br&gt;
• Over-invalidating&lt;/p&gt;

&lt;p&gt;Remember: Dev mode behaves differently.&lt;/p&gt;

&lt;p&gt;Always test caching behavior in production builds:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;next build&lt;/code&gt;&lt;br&gt;
&lt;code&gt;next start&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;🧩 How This Changes Everything&lt;/p&gt;

&lt;p&gt;Before Next.js 16:&lt;/p&gt;

&lt;p&gt;Caching felt page-based and indirect.&lt;/p&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;p&gt;It’s declarative.&lt;br&gt;
It’s granular.&lt;br&gt;
It’s controllable.&lt;/p&gt;

&lt;p&gt;The shift from page ISR to fetch-level caching is a major architectural improvement.&lt;/p&gt;




&lt;p&gt;🏁 Final Thoughts&lt;/p&gt;

&lt;p&gt;Next.js 16 doesn’t just improve caching.&lt;/p&gt;

&lt;p&gt;It makes it predictable.&lt;/p&gt;

&lt;p&gt;If you understand:&lt;/p&gt;

&lt;p&gt;• fetch cache control&lt;br&gt;
• revalidate&lt;br&gt;
• tags&lt;br&gt;
• revalidateTag()&lt;br&gt;
• draftMode()&lt;/p&gt;

&lt;p&gt;You control performance instead of guessing it.&lt;/p&gt;




&lt;p&gt;If this clarified things for you, drop a ❤️ or share it with another frontend engineer fighting stale data.&lt;/p&gt;

&lt;p&gt;And if you’ve built an interesting caching pattern in Next.js 16, I’d like to see it.&lt;/p&gt;

&lt;p&gt;More deep dives coming.&lt;/p&gt;

&lt;p&gt;Check me out at &lt;a href="https://theacj.com.ng" rel="noopener noreferrer"&gt;https://theacj.com.ng&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>React Native vs. Flutter in 2025: The Ultimate Showdown (20 Key Differences)</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Fri, 16 Jan 2026 07:58:53 +0000</pubDate>
      <link>https://forem.com/realacjoshua/react-native-vs-flutter-in-2025-the-ultimate-showdown-20-key-differences-3chh</link>
      <guid>https://forem.com/realacjoshua/react-native-vs-flutter-in-2025-the-ultimate-showdown-20-key-differences-3chh</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;Choosing between React Native and Flutter is like choosing between a Swiss Army knife and a custom-forged Katana. Both get the job done, but the experience, the feel, and the outcome depend entirely on your mission.&lt;/p&gt;

&lt;p&gt;After my last post on &lt;a href="https://www.google.com/search?q=link-to-your-post" rel="noopener noreferrer"&gt;building Rust without Visual Studio&lt;/a&gt;, I’ve been thinking a lot about "the right tool for the job." Today, we’re putting the two giants of cross-platform development into the ring. No fluff—just 20 hard-hitting differences to help you decide.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Deep Dive: 20 Points of Difference
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;React Native (RN)&lt;/th&gt;
&lt;th&gt;Flutter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JavaScript/TypeScript (The Web King)&lt;/td&gt;
&lt;td&gt;Dart (Optimized for UI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bridge-based (Moving toward JSI)&lt;/td&gt;
&lt;td&gt;Skia/Impeller Engine (No bridge)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;UI Components&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Uses Native OEM components&lt;/td&gt;
&lt;td&gt;Draws its own widgets (Pixel perfect)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Great, but can lag in heavy animations&lt;/td&gt;
&lt;td&gt;Excellent (60-120 FPS consistently)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Easy for Web Devs&lt;/td&gt;
&lt;td&gt;Steeper (Learning Dart + Widget tree)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Development Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast (Hot Reload)&lt;/td&gt;
&lt;td&gt;Very Fast (Hot Reload + Hot Restart)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NPM/Yarn (Standard web flow)&lt;/td&gt;
&lt;td&gt;Binary download + Flutter Doctor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Community-driven (Can be fragmented)&lt;/td&gt;
&lt;td&gt;Official docs are elite &amp;amp; centralized&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Ecosystem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Massive (Packages for everything)&lt;/td&gt;
&lt;td&gt;Growing fast (Highly curated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Styling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flexbox (CSS-like)&lt;/td&gt;
&lt;td&gt;In-code widget properties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Third-party (React Navigation)&lt;/td&gt;
&lt;td&gt;Built-in (Navigator 2.0 / GoRouter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;State Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Redux, Zustand, Context API&lt;/td&gt;
&lt;td&gt;Provider, Riverpod, Bloc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Look &amp;amp; Feel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native-first (Matches OS updates)&lt;/td&gt;
&lt;td&gt;Brand-consistent (Looks same on all)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;IDE Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;VS Code (Supreme)&lt;/td&gt;
&lt;td&gt;Android Studio / VS Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;App Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generally smaller&lt;/td&gt;
&lt;td&gt;Generally larger (Engines are heavy)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Stability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mature, but "Upgrade Hell" is real&lt;/td&gt;
&lt;td&gt;Extremely stable; breaking changes rare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Company&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Meta (Facebook)&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Web Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Strong (React Native Web)&lt;/td&gt;
&lt;td&gt;Good, but feels "Canvas-y"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Jest/Detox&lt;/td&gt;
&lt;td&gt;Strong built-in Unit/Widget testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Market Demand&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Higher (Enterprise/Legacy)&lt;/td&gt;
&lt;td&gt;Surging (Startups/New apps)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🛡️ React Native: Where It Shines
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felx7yebfzjqjh75bysxb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felx7yebfzjqjh75bysxb.jpg" alt="React Native" width="576" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The "Web to Mobile" Bridge:&lt;/strong&gt; If your team knows React, you’re 80% there. You don’t need to learn a new paradigm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Truly Native UI:&lt;/strong&gt; Because it uses actual native components, your buttons look like Apple buttons on iOS and Google buttons on Android without trying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Sharing:&lt;/strong&gt; High potential to share logic between your website and your mobile app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ React Native: The Pain Points
&lt;/h3&gt;

&lt;p&gt;The Bridge Bottleneck: Passing data between JS and Native layers can cause stuttering in complex apps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Version Upgrades:&lt;/strong&gt; Updating RN versions is notoriously painful and can break your entire project.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Flutter: Where It Shines
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25khif30qnw2ahozvexq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25khif30qnw2ahozvexq.jpg" alt="Flutter" width="800" height="950"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UI Consistency:&lt;/strong&gt; Your app will look exactly the same on a 2018 Android and a 2025 iPhone. No "OS-specific" CSS hacks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Experience (DX):&lt;/strong&gt; "Flutter Doctor" is a godsend. The tooling is cohesive and feels like a complete product rather than a collection of libraries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Performance Graphics:&lt;/strong&gt; Perfect for apps with heavy custom animations or unique branding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Flutter: The Pain Points
&lt;/h3&gt;

&lt;p&gt;Dart: While easy to learn, it’s &lt;em&gt;another&lt;/em&gt; language to maintain.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proprietary Feel:&lt;/strong&gt; Because Flutter draws its own UI, it doesn't automatically get the "feel" of new OS updates (like iOS 18's new look) until the Flutter team updates the widgets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Verdict: Which one should you pick?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose React Native if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have a React-heavy team.&lt;/li&gt;
&lt;li&gt;You need to share code with a web platform.&lt;/li&gt;
&lt;li&gt;You want a "Native-first" look and feel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Choose Flutter if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want high-performance, custom UI.&lt;/li&gt;
&lt;li&gt;You want a more stable, integrated development environment.&lt;/li&gt;
&lt;li&gt;You’re building a greenfield project and want to move FAST.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🗣️ Your Turn!
&lt;/h3&gt;

&lt;p&gt;Are you Team Blue (Flutter) or Team Blue-ish (React Native)? Let's see some heated debates in the comments, let’s keep that energy going! Drop your "X vs Y" horror stories below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check me out at &lt;a href="https://theacj.com.ng" rel="noopener noreferrer"&gt;theacj.com.ng&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>javascript</category>
      <category>mobile</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>"🦀 Ditching Visual Studio: How I Built Rust on Windows the Open-Source Way"</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Wed, 23 Jul 2025 00:55:20 +0000</pubDate>
      <link>https://forem.com/realacjoshua/-ditching-visual-studio-how-i-built-rust-on-windows-the-open-source-way-4m9e</link>
      <guid>https://forem.com/realacjoshua/-ditching-visual-studio-how-i-built-rust-on-windows-the-open-source-way-4m9e</guid>
      <description>&lt;p&gt;This is a full walkthrough of setting up Rust on Windows using the GNU toolchain via MSYS2 — no Visual Studio, no &lt;code&gt;link.exe&lt;/code&gt;, no tears."&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I wanted Rust. I didn't want Visual Studio.&lt;/p&gt;

&lt;p&gt;What followed was 3 hours of linker errors, missing DLLs, and yelling at my terminal — but I came out stronger. If you want to set up Rust on Windows &lt;strong&gt;without&lt;/strong&gt; Visual Studio, here's exactly what worked for me.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎯 What We’re Building
&lt;/h2&gt;

&lt;p&gt;Rust + MSYS2 + GCC = ✅&lt;br&gt;&lt;br&gt;
No Visual Studio + No link.exe = 😌&lt;/p&gt;

&lt;p&gt;We’ll set up a &lt;strong&gt;lightweight, open-source Rust environment&lt;/strong&gt; on Windows using the &lt;code&gt;x86_64-pc-windows-gnu&lt;/code&gt; toolchain and MSYS2.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I assume you have rust installed already if not 👉 &lt;a href="https://www.rust-lang.org/tools/install" rel="noopener noreferrer"&gt;Install Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🛠️ 1. Install MSYS2 (the Right Way)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Download from 👉 &lt;a href="https://www.msys2.org/" rel="noopener noreferrer"&gt;msys2.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;MSYS2 MinGW 64-bit Terminal&lt;/strong&gt; (not the default one!)&lt;/li&gt;
&lt;li&gt;Then run:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;✅ If it asks you to restart the terminal, do that and run it again.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🔧 2. Install the Toolchain
&lt;/h2&gt;

&lt;p&gt;In MSYS2 MinGW 64-bit Terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nt"&gt;--needed&lt;/span&gt; base-devel mingw-w64-x86_64-toolchain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you face &lt;em&gt;mirror timeouts&lt;/em&gt; (especially common in Africa), update this file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="err"&gt;/etc/pacman.d/mirrorlist.mingw64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;Server&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;https://cdn.jsdelivr.net/msys2/mingw/x86_64/&lt;/span&gt;
&lt;span class="py"&gt;Server&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;https://mirror.msys2.org/mingw/x86_64/&lt;/span&gt;
&lt;span class="py"&gt;Server&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;https://packages.msys2.org/mingw/x86_64/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then clean and update again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pacman &lt;span class="nt"&gt;-Scc&lt;/span&gt;
pacman &lt;span class="nt"&gt;-Syyu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧠 3. Switch Rust to the GNU Toolchain if you were using another version
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rustup &lt;span class="nb"&gt;install &lt;/span&gt;stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✍️ 4. Tell Cargo Where Your Compiler Is
&lt;/h2&gt;

&lt;p&gt;Edit this file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Users\&amp;lt;your_username&amp;gt;\.cargo\config.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[target.x86_64-pc-windows-gnu]&lt;/span&gt;
&lt;span class="py"&gt;linker&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;msys64&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;mingw64&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;bin&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;gcc.exe"&lt;/span&gt;
&lt;span class="py"&gt;ar&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;msys64&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;mingw64&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;bin&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;ar.exe"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧩 5. Fix That Dreaded &lt;code&gt;dlltool&lt;/code&gt; Error
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;❌ &lt;code&gt;Error calling dlltool 'dlltool.exe': program not found&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Make sure you have it(dlltool):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;where dlltool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\msys64\mingw64\bin\dlltool.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If not, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; mingw-w64-x86_64-binutils &lt;span class="nt"&gt;--overwrite&lt;/span&gt; &lt;span class="s1"&gt;'*'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then temporarily fix your &lt;code&gt;PATH&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"C:\msys64\mingw64\bin;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make it permanent, add it via &lt;strong&gt;System Environment Variables&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 6. Test It Out
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo new rust_test
&lt;span class="nb"&gt;cd &lt;/span&gt;rust_test
cargo build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;🎉 No Visual Studio. No &lt;code&gt;link.exe&lt;/code&gt;. Just Rust + GCC goodness.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💡 Bonus Tips from My Pain
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Never run pacman from PowerShell or CMD&lt;/strong&gt; — MSYS2 only!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update your mirrors early&lt;/strong&gt; if you're outside the US/EU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MSVC-based crates&lt;/strong&gt; (like &lt;code&gt;windows-sys&lt;/code&gt;) will complain — avoid them or find GNU alternatives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your paths&lt;/strong&gt; — MSYS (&lt;code&gt;/usr/bin&lt;/code&gt;) and MinGW (&lt;code&gt;/mingw64/bin&lt;/code&gt;) are &lt;em&gt;not&lt;/em&gt; the same!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏁 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you’re tired of bloated installs and want to keep things lean and open-source, this setup works beautifully. It took me trial, error, and a bit of cursing to get it right — but now it’s smooth sailing.&lt;/p&gt;

&lt;p&gt;If this helped you, drop a ❤️ or share it. If you ran into a different issue, comment below — let’s help more Rustaceans build &lt;em&gt;without&lt;/em&gt; the bloat.&lt;/p&gt;




&lt;p&gt;🗣️ &lt;strong&gt;Your Turn:&lt;/strong&gt;&lt;br&gt;
Have your own story of escaping the grip of Visual Studio? Share it in the comments — let’s make the Windows + Rust experience better for all.&lt;/p&gt;

&lt;p&gt;Check me out at &lt;a href="https://theacj.com.ng" rel="noopener noreferrer"&gt;theacj.com.ng&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>programming</category>
      <category>devtool</category>
      <category>discuss</category>
    </item>
    <item>
      <title>The Ultimate Beginner's Guide to Setting Up Your Full Stack Development Environment</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Fri, 28 Feb 2025 09:32:13 +0000</pubDate>
      <link>https://forem.com/realacjoshua/the-ultimate-beginners-guide-to-setting-up-your-full-stack-development-environment-14cj</link>
      <guid>https://forem.com/realacjoshua/the-ultimate-beginners-guide-to-setting-up-your-full-stack-development-environment-14cj</guid>
      <description>&lt;h2&gt;
  
  
  Everything You Need to Start Coding Like a Pro 🚀
&lt;/h2&gt;




&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Setting up your development environment is the first step in your coding journey. A well-configured setup saves time, reduces errors, and lets you focus on building amazing projects. In this guide, we’ll walk through installing tools, writing your first code, and optimizing your workflow—all tailored for &lt;strong&gt;Windows&lt;/strong&gt; (but applicable to macOS/Linux too!).  &lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;1. Choosing Your Tools&lt;/strong&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Operating System (OS)&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows, macOS, or Linux&lt;/strong&gt;: All work! We’ll use Windows, but most tools are cross-platform.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro Tip&lt;/strong&gt;: Windows users can enable &lt;strong&gt;WSL (Windows Subsystem for Linux)&lt;/strong&gt; for a Unix-like terminal experience.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Code Editor: Visual Studio Code&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljeti4hbkw50wrj7njx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljeti4hbkw50wrj7njx1.png" alt="VS Code" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why VS Code?&lt;/strong&gt; Free, lightweight, and packed with extensions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Installation&lt;/strong&gt;:

&lt;ol&gt;
&lt;li&gt;Download from &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;code.visualstudio.com&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Install recommended extensions:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Server&lt;/strong&gt;: Auto-refresh your HTML pages.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prettier&lt;/strong&gt;: Automatically format code.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESLint&lt;/strong&gt;: Catch JavaScript errors.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLens&lt;/strong&gt;: Supercharge Git integration.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Command Line Interface (CLI)&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt;: Use PowerShell or Git Bash (installed with Git). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Open (PowerShell)&lt;/strong&gt;: Right Click the windows logo and Select PowerShell &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Commands Cheat Sheet&lt;/strong&gt;:
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd folder_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Navigate into a folder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd ..&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Move up (back) one folder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mkdir project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a new directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;ls&lt;/code&gt; or &lt;code&gt;dir&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;List files in the current folder&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;2. Essential Installations&lt;/strong&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Git: Version Control&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install&lt;/strong&gt;: Download from &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;git-scm.com&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First-Time Setup&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"Your Name"&lt;/span&gt; &lt;span class="c"&gt;# Replace Your name with value "Your Name"&lt;/span&gt;
  git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &lt;span class="s2"&gt;"your@email.com"&lt;/span&gt; &lt;span class="c"&gt;# Replace Your email with value "your@email.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic Commands&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  git init          &lt;span class="c"&gt;# Start a new repository&lt;/span&gt;
  git add &lt;span class="nb"&gt;.&lt;/span&gt;         &lt;span class="c"&gt;# Stage all changes&lt;/span&gt;
  git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial commit"&lt;/span&gt;  &lt;span class="c"&gt;# Save changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Node.js &amp;amp; npm: JavaScript Runtime&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install&lt;/strong&gt;: Download the LTS version from &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;nodejs.org&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify Installation&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  node &lt;span class="nt"&gt;-v&lt;/span&gt;  &lt;span class="c"&gt;# Should show v18.x or higher&lt;/span&gt;
  npm &lt;span class="nt"&gt;-v&lt;/span&gt;   &lt;span class="c"&gt;# Should show 9.x or higher&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Alternative&lt;/strong&gt;: Install &lt;strong&gt;Yarn&lt;/strong&gt; (&lt;code&gt;npm install -g yarn&lt;/code&gt;) for faster package management.
&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;3. Your First Project: “Hello, Web!”&lt;/strong&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1: Create a Project&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Open PowerShell/Git Bash and run:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;mkdir &lt;/span&gt;hello-web
   &lt;span class="nb"&gt;cd &lt;/span&gt;hello-web
   npm init &lt;span class="nt"&gt;-y&lt;/span&gt;  &lt;span class="c"&gt;# Creates package.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2: Build the HTML&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Create &lt;code&gt;index.html&lt;/code&gt; in VS Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Hello, Web!&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- Add Tailwind CSS for styling --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.tailwindcss.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-gray-100 text-center pt-10"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl font-bold text-blue-600"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello, Web Development! 🌐&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mt-4 text-gray-700"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;This is your first web page.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"alert('You clicked. Good, Make The ACJ Proud')"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mt-6 px-4 py-2 bg-blue-500 text-white rounded"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Click Me
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Step 3: View Your Page&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Right-click the file and select &lt;strong&gt;Open with Live Server&lt;/strong&gt; (VS Code extension).&lt;/li&gt;
&lt;li&gt;You Can also locate the file in your file explorer and double-click to open in a browser &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Success!&lt;/strong&gt; Your browser will open at &lt;code&gt;http://localhost:5500&lt;/code&gt; with auto-reload.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;4. Pro Tips for Efficiency&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep Tools Updated&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;VS Code: Check for updates in the &lt;strong&gt;Help&lt;/strong&gt; menu.
&lt;/li&gt;
&lt;li&gt;Node.js: Use &lt;code&gt;npm install -g npm&lt;/code&gt; to update npm.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Customize VS Code&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Themes: Try &lt;strong&gt;One Dark Pro&lt;/strong&gt; or &lt;strong&gt;Material Icon Theme&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Keyboard Shortcuts: Learn &lt;code&gt;Ctrl+S&lt;/code&gt; (Save) and &lt;code&gt;Ctrl+&lt;/code&gt; (backtick) to toggle the terminal.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Master Git&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Host your code on GitHub/GitLab.
&lt;/li&gt;
&lt;li&gt;Write descriptive commit messages like "Add login button" instead of "Update code".
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;5. Summary &amp;amp; Next Steps&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: VS Code, Git, Node.js, and CLI are your essentials.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow&lt;/strong&gt;: Use Live Server for instant previews, Git for version control.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mindset&lt;/strong&gt;: Stay curious—explore extensions and practice daily!
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Learn HTML/CSS/JavaScript basics.
&lt;/li&gt;
&lt;li&gt;Dive into frontend frameworks (React, Vue) or backend (Node.js, Express).&lt;/li&gt;
&lt;li&gt;Build a portfolio and share it on GitHub!
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Let’s Connect!&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Stuck? Comment below or reach out on &lt;a href="https://x.com/realacjoshua" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; and &lt;a href="https://theacj.com.ng" rel="noopener noreferrer"&gt;My Website&lt;/a&gt;. Happy coding! 👩💻👨💻&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#DevJourney #WebDev #Beginners #Programming
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devjournal</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>🚀 Rust Basics 5: Structs and Enums in Rust</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Wed, 01 Jan 2025 17:04:00 +0000</pubDate>
      <link>https://forem.com/realacjoshua/rust-basics-5-structs-and-enums-in-rust-562b</link>
      <guid>https://forem.com/realacjoshua/rust-basics-5-structs-and-enums-in-rust-562b</guid>
      <description>&lt;p&gt;Welcome back. This is the 5th post of our 7 post Rust tutorial.&lt;/p&gt;

&lt;p&gt;Structs and enums are fundamental tools in Rust to organize and represent data. They make your code more readable, efficient, and expressive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: What Are Structs?&lt;/strong&gt;&lt;br&gt;
A struct is like a blueprint for creating custom data types that group related information together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; A Person Struct&lt;br&gt;
Here’s how you define and use a struct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// u8 means an unsigned 8-bit integer (0–255)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Create an instance of the Person struct&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Chisom"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="c1"&gt;// Access and print struct fields&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Name: {}, Age: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="py"&gt;.name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="py"&gt;.age&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;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Defining a Struct:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;struct Person&lt;/code&gt; defines the structure.&lt;br&gt;
It has two fields: &lt;code&gt;name (a string)&lt;/code&gt; and &lt;code&gt;age (a number)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Creating an Instance:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Person { name: String::from("Chisom"), age: 25 }&lt;/code&gt; creates a Person instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Accessing Fields:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Use &lt;code&gt;person.name&lt;/code&gt; and &lt;code&gt;person.age&lt;/code&gt; to access the data.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Adding Methods to Structs&lt;/strong&gt;&lt;br&gt;
You can add methods (functions) to structs to perform operations on their data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; A Rectangle Struct with an area Method&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// u32 means an unsigned 32-bit integer&lt;/span&gt;
    &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Define a method to calculate area&lt;/span&gt;
    &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="py"&gt;.height&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Rectangle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The area of the rectangle is: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="nf"&gt;.area&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;&lt;em&gt;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;impl Rectangle:&lt;/em&gt;&lt;/strong&gt; Implements methods for the Rectangle struct.&lt;br&gt;
fn area(&amp;amp;self): A method that calculates the area.&lt;br&gt;
&amp;amp;self refers to the instance being used.&lt;br&gt;
You call the method with rect.area().&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 3: What Are Enums?&lt;/strong&gt;&lt;br&gt;
An enum represents a type that can have one of several predefined variants. Think of it as a way to describe "one thing out of many options."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example: A Direction Enum&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;Direction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Up&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Down&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;movement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Direction&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Up&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;movement&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nn"&gt;Direction&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Up&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Going up!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nn"&gt;Direction&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Down&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Going down!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nn"&gt;Direction&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Left&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Going left!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nn"&gt;Direction&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Going right!"&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;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Defining an Enum:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;enum Direction defines possible directions: Up, Down, Left, Right.&lt;br&gt;
Using &lt;code&gt;match&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;match&lt;/code&gt; checks which variant is used and runs the corresponding code.&lt;br&gt;
Each arm of &lt;code&gt;match&lt;/code&gt; corresponds to a variant of the enum.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Enums with Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enums can also hold data for each variant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example: A Message Enum&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

    &lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nn"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Message: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nn"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Number: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;br&gt;
Each variant of Message can hold different types of data (String or i32).&lt;br&gt;
&lt;code&gt;match&lt;/code&gt; extracts the data inside the variant using patterns.&lt;br&gt;
Practice for Today&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Struct Practice:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create a Car struct with fields for brand, model, and year.&lt;br&gt;
Write a program to print a car's details.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Toyota"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Corolla"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{} {} ({})"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="py"&gt;.brand&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="py"&gt;.model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="py"&gt;.year&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;&lt;strong&gt;Enum Practice:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create an enum Weather with variants Sunny, Rainy, and Cloudy.&lt;br&gt;
Use match to print an appropriate message for each variant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;Weather&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Sunny&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Rainy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Cloudy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Weather&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Sunny&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nn"&gt;Weather&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Sunny&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"It's a bright and sunny day!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nn"&gt;Weather&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Rainy&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Don't forget your umbrella!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nn"&gt;Weather&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Cloudy&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Looks like it might rain."&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;🎉 That’s it for RUST BASICS 5! You’ve learned Structs and Enums. In the next post, we’ll learn Functions and Error Handling in Rust.&lt;/p&gt;

&lt;p&gt;Feel free to share your solutions or ask questions in the comments. Happy coding! 🦀&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://doc.rust-lang.org/book/ch05-01-defining-structs.html" rel="noopener noreferrer"&gt;Rust Documentation&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;Let me know if anything feels unclear!&lt;br&gt;
Let me know how these examples feel, and if you'd like more exercises or clarification!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>rust</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🚀 Rust Basics 4: Ownership and Borrowing in Rust</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Fri, 27 Dec 2024 11:04:54 +0000</pubDate>
      <link>https://forem.com/realacjoshua/rust-basics-4-ownership-and-borrowing-in-rust-3o61</link>
      <guid>https://forem.com/realacjoshua/rust-basics-4-ownership-and-borrowing-in-rust-3o61</guid>
      <description>&lt;p&gt;Welcome back to the 4th post of our 7 post Rust tutorial.&lt;/p&gt;

&lt;p&gt;Rust’s ownership model is unique and ensures memory safety without garbage collection. Let’s simplify it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 1: Understanding Ownership&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Rust, every value has a single owner. When ownership changes, the original owner can no longer use the value.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// s1 owns the string&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;s2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Ownership moves to s2&lt;/span&gt;

    &lt;span class="c1"&gt;// println!("{}", s1); // This won't work: s1 is no longer valid&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// s2 is the new owner&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;s1 is invalid after assigning it to s2.&lt;/p&gt;

&lt;p&gt;This prevents double freeing of memory.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 2: Cloning Values&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To keep the original value, use .clone().&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;s2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="nf"&gt;.clone&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Makes a deep copy&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Now s1 is still valid&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s2&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;&lt;strong&gt;Step 3: Borrowing with References&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Borrowing allows you to use a value without taking ownership by passing a reference (&amp;amp;value).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Borrow `s` with `&amp;amp;`&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The length of '{}' is {}."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// `s` is still valid&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;calculate_length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;usize&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// `s` is a reference&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="nf"&gt;.len&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// Access borrowed value&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&amp;amp;s passes a reference to the function, so s retains ownership.&lt;/p&gt;

&lt;p&gt;The function reads the value but can’t modify it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Rule&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Borrowing allows multiple immutable references but no mutable references at the same time.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 4: Mutable References&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To modify a value, use &amp;amp;mut.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;change&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;change&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="nf"&gt;.push_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;", world"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Append to the string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only one mutable reference is allowed at a time to prevent conflicts.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 5: Rules of Ownership and Borrowing&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Each value has one owner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A value can only have one mutable reference or multiple immutable references, but not both.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;References must always be valid.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Practice for Today&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Write a program where a function calculates the square of a number using borrowing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modify a string inside a function using a mutable reference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Try assigning a value to two mutable references and observe the compiler error.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;🎉 That’s it for RUST BASICS 4! You’ve learned Borrowing and Ownership. In the next post, we’ll cover struct and enums in Rust.&lt;/p&gt;

&lt;p&gt;Feel free to share your solutions or ask questions in the comments. Happy coding! 🦀&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html" rel="noopener noreferrer"&gt;Rust Documentation&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;Let me know if anything feels unclear!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>rust</category>
    </item>
    <item>
      <title>🚀 Rust Basics 3: Control Flow, Conditional Statements, and Loops 🦀</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Thu, 12 Dec 2024 19:29:15 +0000</pubDate>
      <link>https://forem.com/realacjoshua/rust-basics-3-control-flow-conditional-statements-and-loops-25b6</link>
      <guid>https://forem.com/realacjoshua/rust-basics-3-control-flow-conditional-statements-and-loops-25b6</guid>
      <description>&lt;p&gt;Welcome back to RUST BASICS. In this 3rd post of our 7-part journey, we’ll tackle control flow in Rust. You’ll learn how to use if/else statements, match expressions, and loops to add logic and repetition to your programs.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 1: If/Else Statements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Control the flow of your program using if, else if, and else.&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The number is positive."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The number is negative."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The number is zero."&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;&lt;strong&gt;&lt;em&gt;Explanation:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If number &amp;gt; 0, the first block runs.&lt;/p&gt;

&lt;p&gt;If number &amp;lt; 0, the second block runs.&lt;/p&gt;

&lt;p&gt;If none of the conditions are met, the else block runs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Rust Tip: Conditions in Rust must evaluate to a boolean (true or false). Unlike some other languages, you cannot use if number (it must be if number != 0, for example).&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 2: Using If as an Expression&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What does "if as an expression" mean?&lt;/p&gt;

&lt;p&gt;Unlike in some other programming languages, in Rust, if can be used to produce a value — not just control flow. This means you can assign the result of an if statement to a variable.&lt;/p&gt;

&lt;p&gt;This is possible because everything in Rust is an expression. An expression returns a value, while a statement (like let x = 5;) performs an action but does not return a value.&lt;/p&gt;




&lt;p&gt;Example : Assigning the Result of if to a Variable&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The value of number is: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;let number = if condition { 5 } else { 10 };&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A. Rust checks if condition is true or false.&lt;/p&gt;

&lt;p&gt;If condition is true, Rust returns 5, and that value is assigned to number.&lt;/p&gt;

&lt;p&gt;If condition is false, Rust returns 10, and that value is assigned to number.&lt;/p&gt;

&lt;p&gt;B. Since the if block returns a value, you don't need to explicitly assign a value to number. Rust automatically "returns" the last value of the block.&lt;/p&gt;

&lt;p&gt;C. The final result is printed as:&lt;br&gt;
"The value of number is: 5" (because condition is true).&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Match Expressions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;match is a powerful control flow tool similar to switch statements in other languages.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Monday"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"Monday"&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Start of the work week!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s"&gt;"Friday"&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Weekend is near!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s"&gt;"Saturday"&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="s"&gt;"Sunday"&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"It’s the weekend!"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="k"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Just another day!"&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;"Saturday" | "Sunday" means "if it's Saturday or Sunday, do this."&lt;/p&gt;

&lt;p&gt;The underscore _ acts as a catch-all for any other value that doesn't match the cases.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 4: Loops in Rust&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rust provides three types of loops:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;loop - Infinite loop (until break is used).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;while - Loops while a condition is true.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;for - Loops over a range, array, or collection.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;1️⃣ &lt;strong&gt;&lt;em&gt;Loop (Infinite Loop)&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;counter&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="k"&gt;loop&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;counter&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="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Count: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Exits the loop&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;The loop runs infinitely until break is called.&lt;/p&gt;

&lt;p&gt;This is useful when you don't know how many iterations are needed.&lt;/p&gt;




&lt;p&gt;2️⃣ While Loop&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;number&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="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{}!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;number&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="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"LIFTOFF 🚀"&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;While the number is not zero, the loop runs.&lt;/p&gt;

&lt;p&gt;When number becomes zero, the loop exits and prints "LIFTOFF 🚀".&lt;/p&gt;




&lt;p&gt;3️⃣ For Loop (Range)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Number: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;1..5 is a range that goes from 1 to 4 (exclusive of 5).&lt;/p&gt;

&lt;p&gt;If you want to include 5, use 1..=5.&lt;/p&gt;




&lt;p&gt;3️⃣ For Loop (Array)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Apple"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Banana"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Cherry"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;fruit&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fruits&lt;/span&gt;&lt;span class="nf"&gt;.iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"I love {}!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fruit&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;.iter() returns each item of the array.&lt;/p&gt;

&lt;p&gt;You can loop over arrays, vectors, and collections in Rust.&lt;/p&gt;




&lt;p&gt;*&lt;em&gt;Step 5: Break, Continue, and Return&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
break: Ends a loop immediately.&lt;/p&gt;

&lt;p&gt;continue: Skips the current iteration and moves to the next.&lt;/p&gt;

&lt;p&gt;return: Exits a function and returns a value.&lt;/p&gt;

&lt;p&gt;Example with Break and Continue&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&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="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Skip even numbers&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Stop the loop at 7&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Odd number: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&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;&lt;strong&gt;&lt;em&gt;Explanation&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;continue skips even numbers.&lt;/p&gt;

&lt;p&gt;break stops the loop as soon as it encounters 7.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Practice Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge 1&lt;/strong&gt;: FizzBuzz&lt;br&gt;
Write a program that prints numbers from 1 to 20. But:&lt;/p&gt;

&lt;p&gt;For multiples of 3, print "Fizz" instead of the number.&lt;/p&gt;

&lt;p&gt;For multiples of 5, print "Buzz".&lt;/p&gt;

&lt;p&gt;For multiples of both 3 and 5, print "FizzBuzz".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&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="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"FizzBuzz"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nb"&gt;Copy&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;Complete&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;Code&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Challenge 2:&lt;/strong&gt; Guess the Number (Simple Version)&lt;br&gt;
Ask the user to guess a number between 10 and 20. If they guess correctly, print “You guessed it!”.&lt;/p&gt;

&lt;p&gt;The code below is an example do yours to reflect 10 to 20 with a number in-between as the secret_number&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;secret_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Hardcoded for simplicity&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Guess a number between 1 and 10:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;guess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nn"&gt;io&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.read_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to read input"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i32&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="nf"&gt;.trim&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.parse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Please type a number!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;guess&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;secret_number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You guessed it!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Wrong guess. The correct number was {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secret_number&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;🎉 Congratulations on completing Rust Basics 3!&lt;br&gt;
You now understand control flow, conditional statements, and loops. You’re becoming a Rustacean! 🦀&lt;/p&gt;

&lt;p&gt;Next, we’ll explore functions, ownership, and borrowing in Rust Basics 4.&lt;/p&gt;




&lt;p&gt;Did you try the challenges?&lt;br&gt;
Post your solutions in the comments. If you have any questions, I’ll be happy to help! 🦀&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://www.rust-lang.org/learn" rel="noopener noreferrer"&gt;Rust Documentation&lt;/a&gt; to learn more.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 Rust Basics 2: Data Types, Shadowing, and String Manipulation 🦀</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Fri, 06 Dec 2024 17:35:30 +0000</pubDate>
      <link>https://forem.com/realacjoshua/rust-basics-2-data-types-shadowing-and-string-manipulation-95f</link>
      <guid>https://forem.com/realacjoshua/rust-basics-2-data-types-shadowing-and-string-manipulation-95f</guid>
      <description>&lt;p&gt;&lt;em&gt;Welcome back to our RUST BASICS series! In this post, we’ll explore data types, shadowing, and string manipulation in Rust. These concepts will help you understand how Rust handles values and strings efficiently.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 1: Understanding Data Types&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rust is a statically-typed language, which means every variable must have a type. Rust can infer types for you, but sometimes it’s useful to specify them explicitly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primitive Types in Rust:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Integer: i8, i16, i32, i64, i128 (signed), and u8, u16, u32, u64, u128 (unsigned).&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Floating-point: f32 and f64.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Boolean: &lt;em&gt;bool (true or false).&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Character: &lt;em&gt;char (single characters like 'a' or '#').&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example Code:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;i32&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// Integer&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;5.9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// Floating-point&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;is_student&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Boolean&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;grade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// Character&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Age: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Height: {} ft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Is Student: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;is_student&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Grade: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;grade&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;&lt;strong&gt;Step 2: Constants vs Variables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Constants are immutable and must have a type specified. They’re declared with the const keyword and are accessible globally.&lt;/p&gt;

&lt;p&gt;Variables (declared with let) can be mutable if prefixed with mut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example Code:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Constant&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;counter&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="c1"&gt;// Mutable variable&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Counter: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;counter&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="c1"&gt;// Increment counter&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Updated Counter: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Value of PI: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PI&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;&lt;strong&gt;Step 3: Shadowing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Shadowing allows you to redefine a variable with the same name. This is useful when you want to transform data without changing its name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example Code:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Number: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;number&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="c1"&gt;// Shadowing&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Shadowed Number: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Five"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Shadowing with a different type&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Number as a string: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&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;&lt;em&gt;Note: Shadowing creates a new variable and doesn’t modify the previous one. This is different from using mut.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 4: String Manipulation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rust has two types of strings:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;String slices (&amp;amp;str): Immutable references to string data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;String: A growable, heap-allocated data structure.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example Code:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;greeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// &amp;amp;str&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"TheACJ"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// String&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Greeting: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Name: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Modify the String&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="nf"&gt;.push_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" Rustacean!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Updated Name: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&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;&lt;em&gt;String Methods&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Rustacean"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Length: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="nf"&gt;.len&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;           &lt;span class="c1"&gt;// Get length&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Is Empty: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="nf"&gt;.is_empty&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;    &lt;span class="c1"&gt;// Check if empty&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Uppercase: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="nf"&gt;.to_uppercase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Convert to uppercase&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Step 5: Practice Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A. Modify the program to calculate the area of a circle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;f64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;7.0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;area&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;radius&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The area of the circle is: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;area&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;B. Write a program to count the number of characters in a user-inputted string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter a string:"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nn"&gt;io&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;.read_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to read input"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;trimmed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="nf"&gt;.trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The string '{}' has {} characters."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trimmed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trimmed&lt;/span&gt;&lt;span class="nf"&gt;.len&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;&lt;strong&gt;&lt;em&gt;Troubleshooting Tips&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you get a type mismatch error, ensure variable types are consistent.&lt;/p&gt;

&lt;p&gt;If you see cannot borrow as mutable, check if your variable is declared as mut.&lt;/p&gt;




&lt;p&gt;🎉 That’s it for RUST BASICS 2! You’ve learned about data types, constants, shadowing, and string manipulation. In the next post, we’ll cover control flow and loops in Rust.&lt;/p&gt;




&lt;p&gt;Feel free to share your solutions or ask questions in the comments. Happy coding! 🦀&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://doc.rust-lang.org/stable/book/" rel="noopener noreferrer"&gt;Rust Documentation&lt;/a&gt; for more details.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 Rust Basics 1: Getting Started with Rust Programming 🦀</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Thu, 05 Dec 2024 18:52:25 +0000</pubDate>
      <link>https://forem.com/realacjoshua/rust-basics-1-getting-started-with-rust-programming-1am0</link>
      <guid>https://forem.com/realacjoshua/rust-basics-1-getting-started-with-rust-programming-1am0</guid>
      <description>&lt;p&gt;&lt;em&gt;Welcome to RUST BASICS 1, the first post in our 7-part journey to mastering Rust! Whether you’re a beginner or just curious about Rust, this series will guide you step by step.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 1: Install Rust&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s set up Rust on your computer.&lt;/p&gt;

&lt;p&gt;For Linux/Mac/Windows (WSL):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open your terminal or command prompt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run this command:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-sSf&lt;/span&gt; https://sh.rustup.rs | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Follow the on-screen instructions. After installation, verify Rust is installed by typing:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rustc &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This should display the installed Rust version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Alternative Installation Methods&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;macOS: Use Homebrew:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;rust
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Windows:&lt;/em&gt; Download the Rust installer from &lt;a href="//rust-lang.org"&gt;Rust Official&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 2: Write and Run Your First Rust Program&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's write the classic "Hello, world!" program.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a folder for your Rust projects:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;rust_projects
&lt;span class="nb"&gt;cd &lt;/span&gt;rust_projects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Inside the folder, create a file named &lt;code&gt;main.rs&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open it in your favorite text editor (e.g., VS Code).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write the following code:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, world!"&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;&lt;em&gt;fn means function.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;main() is the entry point of a Rust program&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;println! prints to the console. The ! indicates it's a macro.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Save the file and run it:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rustc main.rs
./main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output should be:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Hello, world!&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 3: Variables in Rust&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Variables in Rust are immutable by default, but you can make them mutable with the mut keyword.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Update your main.rs file with this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"TheACJ"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// `mut` makes the variable mutable&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Name: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Age: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Score: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&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;&lt;strong&gt;&lt;em&gt;Explanation:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;let name = "TheACJ"; creates an immutable variable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;let mut score = 100; creates a mutable variable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;{} is a placeholder in println!, replaced with the variable's value.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Add this to your code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;    &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Reassigning the value of score&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Updated Score: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it again, and you’ll see the updated score.(This shows the power of &lt;em&gt;mut&lt;/em&gt;)&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 4: Taking User Input&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s make the program interactive by asking for user input.&lt;/p&gt;

&lt;p&gt;Replace the code in main.rs with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;favorite_color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;String&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter your favorite color: "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nn"&gt;io&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;.read_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;favorite_color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to read input"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Your favorite color is {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;favorite_color&lt;/span&gt;&lt;span class="nf"&gt;.trim&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;&lt;strong&gt;&lt;em&gt;Explanation:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;use std::io; imports Rust’s input/output library.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;String::new() creates a new, empty string.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;read_line reads user input and stores it in favorite_color.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;.trim() removes extra spaces or newline characters from the input.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Run it and interact with your program!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 5: Practice Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A. Modify the program to ask for your age and print a message like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;You are 25 years old!&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;B. Write a program to calculate the square of a number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The square of {} is {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to share your solutions in the comments for feedback!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;Troubleshooting Tips&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If rustc isn’t recognized, ensure Rust is added to your PATH. Restart your terminal or run:&lt;/p&gt;

&lt;p&gt;source $HOME/.cargo/env&lt;/p&gt;

&lt;p&gt;If your program doesn’t work as expected, double-check for typos.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;🎉 That’s it for RUST BASICS 1! Congratulations on taking your first steps in Rust programming. Stay tuned for RUST BASICS 2, where we’ll dive deeper into more advanced concepts&lt;/em&gt;.&lt;/p&gt;




&lt;p&gt;Let me know if you found this helpful or if you ran into any issues. Happy coding! 🦀&lt;/p&gt;

&lt;p&gt;Feel free to look at &lt;a href="https://doc.rust-lang.org/rustdoc/" rel="noopener noreferrer"&gt;Rust Doc&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>programming</category>
      <category>web3</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Write and Deploy Your First Solana Program on Solana Playground</title>
      <dc:creator>RealACJoshua</dc:creator>
      <pubDate>Fri, 29 Nov 2024 07:02:30 +0000</pubDate>
      <link>https://forem.com/realacjoshua/write-and-deploy-your-first-solana-program-on-solana-playground-4ml7</link>
      <guid>https://forem.com/realacjoshua/write-and-deploy-your-first-solana-program-on-solana-playground-4ml7</guid>
      <description>&lt;p&gt;Welcome Back.&lt;br&gt;
In this tutorial, we’ll explore how to write, compile, and deploy a simple Solana program using &lt;strong&gt;Solana Playground&lt;/strong&gt;, an in-browser development environment. Our program will let users store their favorite number, color, and hobbies on-chain.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;What We'll Cover&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Setting up Solana Playground.&lt;/li&gt;
&lt;li&gt;Writing the Solana program.&lt;/li&gt;
&lt;li&gt;Breaking down the code.&lt;/li&gt;
&lt;li&gt;Compiling the program.&lt;/li&gt;
&lt;li&gt;Deploying the program to Solana Devnet.&lt;/li&gt;
&lt;li&gt;Interacting with the program.&lt;/li&gt;
&lt;/ol&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;1. Setting Up Solana Playground&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Solana Playground&lt;/strong&gt; allows you to write, compile, and deploy Solana programs without setting up a local environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://beta.solpg.io/" rel="noopener noreferrer"&gt;Solana Playground&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe47smrfh4xfpwjcn59q3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe47smrfh4xfpwjcn59q3.jpeg" alt="Solana Playground" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new project:

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create New Project&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Anchor Framework&lt;/strong&gt; as the template.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7e9gntq29tqg7ednilb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7e9gntq29tqg7ednilb.jpeg" alt="Choose Anchor" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;2. Writing the Solana Program&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Replace the default code in the &lt;code&gt;lib.rs&lt;/code&gt; file with the following program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;anchor_lang&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;prelude&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;declare_id!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;ANCHOR_DISCRIMINATOR_SIZE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;usize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;#[program]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;mod&lt;/span&gt; &lt;span class="n"&gt;favorites&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;set_favorites&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SetFavorites&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;hobbies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&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="nd"&gt;msg!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Greeting Human from {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="py"&gt;.program_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;user_public_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="py"&gt;.accounts.user&lt;/span&gt;&lt;span class="nf"&gt;.key&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="nd"&gt;msg!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"User {user_public_key}'s favorite number is {number}, favorite color is {color}, and their hobbies are {hobbies:?}"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="py"&gt;.accounts.favorites&lt;/span&gt;&lt;span class="nf"&gt;.set_inner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Favorites&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;hobbies&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="nf"&gt;Ok&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="nd"&gt;#[account]&lt;/span&gt;
&lt;span class="nd"&gt;#[derive(InitSpace)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Favorites&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="nd"&gt;#[max_len(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="nd"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="nd"&gt;#[max_len(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="nd"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;hobbies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;#[derive(Accounts)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;SetFavorites&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;#[account(mut)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="nd"&gt;#[account(&lt;/span&gt;
        &lt;span class="nd"&gt;init_if_needed,&lt;/span&gt;
        &lt;span class="nd"&gt;payer&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;user,&lt;/span&gt;
        &lt;span class="nd"&gt;space&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;ANCHOR_DISCRIMINATOR_SIZE&lt;/span&gt;  &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="nd"&gt;Favorites::INIT_SPACE,&lt;/span&gt;
        &lt;span class="nd"&gt;seeds&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="s"&gt;b"favorites"&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;user&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nd"&gt;key()&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nd"&gt;as_ref()]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;bump&lt;/span&gt;
    &lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;favorites&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Account&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Favorites&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;system_program&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Program&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;&amp;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;h3&gt;
  
  
  &lt;strong&gt;3. Breaking Down the Code Block by Block&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Imports&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;anchor_lang&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;prelude&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Imports essential components from the Anchor framework for Solana development, such as macros and helper types.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Program ID Declaration&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;declare_id!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This unique program ID identifies your deployed program on the blockchain. (Yours will be automatically generated, don't freight!!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Anchor Discriminator&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;ANCHOR_DISCRIMINATOR_SIZE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;usize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;A fixed size used to reserve space in accounts for program-specific metadata. Required for Anchor programs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Program Module&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[program]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;mod&lt;/span&gt; &lt;span class="n"&gt;favorites&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;set_favorites&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SetFavorites&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;hobbies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&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="nd"&gt;msg!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Greeting Human from {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="py"&gt;.program_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;user_public_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="py"&gt;.accounts.user&lt;/span&gt;&lt;span class="nf"&gt;.key&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="nd"&gt;msg!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"User {user_public_key}'s favorite number is {number}, favorite color is {color}, and their hobbies are {hobbies:?}"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="py"&gt;.accounts.favorites&lt;/span&gt;&lt;span class="nf"&gt;.set_inner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Favorites&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;hobbies&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="nf"&gt;Ok&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;ul&gt;
&lt;li&gt;The &lt;code&gt;#[program]&lt;/code&gt; macro defines the entry point of the program.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;set_favorites&lt;/code&gt; function:

&lt;ul&gt;
&lt;li&gt;Accepts user inputs: a favorite number, a color, and a list of hobbies.&lt;/li&gt;
&lt;li&gt;Logs the user's inputs using &lt;code&gt;msg!&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Stores the data in the &lt;code&gt;Favorites&lt;/code&gt; account.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Favorites Account&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[account]&lt;/span&gt;
&lt;span class="nd"&gt;#[derive(InitSpace)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Favorites&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="nd"&gt;#[max_len(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="nd"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="nd"&gt;#[max_len(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="nd"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;hobbies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;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;ul&gt;
&lt;li&gt;The &lt;code&gt;Favorites&lt;/code&gt; struct represents the data structure stored in the blockchain.&lt;/li&gt;
&lt;li&gt;Each field (e.g., &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;hobbies&lt;/code&gt;) represents a piece of data the user can store.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;#[max_len]&lt;/code&gt; attribute limits the maximum size for &lt;code&gt;String&lt;/code&gt; and &lt;code&gt;Vec&amp;lt;String&amp;gt;&lt;/code&gt; fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;SetFavorites Context&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[derive(Accounts)]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;SetFavorites&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;#[account(mut)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Signer&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="nd"&gt;#[account(&lt;/span&gt;
        &lt;span class="nd"&gt;init_if_needed,&lt;/span&gt;
        &lt;span class="nd"&gt;payer&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;user,&lt;/span&gt;
        &lt;span class="nd"&gt;space&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;ANCHOR_DISCRIMINATOR_SIZE&lt;/span&gt;  &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="nd"&gt;Favorites::INIT_SPACE,&lt;/span&gt;
        &lt;span class="nd"&gt;seeds&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="s"&gt;b"favorites"&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;user&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nd"&gt;key()&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nd"&gt;as_ref()]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;bump&lt;/span&gt;
    &lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;favorites&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Account&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Favorites&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="n"&gt;system_program&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Program&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;'info&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;&amp;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;ul&gt;
&lt;li&gt;Defines the accounts required to execute the &lt;code&gt;set_favorites&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;favorites&lt;/code&gt; account is initialized with specific constraints (e.g., size, payer, and seed).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;4. Compiling the Program&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click the &lt;strong&gt;Build&lt;/strong&gt; button in the Solana Playground interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait for the program to compile. If successful, you’ll see the message "Build Successful."&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56rmv293w1pl4sx5vnjj.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56rmv293w1pl4sx5vnjj.jpeg" alt="Build Successful" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;5. Deploying the Program to Solana Devnet&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Deploy your program:

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Your Solana Playground Wallet will pop up (You need some Devnet $SOL to perform this transaction on the Blochain, by default you should have some $SOL).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju9s1mfqagbmbm0kb8ww.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fju9s1mfqagbmbm0kb8ww.jpeg" alt="Wallet Playground" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;After deployment, copy the program’s public key &lt;strong&gt;(That'd be the ID in the declare_id&lt;/strong&gt;. You’ll need it to interact with the program.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;6. Interacting with the Program&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  a. Set Favorites
&lt;/h4&gt;

&lt;p&gt;To test the program, you’ll call the &lt;code&gt;set_favorites&lt;/code&gt; method:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Test&lt;/strong&gt; tab in Solana Playground.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;set_favorites&lt;/code&gt; from the dropdown.&lt;/li&gt;
&lt;li&gt;Enter the following inputs under &lt;strong&gt;Args&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;number&lt;/code&gt;: Your favorite number (e.g., 7).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;color&lt;/code&gt;: Your favorite color (e.g., "blue").&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;hobbies&lt;/code&gt;: A list of your hobbies (e.g., &lt;code&gt;["reading", "coding"]&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Accounts&lt;/strong&gt; input:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;user&lt;/code&gt;: Select &lt;strong&gt;Current Wallet&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;favorites&lt;/code&gt;: Select &lt;strong&gt;From seed&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;seed(1)&lt;/code&gt;: type "favorites"&lt;/li&gt;
&lt;li&gt;click on &lt;strong&gt;Add Seed&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;seed(2)&lt;/code&gt;: select &lt;strong&gt;publicKey&lt;/strong&gt; then 
 select &lt;strong&gt;Current Wallet&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Generate&lt;/strong&gt; and then click on &lt;strong&gt;Test&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Check the transaction on Solana Explorer by clicking on the pop-up.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You’ve successfully written, deployed, and tested a Solana program on Devnet. This foundational knowledge will help you dive deeper into Solana development.&lt;/p&gt;

&lt;p&gt;If you enjoyed this tutorial, give it a ❤️ and follow for more Solana content. 🚀&lt;/p&gt;

</description>
      <category>anchor</category>
      <category>solana</category>
      <category>rust</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
