# Code Smell 287 - Unused Local Assignment

> TL;DR: Avoid assigning values you never use.

# Problems

- Dead code
- Unclear intent
- [Maintenance overhead](https://maximilianocontieri.com/code-smell-154-too-many-variables)
- Hidden complexity
- Debugging leftovers 
- Bad [scoping](https://maximilianocontieri.com/code-smell-107-variables-reuse)
- Commented code
- [Mutability](https://maximilianocontieri.com/the-evil-powers-of-mutants)

# Solutions

1. Remove unused assignments.  
2. Try to avoid [side effects](https://maximilianocontieri.com/code-smell-209-side-effects).

# Context

When you assign a value to a *local variable* but never use it, you create unnecessary clutter in your code. 

This can confuse others and make the code harder to maintain.

Sometimes, when debugging you can assign temporal variables for better inspection.

This also happens when you assign the execution to an *object property* but it is harder to follow.

It is also a sign of a [mutating object](https://maximilianocontieri.com/code-smell-176-changes-in-essence) because if you remove the assignment, only the side effects remain.

Mutating objects can cause unexpected side effects, making it harder to track changes. 

# Sample Code

## Wrong

<!-- [Gist Url](https://gist.github.com/mcsee/c99bd3dae0c4f595955b075d7af0f858) -->

```javascript
function updateUserName(user, newname) {
  user.name = newname;
  return user;
}

function performMaintenance(existingUser) {
  let updatedUser = updateUserName(existingUser, "Bobby Peru");
  // Other tasks
}
// The variable updatedUser is never used
```

## Right

<!-- [Gist Url](https://gist.github.com/mcsee/0f2709a03e2b36be4ae3f417933a66ef) -->

```javascript
function updateUserName(user, newname) {
  user.name = newname;
  // Just side effects without explicit return
}

function performMaintenance(existingUser) {
  updateUserName(existingUser, "Bobby Peru");
  // Other tasks
}
```

# Detection

[X] Automatic 

You can detect this smell using static analysis tools or code reviews that check for unused variables after assignment.

Most linters flag this as an issue.

# Tags

- Bloaters 

# Level

[x] Beginner 

# Why the Bijection Is Important 

It stays clean and efficient when your code accurately reflects [real-world](https://maximilianocontieri.com/the-one-and-only-software-design-principle) logic. 

Unused assignments break this connection, making it harder to understand the intent and maintain the code. 

# AI Generation

AI tools seldom generate unused variable assignments when they misunderstand intent. 

# AI Detection

AI-assisted refactoring with clear instructions can flag unused variables and suggest removals, but it might not always understand if the return value should have been used.

## Try Them!

*Remember: AI Assistants make lots of mistakes*

| Without Proper Instructions    | With Specific Instructions |
| -------- | ------- |
| [ChatGPT](https://chat.openai.com/?q=Correct+and+explain+this+code%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | [ChatGPT](https://chat.openai.com/?q=remove+unused+variable%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) |
| [Claude](https://claude.ai/new?q=Correct+and+explain+this+code%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | [Claude](https://claude.ai/new?q=remove+unused+variable%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) |
| [Perplexity](https://perplexity.ai/?q=Correct+and+explain+this+code%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | [Perplexity](https://perplexity.ai/?q=remove+unused+variable%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) |
| [Copilot](https://www.bing.com/chat?showconv=1&sendquery=1&q=Correct+and+explain+this+code%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | [Copilot](https://www.bing.com/chat?showconv=1&sendquery=1&q=remove+unused+variable%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) |
| [Gemini](https://gemini.google.com/?q=Correct+and+explain+this+code%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | [Gemini](https://gemini.google.com/?q=remove+unused+variable%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | 
| [DeepSeek](https://deepseek.com/?q=Correct+and+explain+this+code%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | [Gemini](https://deepseek.com/?q=remove+unused+variable%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | 
| [Meta AI](https://www.meta.ai/chat?question=Correct+and+explain+this+code%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | [Meta AI](https://www.meta.ai/chat?question=remove+unused+variable%3A+%60%60%60javascript%0D%0Afunction+updateUserName%28user%2C+newname%29+%7B%0D%0A++user.name+%3D+newname%3B%0D%0A++return+user%3B%0D%0A%7D%0D%0A%0D%0Afunction+performMaintenance%28existingUser%29+%7B%0D%0A++let+updatedUser+%3D+updateUserName%28existingUser%2C+%22Bobby+Peru%22%29%3B%0D%0A++%2F%2F+Other+tasks%0D%0A%7D%0D%0A%2F%2F+The+variable+updatedUser+is+never+used%0D%0A%60%60%60) | 

# Conclusion

Unused variables after [mutations](https://maximilianocontieri.com/the-evil-powers-of-mutants) create noise and confusion.

Don't assign the return value if you don't need it. 

If the method should return something meaningful, make sure you use it.

# Relations

%[https://maximilianocontieri.com/code-smell-209-side-effects]

%[https://maximilianocontieri.com/code-smell-176-changes-in-essence]

%[https://maximilianocontieri.com/code-smell-154-too-many-variables]

%[https://maximilianocontieri.com/code-smell-107-variables-reuse]

# More Information

%[https://maximilianocontieri.com/the-evil-powers-of-mutants]

# Disclaimer

Code Smells are my [opinion](https://maximilianocontieri.com/i-wrote-more-than-90-articles-on-2021-here-is-what-i-learned).

# Credits

Photo by [Evan Demicoli](https://unsplash.com/@evandemicoli) on [Unsplash](https://unsplash.com/photos/brown-and-green-houses-under-blue-sky-during-daytime-HGCqL-tRcac)
        
* * *

> If you have to spend effort to decipher code, you should rewrite it.

_Martin Golding_
 
%[https://maximilianocontieri.com/software-engineering-great-quotes]

* * *

This article is part of the CodeSmell Series.

%[https://maximilianocontieri.com/how-to-find-the-stinky-parts-of-your-code]
