This story on HackerNoon has a decentralized backup on Sia.
Transaction ID: a-0SH2cf10z2P4h2uzJIp6on6zyDD61lu82RX5kojV8
Cover

Code Smell 04 - Stop Abusing Stringsβ€”Use Real Objects Instead

Written by @mcsee | Published on 2025/8/28

TL;DR β€”
Use real abstractions and real objects instead of accidental string manipulation.

Too much parsing, exploding, regex, strcmp, strpos and string manipulation functions.

TL;DR: Use real abstractions and real objects instead of accidental string manipulation.

Problems πŸ˜”

  • Complexity
  • Readability
  • Maintainability
  • Lack of abstractions
  • Fragile logic
  • Hidden intent
  • Hard debugging
  • Poor modeling
  • Regex mess

Solutions πŸ˜ƒ

  1. Work with objects instead.
  2. Replace strings with data structures dealing with object relations.
  3. Go back to Perl :)
  4. identify bijection problems between real objects and the strings.

Examples

  • Serializers
  • Parsers

Context πŸ’¬

When you abuse strings, you try to represent structured concepts with plain text.

You parse, explode, and regex your way around instead of modeling the domain.

This creates fragile code that breaks with small input changes.

Sample Code πŸ“–

Wrong 🚫

<?php

$schoolDescription = 'College of Springfield';

preg_match('/[^ ]*$/', $schoolDescription, $results);
$location = $results[0]; // $location = 'Springfield'.

$school = preg_split('/[\s,]+/', $schoolDescription, 3)[0]; 
//'College'

Right πŸ‘‰

<?

class School {
    private $name;
    private $location;

    function description() {
        return $this->name . ' of ' . $this->location->name;
    }
}

Detection πŸ”

  • Semi-Automatic

Automated detection is not easy.

If your code uses too many string functions, linters can trigger a warning.

Tags 🏷️

  • Primitive Obsession

Level πŸ”‹

  • Beginner

Why the Bijection Is Important πŸ—ΊοΈ

You must mirror the real-world domain in your code.

When you flatten roles, addresses, or money into raw strings, you lose control.

This mismatch leads to errors, duplication, and weak models.

One-to-one mapping between domain and code gives you clarity and robustness.

AI Generation πŸ€–

AI generators often produce string-abusing code because it looks shorter and easier.

The generated solution can be correct for toy cases but fragile in real systems.

AI Detection 🧲

You can instruct AI tools to replace string checks with domain objects.

With clear prompts, AI can spot and fix string abuse effectively.

Try Them! πŸ› 

Remember: AI Assistants make lots of mistakes

Suggested Prompt: Convert it to more declarative

Without Proper Instructions

With Specific Instructions

ChatGPT

ChatGPT

Claude

Claude

Perplexity

Perplexity

Copilot

Copilot

You

You

Gemini

Gemini

DeepSeek

DeepSeek

Meta AI

Meta AI

Grok

Grok

Qwen

Qwen

Conclusion 🏁

Don't abuse strings.

Favor real objects.

Add missing protocol to distinguish them from raw strings.

Relations πŸ‘©β€β€οΈβ€πŸ’‹β€πŸ‘¨

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

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

https://maximilianocontieri.com/code-smell-295-string-concatenation?embedable=true

More Information πŸ“•

Credits πŸ™

Photo by Nathaniel Shuman on Unsplash


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

[story continues]


Written by
@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

Topics and
tags
programming|perl|clean-code|technology|software-development|software-engineering|refactoring|code-smells
This story on HackerNoon has a decentralized backup on Sia.
Transaction ID: a-0SH2cf10z2P4h2uzJIp6on6zyDD61lu82RX5kojV8