Programmers use Null as different flags. It can hint at an absence, an undefined value, en error etc. Multiple semantics lead to coupling and defects.Programmers use Null as different flags. It can hint at an absence, an undefined value, en error etc. Multiple semantics lead to coupling and defects.

Code Smell 12 - Null is Schizophrenic and Does Not Exist in The Real-world

Programmers use Null as different flags. It can hint at an absence, an undefined value, en error etc. Multiple semantics lead to coupling and defects.

Problems 😔

  • Coupling between callers and senders.
  • If/Switch/Case Polluting.
  • Null is not polymorphic with real objects. Hence, Null Pointer Exception
  • Null does not exist on real-world. Thus, it violates Bijection Principle

Solutions 😃

  1. Avoid Null.
  2. Use the NullObject pattern to avoid ifs.
  3. Use Optionals.

https://hackernoon.com/null-the-billion-dollar-mistake-8t5z32d6?embedable=true

Refactorings ⚙️

https://hackernoon.com/code-refactoring-tips-no-015-remove-null?embedable=true

https://hackernoon.com/refactoring-029-how-to-replace-null-with-collection?embedable=true

https://hackernoon.com/refactoring-014-how-to-remove-if?embedable=true

Context 💬

When you use null, you encode multiple meanings into a single value.

Sometimes you want to represent an absence.

Sometimes you mean you have not loaded your objects yet.

Sometimes you mean error.

Callers must guess your intent and add conditionals to protect themselves.

You spread knowledge about internal states across your codebase.

Sample Code 📖

Wrong 🚫

class CartItem { constructor(price) { this.price = price; } } class DiscountCoupon { constructor(rate) { this.rate = rate; } } class Cart { constructor(selecteditems, discountCoupon) { this.items = selecteditems; this.discountCoupon = discountCoupon; } subtotal() { return this.items.reduce((previous, current) => previous + current.price, 0); } total() { if (this.discountCoupon == null) return this.subtotal(); else return this.subtotal() * (1 - this.discountCoupon.rate); } } cart = new Cart([ new CartItem(1), new CartItem(2), new CartItem(7) ], new DiscountCoupon(0.15)]); // 10 - 1.5 = 8.5 cart = new Cart([ new CartItem(1), new CartItem(2), new CartItem(7) ], null); // 10 - null = 10

class CartItem { constructor(price) { this.price = price; } } class DiscountCoupon { constructor(rate) { this.rate = rate; } discount(subtotal) { return subtotal * (1 - this.rate); } } class NullCoupon { discount(subtotal) { return subtotal; } } class Cart { constructor(selecteditems, discountCoupon) { this.items = selecteditems; this.discountCoupon = discountCoupon; } subtotal() { return this.items.reduce( (previous, current) => previous + current.price, 0); } total() { return this.discountCoupon.discount(this.subtotal()); } } cart = new Cart([ new CartItem(1), new CartItem(2), new CartItem(7) ], new DiscountCoupon(0.15)); // 10 - 1.5 = 8.5 cart = new Cart([ new CartItem(1), new CartItem(2), new CartItem(7) ], new NullCoupon()); // 10 - nullObject = 10

Detection 🔍

Most Linters can flag null usages and warn you.

Exceptions 🛑

You sometimes need to deal with null when you integrate with databases, legacy APIs, or external protocols.

You must contain null at the boundaries and convert it immediately into meaningful objects.

Tags 🏷️

  • Null

Level 🔋

[x] Intermediate

Why the Bijection Is Important 🗺️

When you use null, you break the bijection between your code and the MAPPER.

Nothing in the mapper behaves like null.

Absence, emptiness, and failure mean different things.

When you collapse them into null, you force your program to guess reality and you invite defects.

AI Generation 🤖

AI generators often introduce this smell.

They default to null when they lack context or want to keep examples short and also because it is widespread (but harmful) industry default.

AI Detection 🧲

You can instruct AI to remove nulls with simple rules.

When you ask for explicit domain objects and forbid nullable returns, generators usually fix the smell correctly.

Try Them! 🛠

Remember: AI Assistants make lots of mistakes

Without Proper Instructions 📵

  • ChatGPT
  • Claude
  • Perplexity
  • Copilot
  • You
  • Gemini
  • DeepSeek
  • Meta AI
  • Grok
  • Qwen

With Specific Instructions 👩‍🏫

  • ChatGPT
  • Claude
  • Perplexity
  • Copilot
  • You
  • Gemini
  • DeepSeek
  • Meta AI
  • Grok
  • Qwen

Conclusion 🏁

  • Null is the billion-dollar mistake. Yet, most program languages support them and libraries suggest its usage.

Relations 👩‍❤️‍💋‍👨

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xviii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xix

https://hackernoon.com/how-to-get-rid-of-annoying-ifs-forever-zuh3zlo

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxx

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xliii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxix

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxvi

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xlii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxii

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33ol

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-v-evj3zs9

More Information 📕

https://hackernoon.com/null-the-billion-dollar-mistake-8t5z32d6?embedable=true

Credits 🙏

Photo by Kurt Cotoaga on Unsplash


Tony Hoare

https://hackernoon.com/400-thought-provoking-software-engineering-quotes?embedable=true


This article is part of the CodeSmell Series.

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd?embedable=true

\

Market Opportunity
Notcoin Logo
Notcoin Price(NOT)
$0,0005879
$0,0005879$0,0005879
-%1,11
USD
Notcoin (NOT) Live Price Chart
Disclaimer: The articles reposted on this site are sourced from public platforms and are provided for informational purposes only. They do not necessarily reflect the views of MEXC. All rights remain with the original authors. If you believe any content infringes on third-party rights, please contact service@support.mexc.com for removal. MEXC makes no guarantees regarding the accuracy, completeness, or timeliness of the content and is not responsible for any actions taken based on the information provided. The content does not constitute financial, legal, or other professional advice, nor should it be considered a recommendation or endorsement by MEXC.

You May Also Like

Real Estate Tokenization: Why Legal Architecture Matters More Than Technology

Real Estate Tokenization: Why Legal Architecture Matters More Than Technology

Oleg Lebedev on How Corporate Law Determines the Success or Failure of Digital Asset Projects. Real estate tokenization is gaining momentum worldwide.Visit Website
Share
Coinstats2026/01/10 02:00
Fed Makes First Rate Cut of the Year, Lowers Rates by 25 Bps

Fed Makes First Rate Cut of the Year, Lowers Rates by 25 Bps

The post Fed Makes First Rate Cut of the Year, Lowers Rates by 25 Bps appeared on BitcoinEthereumNews.com. The Federal Reserve has made its first Fed rate cut this year following today’s FOMC meeting, lowering interest rates by 25 basis points (bps). This comes in line with expectations, while the crypto market awaits Fed Chair Jerome Powell’s speech for guidance on the committee’s stance moving forward. FOMC Makes First Fed Rate Cut This Year With 25 Bps Cut In a press release, the committee announced that it has decided to lower the target range for the federal funds rate by 25 bps from between 4.25% and 4.5% to 4% and 4.25%. This comes in line with expectations as market participants were pricing in a 25 bps cut, as against a 50 bps cut. This marks the first Fed rate cut this year, with the last cut before this coming last year in December. Notably, the Fed also made the first cut last year in September, although it was a 50 bps cut back then. All Fed officials voted in favor of a 25 bps cut except Stephen Miran, who dissented in favor of a 50 bps cut. This rate cut decision comes amid concerns that the labor market may be softening, with recent U.S. jobs data pointing to a weak labor market. The committee noted in the release that job gains have slowed, and that the unemployment rate has edged up but remains low. They added that inflation has moved up and remains somewhat elevated. Fed Chair Jerome Powell had also already signaled at the Jackson Hole Conference that they were likely to lower interest rates with the downside risk in the labor market rising. The committee reiterated this in the release that downside risks to employment have risen. Before the Fed rate cut decision, experts weighed in on whether the FOMC should make a 25 bps cut or…
Share
BitcoinEthereumNews2025/09/18 04:36
Why Altcoins Could Be Primed for 5–10x Gains After Years of Consolidation

Why Altcoins Could Be Primed for 5–10x Gains After Years of Consolidation

Altcoins are poised for a potential 5-10x surge after long consolidation, with dominance set to rise in 2025 based on historical trends. The cryptocurrency market
Share
LiveBitcoinNews2026/01/10 02:32